修复(08-08-production-deployment-execution): 明确终止迁移回滚窗口依据
这个提交包含在:
@@ -59,7 +59,7 @@
|
||||
3. 检查唯一 server/db 容器、运行时 `DATABASE_URL` host/database、当前数据库名、`NODE_ENV=production` 和 `COOKIE_SECURE=true`。
|
||||
4. 执行 `npx prisma migrate status`,在 marker 内输出原始结果。
|
||||
5. 只读查询 `_prisma_migrations`,计算 applied、异常和 pending 集合,与候选 manifest 和批准 allowlist 精确对账。
|
||||
6. 查询 `contract_registry` 的 `terminated` 行数并输出 `rollbackWindow=OPEN|CLOSED`。
|
||||
6. 先以 `_prisma_migrations` 判断 termination migration 是否已应用:未应用时不查询尚未启用的终止状态,显式输出 `rollbackWindow=OPEN ... basis=migration_not_applied`;已应用时必须真实查询 `contract_registry.status = 'terminated'` 并输出 `basis=terminated_status_count`,查询错误一律 fail-closed。
|
||||
|
||||
status 原文仅存在受控 SSH/执行现场;本地 helper 写入 `prisma-migrate-status.txt` 时去除 datasource、连接串和预期身份值,并将稳定摘要写入 `preflight-output.txt`。报告目录复用时只删除两个已知文件,防止旧 PASS 污染新证据。
|
||||
|
||||
@@ -84,10 +84,12 @@ bash deploy/trialrun/deploy-existing.sh
|
||||
|
||||
## 6. 回滚窗口
|
||||
|
||||
部署前查询 `SELECT count(*) FROM contract_registry WHERE status = 'terminated'`:
|
||||
部署前窗口按 termination migration 的 applied 状态分流:
|
||||
|
||||
- `0` → `rollbackWindow=OPEN`;应用健康失败可按既有发布合同回退兼容版本,但不得 drop 三列。
|
||||
- `>0` → `rollbackWindow=CLOSED`;旧应用不识别 `terminated`,只能 roll-forward 或兼容 hotfix。
|
||||
- migration 未应用 → 终止能力尚未生效,不执行状态查询,记录 `rollbackWindow=OPEN`、`terminatedRows=0`、`basis=migration_not_applied`。
|
||||
- migration 已应用且 `SELECT count(*) FROM contract_registry WHERE status = 'terminated'` 返回 `0` → 记录 `OPEN` 与 `basis=terminated_status_count`;应用健康失败可按既有发布合同回退兼容版本,但不得 drop 三列。
|
||||
- migration 已应用且返回 `>0` → 记录 `CLOSED` 与 `basis=terminated_status_count`;旧应用不识别 `terminated`,只能 roll-forward 或兼容 hotfix。
|
||||
- migration 已应用但查询失败或返回不可解析值 → 停止,不得用异常兜底为 `OPEN`。
|
||||
|
||||
窗口在第一条已提交记录产生的事件时刻关闭,不按时间计算。当前 task 不写入该记录,因此不主动改变窗口状态。任何 rollback 决策必须引用部署前实际读数,而不是部署后补查。
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户