修复(08-08-production-deployment-execution): 明确终止迁移回滚窗口依据
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s

这个提交包含在:
2026-08-08 20:57:44 +08:00
父节点 8b2ed5bb16
当前提交 b94afcfab0
共修改 6 个文件,包含 88 行新增和 12 行删除
@@ -486,12 +486,20 @@ describe("deployment safety contract", () => {
"if [[ \"$joined\" == *'_prisma_migrations'* ]]; then",
" case \"$mode\" in",
" pending) printf '20260807193000_contract_registry_termination_workspace|applied\\n';;",
" termination-pending) printf '20260807193001_followup_migration|applied\\n';;",
" logs) printf '20260807193000_contract_registry_termination_workspace|logged_failure\\n';;",
" *) printf '20260807193000_contract_registry_termination_workspace|applied\\n20260807193001_followup_migration|applied\\n';;",
" esac",
" exit 0",
"fi",
"if [[ \"$joined\" == *'contract_registry'* ]]; then printf '0\\n'; exit 0; fi",
"if [[ \"$joined\" == *'contract_registry'* ]]; then",
" case \"$mode\" in",
" termination-pending|termination-query-failure) exit 97 ;;",
" closed) printf '2\\n' ;;",
" *) printf '0\\n' ;;",
" esac",
" exit 0",
"fi",
"printf 'unexpected fake docker call: %s\\n' \"$joined\" >&2",
"exit 97",
"",
@@ -524,9 +532,23 @@ describe("deployment safety contract", () => {
const result = await runRemote("happy");
expect(result.stdout).toContain("target_identity");
expect(result.stdout).toContain("migration_reconciliation pending=none");
expect(result.stdout).toContain("rollbackWindow=OPEN");
expect(result.stdout).toContain("rollbackWindow=OPEN terminatedRows=0 basis=terminated_status_count");
const pendingResult = await runRemote("pending", "20260807193001_followup_migration");
expect(pendingResult.stdout).toContain("migration_reconciliation pending=20260807193001_followup_migration");
const terminationPendingResult = await runRemote(
"termination-pending",
"20260807193000_contract_registry_termination_workspace",
);
expect(terminationPendingResult.stdout).toContain(
"rollbackWindow=OPEN terminatedRows=0 basis=migration_not_applied",
);
const closedResult = await runRemote("closed");
expect(closedResult.stdout).toContain(
"rollbackWindow=CLOSED terminatedRows=2 basis=terminated_status_count",
);
await expect(runRemote("termination-query-failure")).rejects.toMatchObject({
stderr: expect.stringContaining("PROD_TERMINATED_COUNT_UNAVAILABLE"),
});
await expect(runRemote("unknown")).rejects.toMatchObject({
stderr: expect.stringContaining("PROD_MIGRATION_STATUS_UNKNOWN_PENDING"),
});