# 宠小它 Phase 0 Pilot RC2 Release Manifest

> RC ID：`phase0-pilot-rc2`
>
> 冻结日期：2026-08-01
>
> 状态：**Ready for Release（未部署）**
>
> RC Steward：PM Assistant
>
> 发布边界：本 manifest 只冻结源码与本地验证证据；真实生产配置、备份、迁移、TLS、live smoke 和三角色验收未完成前不得改为 `Released`。

## 1. 冻结提交与回滚点

| 仓库 | RC commit | 前一稳定 commit（应用回滚点） | 状态 |
|---|---|---|---|
| backend | `133f61e4ad6152865a76c4e9328d96e689f53635` | `b6138475f073881199abdef8d2681dcb92d1ab66` | clean |
| admin | `3470b124e408501ed824b993bcb34dd40e77c293` | `7e924fa79d6dafbd60643b8e31519737feb92e3b` | clean |
| frontend | `e11ce1aaaa602011718e300e4527a0d971f1339a` | `d29ece3a85e6d137d91afd609f49b10051ad9b7f` | clean |
| docs | 本 manifest 所在 commit | 前一 commit | 提交后确认 clean |

RC 只能部署以上 commit 或由其生成且校验和一致的产物。后续任何代码改动必须建立新 RC 或 Hotfix manifest。

## 2. 纳入范围

- 生产 profile 启动配置门禁：`ddl-auto=validate`、关闭 SQL/万能验证码、强 session secret、显式 HTTPS 域名、显式 CORS、绝对上传目录；
- 生产启动跳过开发期默认服务写入；
- JPA schema 校验后执行 15 项只读数据库不变量预检；
- liveness/readiness，readiness 覆盖 DB、磁盘、上传目录、FFmpeg/ffprobe；
- 后端只读 smoke、systemd/EnvironmentFile/Nginx 独立模板；
- admin、H5、小程序发布域名门禁，默认 `.invalid` 占位配置主动失败；
- 小程序构建显式使用 `--mode mp-weixin`，读取独立环境配置；
- 生产 Runbook、试点门店开通清单、监控告警基线和本体 `BR-CONFIG-003`；
- 已冻结的身份拆分、StoreCustomer、BusinessEvent、真实预约容量能力及四个迁移脚本。

## 3. 明确排除

- 未连接、未迁移、未修改任何生产数据库；
- 未安装 systemd unit，未改服务器 Nginx，未申请或续签 TLS；
- 未重启 Petstore、Gitea、GitLab 或其他服务；
- 未使用真实生产域名、微信账号、AppSecret、密码或 token；
- 未上传微信体验版/正式版，未完成真机或生产三角色 smoke；
- 未接入真实外部监控和告警通知渠道；
- 不包含支付、库存、储值、复杂会员、多门店组织、订单系统或泛 AI。

## 4. 本地验证证据

环境：

- OpenJDK `21.0.10`（源码按 Java 17 release 编译）
- Maven `3.9.14`
- Node `v22.22.2`
- npm `10.9.7`

结果：

| 门禁 | 结果 |
|---|---|
| `mvn test` | 158 tests，0 failure / 0 error / 0 skipped |
| `mvn -DskipTests package` | BUILD SUCCESS |
| backend shell `bash -n` | PASS |
| backend/admin/frontend `git diff --check` | PASS |
| admin `npm run build` | PASS；存在既有大 chunk warning，不阻塞功能验证 |
| frontend `npm run build:h5` | PASS |
| frontend `npm run build:mp-weixin` | PASS；`verify-mp-app-json` PASS |
| admin/frontend 默认占位配置门禁 | 按预期失败 |
| admin/frontend 受控测试 HTTPS 源门禁 | PASS；输出只含变量名，不含值 |
| `validate_ontology.py` | 238 条引用完整 |
| `audit_drift.py` | 55 endpoints、13 JPA entities，code-only / ontology-only 均为 0 |

## 5. 本地构建校验和

| 产物 | SHA-256 | 可部署性 |
|---|---|---|
| `backend/target/petstore-backend-1.0.0.jar` | `e4ef2477c549c77c7bd0ed392d772c2abd62fb5fdf2e932124cd82726e7d01d2` | 可作为候选 jar；仍须最终生产环境预检 |
| admin `dist` 文件哈希清单的聚合 SHA-256 | `017089e4c7fd236b6efcbdcba10b32b9e423e3ccef9613e7ea66717b65b2e984` | **不可部署**：使用仓库 `.invalid` 占位配置构建，仅证明可编译 |
| H5 `dist/build/h5` 聚合 SHA-256 | `d816be92a12f353b2edb6f19987936f7f25e1b09d0a285c4203da494caeb123e` | **不可部署**：使用仓库 `.invalid` 占位配置构建，仅证明可编译 |
| 小程序 `dist/build/mp-weixin` 聚合 SHA-256 | `97489bb9b4b93f96606a10459b6d73526c8287d598019c1651490be854376084` | **不可上传**：使用仓库 `.invalid` 占位配置构建，仅证明可编译 |

正式 admin/H5/小程序必须用权限受控的真实域名文件重新运行 `preflight:release` 和构建，并把新产物校验和追加到生产发布记录。

## 6. 生产 Go/No-Go 门禁

- [ ] Petstore 专用 API/admin/report 域名与 TLS 已就绪，不复用其他产品域名；
- [ ] 最终配置通过后端、admin、frontend release preflight，未输出任何秘密值；
- [ ] 生产数据库完成全量备份、SHA-256 和隔离恢复演练；
- [ ] 按顺序执行身份拆分、StoreCustomer、BusinessEvent、预约容量四个迁移，末尾检查均为 0；
- [ ] 后端 15 项只读不变量预检与 JPA `validate` 通过；
- [ ] Petstore systemd/Nginx 配置独立，`nginx -t` 通过；
- [ ] liveness/readiness 和只读 smoke 通过；
- [ ] boss/staff/customer 三角色人工 smoke 及权限/异常反例通过；
- [ ] 微信合法域名、体验版和真机验证通过；
- [ ] 外部监控、告警联系人和值班窗口真实测试通过；
- [ ] Gitea/GitLab 健康回归通过，配置 diff 证明未被改动；
- [ ] 前一应用/静态/小程序回滚点明确，数据库不做自动 down migration。

任一项未勾选，结论均为 `No-Go / Ready for Release`，不得写成已上线。

## 7. 风险与回滚

- admin 主 bundle 仍有大于 500 kB 的构建 warning；试点流量下不是上线阻断，但应进入后续性能债，不与本次发布安全闭环混排。
- readiness 会把上传目录或 FFmpeg 依赖异常视为不可接流；服务器权限和二进制路径必须在切流前验证。
- 四个迁移为前向兼容追加式变更。常规故障只回退应用和静态软链接，不删除列/表/索引；灾难性数据恢复需要独立授权和变更单。
- 微信小程序必须走平台版本回退，不能依靠服务器软链接。

详细步骤见《生产发布与回滚Runbook-2026-08-01.md》；试点运营和指标口径见《试点门店开通清单-2026-08-01.md》；告警见《生产监控与告警基线-2026-08-01.md》。
