petstore-docs/qa-reports/phase2-pilot-rc3-release-manifest.md
2026-08-02 02:48:06 +08:00

12 KiB
Raw Blame History

宠小它 Phase 2 Pilot RC3 Release Manifest

RC IDphase2-pilot-rc3
冻结日期2026-08-02
状态:Ready for Release未部署
适用范围35 家独立宠物洗护单店真实试点
样本目标:约 200 次完整服务后进行 Phase 2 / 商业化决策

RC3 是当前唯一推荐候选:它继承 RC2 的 cohort-safe 指标口径,并下线未实现的公开微信网页 OAuth demo。真实生产配置、备份恢复、八个迁移、TLS、live smoke、三角色验收和首份指标基线未形成证据前不得把状态改为 Released

1. 前序 RC 取代说明

  • phase2-pilot-rc1:因指标默认覆盖全店/全历史、对象粒度混用和 24h 未成熟 cohort 被 RC2 取代。
  • phase2-pilot-rc2:应用主链与指标均可用,但风险扫描发现公开 /api/wechat/authorize/api/wechat/callback 仍是伪造 demo_openid_ 的未实现网页 OAuth被 RC3 取代。

RC3 删除旧网页 OAuth 控制器、公开 allowlist 项和 WECHAT_REDIRECT_URI,保留唯一正式登录链路 /api/user/wx-phone-login。Admin/H5/小程序源码均未调用旧端点;数据库与现有 session 无迁移或兼容影响。RC1/RC2 tag 与清单保持不动,只用于审计。

2. 冻结提交与回滚点

