发布可以跟上只多了文档的测试环境头

四个生产工作流改用同一条发布修订:最近一次代码门禁成功的提交可以发布,后面只多文档不再挡住。生产环境拒绝测试验证码。63 个还没上生产的迁移写了分级、演练脚本和首发步骤。没有点任何生产按钮。

自测:发布修订 7 通过,演练安全 3 通过,tsc 0 错,lint 0 error。本机空库演练在服务角色读人物表处按设计停止(退出码 4,其他人物已确认行数为 0)。

Co-Authored-By: Grok (agent loop)
This commit is contained in:
jesse-ux
2026-10-14 10:24:40 +08:00
co-authored by Grok (agent loop)
parent f4c53e7f9f
commit 00e6efdbfa
23 changed files with 1470 additions and 174 deletions
@@ -0,0 +1,20 @@
# 生产首发后核对(2026-10-14)
产品发布完成后照着看。把「实际」一栏填成通过或没通过。不要把登录账号、页面正文、出生资料写进仓库。
`R` 是这次部署填的那个 40 位提交,也就是测试环境健康检查在发布前显示的版本。
| 核对 | 预期 | 实际 |
| --- | --- | --- |
| 打开 `https://jyotisha.chat/api/health` | 状态 200,`deployment.gitCommit` 等于 `R`,`apiGitCommit` 等于 `R` | |
| 同一份健康检查里的数据库 | `database.requiredMigrationsPresent` 为 true,`latestMigration` 与测试环境同一字段相同 | |
| 内部健康检查 | 状态 200,`swisseph_available` 为 true | |
| 打开 `/login` | 状态 200,页面数据里的 `testOtp` 是 null | |
| 未登录打开 `/api/account` | 状态 401 | |
| 用受控账号登录 | 能登录 | |
| 登录后建一张盘 | 盘能打开 | |
| 发一轮对话 | 能收到回复 | |
| 打开一份报告 | 报告页能打开 | |
| 打开 `/admin` | 只有管理员能进,普通账号不能 | |
任何一行没通过:不要继续开放内测。按 runbook 的「失败后」做整库还原,并把应用退回 `7b620c7a`。
@@ -0,0 +1,25 @@
# 生产迁移演练报告(模板)
产品在主机上跑完 `deploy/rehearse-production-migrations.sh` 后填写。只写行数和通过/停止。不要写姓名、出生时间、邮箱、会话正文、密钥或任何一行的内容。
| 项 | 结果 |
| --- | --- |
| 日期 | |
| 发布修订 R | |
| 恢复点引用 | |
| 一次性库名字(必须是 `rehearse_` 开头) | |
| `other_person_accepted_rows` | 预期 0 |
| 归档会话:迁移前非空行数 / 迁移后 | 迁移后应为 0 |
| 人物表里本人镜像:迁移前 / 迁移后 | 迁移后应为 0 |
| 标题修补两条 NOTICE | 生产上预期都是 0。不是 0 就停止 |
| 自动标题回填 NOTICE | 只写数字 |
| 未知时间改成时段比较的行数 | |
| 家人整点改为已采用的行数 | |
| 时段回填的行数 | |
| 无日期证据改为已确认的行数 | |
| 网页角色读账户资料 | true 才算过 |
| 网页角色读会话列表 | true 才算过 |
| 服务角色读人物表 | true 才算过。false 时停止,不要点生产迁移(BUG-1063 的授权还没进这一批) |
| 最终一行 | `rehearsal_ok=1` 才算演练通过 |
停止时:生产库不应被修改。把脚本打印的那一句原因贴在这里,去掉任何连接地址。