发布治理:解析服务与 contracts-db schema 版本原子校验
生产故障
上传任务 1905 在将附件合并到待核对草稿时写入 resolution_status=attached_to_unreviewed_draft,被生产库旧 CHECK 约束拒绝。代码已使用该业务状态,但迁移 018 未被生产发布流程应用。
目标设计
将解析服务代码版本与 contracts-db schema 版本作为一个发布单元:部署前验证全部必需迁移,失败时阻止服务切换;不再依赖人工逐个执行 SQL 文件。
实施范围
- 建立有序、可追踪、幂等的 contracts-db migration runner 与 schema_version 记录。
- 发布脚本在切换 systemd 服务前执行迁移预检和事务式迁移。
- 解析服务启动时校验自身所需的最低 schema 版本,不满足则拒绝接收上传并给出明确诊断。
- 发布后做 contracts-db 约束快照校验;覆盖 018 的 resolution_status 枚举。
- 为失败任务建立安全恢复流程:保留候选包和来源,迁移成功后通过既有 retry 接口恢复。
验收
任何代码写入新状态而 schema 未升级时,发布被阻断;新上传不会产生 CheckViolation;迁移和重试在测试库与生产演练均可审计、可回滚。