仓库 RC3 commit / ref 前一稳定应用回滚点Phase 0 Pilot RC2 冻结状态
backend 339c793855717970540ba752ba999d06e17becac 133f61e4ad6152865a76c4e9328d96e689f53635 main == origin/mainclean
admin 078ae0f9d18e6598a1af13fa8bf2b5b97c25a410 3470b124e408501ed824b993bcb34dd40e77c293 main == origin/mainclean
frontend a595ea8fa17dd0dbdfb607abea93e8c0d24b13a8 e11ce1aaaa602011718e300e4527a0d971f1339a main == origin/mainclean
docs refs/tags/phase2-pilot-rc3(本清单所在 commit fe92fab4dd1ced2fd9d617cfb39e75f950caa318 tag 推送后解析并复核 clean

部署前必须在四仓分别解析 phase2-pilot-rc3 并与本表一致;任何源码变化、产物 hash 变化或 tag 不一致都必须建立新 RC不得移动已有 tag 或覆盖本记录。

3. RC 产品范围

本 RC 收口以下完整业务内核:

  1. 预约客户与服务执行人身份拆分;
  2. 同店 StoreCustomer 客户主档;
  3. 不可变、幂等、低敏 BusinessEventAuditLog
  4. 服务时长快照、门店容量和连续时段占用;
  5. 生产配置门禁、readiness、只读 smoke 与回滚模板;
  6. 基于事实的门店行动工作台;
  7. 报告 unknown / unsent / sent 显式发送确认;
  8. 微信小程序核验老板入驻、门店开通清单和一次性员工邀请;
  9. StoreCustomer 低敏事实时间线;
  10. FollowUpTask 领取/改期/终结状态机与真实预约归因;
  11. 三角色验收脚本、cohort-safe 试点指标字典和只读聚合查询 v2
  12. 单一微信小程序登录契约,未实现的网页 OAuth fail-closed 下线。

明确排除支付、库存、储值、复杂会员、多门店组织、订单系统、泛 AI、PC 扫码登录、公众号网页授权,以及未授权的任何生产写入。

4. 本地验证证据

验证环境:

  • macOS 26.5.2 / arm64
  • OpenJDK 21.0.10(项目按 Java 17 release 编译)
  • Maven 3.9.14
  • Node.js v22.22.2
  • npm 10.9.7
  • Python 3.9.6
  • 隔离指标查询验证MySQL 8.0.46
门禁 结果
backend mvn test PASS220 tests0 failure / 0 error / 0 skipped
backend mvn -q -DskipTests package PASS
backend bash -n deploy/*.sh PASS
legacy web OAuth regression contract PASS:控制器不存在,公开 allowlist/配置/模板/README 均无旧路径、redirect 变量或 demo identity
backend 合成配置静态 preflight PASS:不提供 WECHAT_REDIRECT_URI 仍通过静态门禁;以 stub 在数据库阶段前受控停止
admin npm run build PASS1671 modules仅既有 >500 kB chunk warning
frontend npm run build:h5 PASS
frontend npm run build:mp-weixin PASSverify-mp-app-json PASS
admin/frontend 默认占位配置门禁 PASS:按预期拒绝 .invalid
admin/frontend 合成 HTTPS 配置门禁 PASS:只验证格式,未使用真实域名或秘密值
pilot metrics v2 契约测试 PASS:只读、默认门店 0、显式集合、成熟 cohort、四项反例、无直接标识输出
pilot metrics v2 隔离 MySQL 执行 PASS:门店/窗口隔离、同粒度转化、24h 成熟分母、事件顺序与四项反例通过RC3 查询内容与已验证 RC2 完全一致
ontology validate PASS288 条Action 75、Entity 29、Event 33、Relation 102、Rule 49
ontology drift PASS68/68 HTTP、16/16 JPAcode-only / ontology-only / entity drift 均为 0
四仓 git diff --check PASS
四仓工作树与远端 清单提交及 tag 推送后再次复核

隔离 MySQL 使用临时、无网络、无密码、纯合成最小 schema 与数据;执行结束即关闭和清理,没有连接或读取本机现有 MySQL 业务库。本地仍未运行最终 production profile 的 JPA validate 与生产库 31 项不变量,该项保留为生产 No-Go 门禁。

5. 本地构建产物与 SHA-256

目录 hash 算法:按相对路径以 LC_ALL=C 排序,对每个文件执行 SHA-256再对完整 hash 清单执行一次 SHA-256。

产物 大小 SHA-256 可部署性
backend/target/petstore-backend-1.0.0.jar 50,995,644 bytes c9dad3a9df93b84cef920aa75dbc5c7e786d91660f8f124b8872700572df9843 候选 JAR仍须真实配置与生产只读预检
backend/db/queries/pilot_metrics.sql source d2de4684722811028474001ed7e56bbf56297733509e1a71850d7ab404587210 仅限只读账号/副本;执行前显式填写门店集合与窗口
admin dist27 files 1,536 KiB 4a955634c32db3d8d5cc8038572faa436462b36df02044eb3e55a39490823663 不可部署:当前包含 .invalid 占位域名,仅证明可编译
H5 dist/build/h565 files 852 KiB a77241af1a6b16183f03214adea070549a534cf768939202f3caa02d071aa6a5 不可部署:当前包含 .invalid 占位域名,仅证明可编译
微信小程序 dist/build/mp-weixin142 files 820 KiB f11b3cd95fb98f8ccec6b3556107d7e7bdc4eedf1c2e2975258bc766aa05525f 不可上传:当前包含 .invalid 占位域名,仅证明可编译

正式 Admin/H5/小程序必须以权限受控的真实域名配置重新执行 release preflight 与 build并把新 hash 追加到生产发布记录。

6. 数据库迁移冻结

迁移只能按下列顺序执行;每一步先核对 SHA-256再执行脚本末尾反例查询。失败时停止不交换顺序、不自动 down migration、不猜测性回填。

顺序 文件 SHA-256
1 20260801_split_service_identity.sql 05fa560cb59a746681057187ffaccc1db4980de8e99bbcb0c42dd6ce25a759ac
2 20260801_create_store_customer.sql 5eabfc4689d5acc9400e70fc3cbdcd0549b8e9a8763176bef7ec3715f94002dd
3 20260801_create_business_event.sql d0a3ebe3ac2f3bd0c4c125832df4895dec66d5cc95077b4292b10055b876c184
4 20260801_create_booking_capacity.sql 25e9c8817c48a2c4854d034981f765dfe4b6ebb90f95a8f45a54513106c4ad51
5 20260801_create_report_send_status.sql 321284bc44774c69de4b584f3eb3a8f235653be6c0a5e75e3557a697f78381a2
6 20260802_create_store_onboarding.sql 40d45f382a03c35e9e9696e65553488713cdaadf90094d824f406561f196039c
7 20260802_create_store_customer_timeline.sql 5185a03f9a983823c75aae6661b0e68d51c75e226d117039b22f81f383ac7c2d
8 20260802_create_follow_up_task.sql a1ff5176b2775745ee1fb044a15d25d1cc52dba9fef72ffb45727f430db22c09

八迁移完成后,以正式 service user、最终 production 配置运行 deploy/release-preflight.sh。通过条件是静态配置门禁、JPA schema validate 和 31 项只读数据库不变量全部成功。

7. 生产 Go/No-Go

  • Petstore 专用 API/Admin/报告域名与 TLS 就绪,不复用或修改其他产品域名;
  • 权限受控的最终配置通过 backend、admin、frontend release preflight后端不再配置废弃的 WECHAT_REDIRECT_URI
  • 生产全量备份完成,记录大小/hash并在隔离库完成恢复演练
  • 八迁移依次执行,文件 hash 一致且每步末尾反例为 0
  • production JPA validate 与 31 项只读数据库不变量通过;
  • 正式 Admin/H5/小程序重新构建,记录 hash微信合法域名一致
  • Petstore 独立 systemd/Nginx 配置完成,nginx -t 通过diff 未改 Gitea/GitLab
  • liveness、readiness、只读 production smoke 通过;
  • 老板、员工、宠主三角色主链及权限/异常反例全部签署 PASS
  • 微信小程序真实 AppID/AppSecret、手机号 code 和 wx.login code 完成真机核验,旧网页 OAuth 路径不得作为替代;
  • 外部监控、告警联系人、值班窗口和回滚执行人已真实测试;
  • Gitea/GitLab 既有入口健康,服务器端口和证书未受影响;
  • 首批真实数据开始计样本时,显式填写 35 个门店 ID保存指标窗口、数据库快照时间、四仓 commit、低敏结果与 hash四项指标可靠性反例为 0。

任一项未完成,结论都是 No-Go / Ready for Release,不得标记已上线。

8. 试点验收与 Phase 2 决策

样本闸门为 35 家门店、观察 48 周、合计至少 200 次完整服务且每家至少 25 次。达到闸门后只能形成 ContinueIterate CoreStop/Redesign 三类结论;在此之前不扩展支付、库存、储值、复杂会员、多门店组织、订单系统或泛 AI。

9. 已知风险与回滚边界

  • Admin 主 bundle 的 >500 kB warning 是已知性能债;不阻断小流量试点,但正式包仍应观察首次加载和弱网体验。
  • readiness 会因数据库、磁盘、上传目录、FFmpeg/ffprobe 任一依赖异常而拒绝接流;服务器端必须逐项核验权限和路径。
  • 指标 v2 已在 MySQL 8.0.46 隔离实例执行;生产实际版本、数据量与执行计划仍须用只读账号在发布窗口复核,不得在主库高峰期首次运行。
  • 迁移均按向前兼容设计。常规故障只回退 backend/admin/H5 版本软链接及小程序平台版本,不删除列/表/索引,不自动恢复旧备份。
  • 灾难性整库恢复会丢失备份时间点后的数据必须另获业务负责人、DBA 与隐私负责人书面授权;本 RC 不授权该操作。
  • 本地验证没有使用生产凭据、真实微信账号、真实门店数据也没有连接或修改任何生产服务器、Gitea、GitLab、Nginx、证书或业务数据库。