验收、发布与回滚
OceanWay 仓库内完成定义、跨仓证据、Writer 切换与发布记录规范
实施计划的完成单位不是“代码合并”,而是可复现的交付证据。仓库内验收证明本仓增量正确;跨仓验收证明版本、身份、网络、事务和故障边界在真实组合中仍成立。
Definition of Ready
进入实现前必须具备:
- 明确的 Owner、范围与非目标;
- 已通过的上游批次门禁;
- 固定 Contracts 版本或明确的 Contracts 变更工作包;
- 数据 Owner、Writer、幂等键、事务与授权边界;
- 正常、拒绝、重放、超时、崩溃与回滚验收条件;
- 不使用真实客户数据和明文 Secret 的测试方案。
缺少这些条件的内容只能进入探索或设计,不能接生产 Writer。
仓库内完成定义
每个仓库至少提供:
- 格式、静态检查、类型检查和生产构建。
- 单元测试以及与风险匹配的集成/契约测试。
- 依赖漏洞、Secret 与许可证检查。
- 数据库变更的真实 PostgreSQL 正向、负向和并发证据。
- API/事件的当前版本与上一兼容版本消费验证。
- 运行配置、健康检查、Metrics、Alert 和回滚说明。
- 固定 Commit、CI Run、Release/Package/Image Digest 与变更记录。
Surface 仓还必须完成关键流程浏览器回归、窄屏和权限状态;Gateway/Core 还必须完成幂等、未知状态和崩溃窗口;Infrastructure 还必须完成目标环境演练。
跨仓证据清单
跨仓门禁使用一个不可变 Evidence Manifest,至少记录:
evidenceId / schemaVersion / generatedAt
deliveryBatch / environment
contractsPackageVersion / packageDigest
repositories[] {
repository / commitSha / workflowRunId
releaseOrImageRef / artifactDigest
}
testSuites[] { name / result / reportDigest }
scenarios[] { scenarioId / expected / observed / evidenceRef }
cutoverDecisionRef? / rollbackDecisionRef?
approvers[] / evidenceDigestAlgorithmVersion / evidenceDigest证据正文不得包含 Raw Credential、Prompt、客户输入、Provider Secret、长期签名 URL 或客户媒体。敏感日志只保存受控引用与授权读取路径。
Writer 切换
每类命令的切换记录必须包含:
- 旧 Writer、新 Writer 与命令范围;
- 路由规则版本和切换生效点;
- 幂等水位、在途 Operation 与归属处理器;
- Shadow 对比结果及已知差异;
- 数据写入、Outbox、费用和副作用的不变量;
- 观察指标、停止条件与回滚条件;
- Secret、Webhook、Cron 和部署引用的迁移状态。
合法迁移只有“旧入口代理到新 Owner”或“旧 Owner 继续写、新实现无副作用 Shadow”两种模式。禁止旧新实现同时创建业务事实或外部副作用。
回滚原则
- 回滚只改变后续新命令的路由;已受理 Operation 由原 Owner 处理至终态或进入正式恢复流程。
- 已提交事件、Ledger、Asset Version、Provider Task 和审计事实保持不可变,不能通过删除伪装回滚。
- Contracts 不能回滚到无法读取已经产生的新版本事实;消费者兼容期必须覆盖观察窗口。
- 数据库回滚不得依赖破坏性删除。未上线项目可直接按新设计修改 Schema,但生产切流后必须有明确前向修复策略。
- 未达到恢复门禁时保持功能关闭或只读,不以人工改表恢复服务。
文档与状态更新
一个批次通过后,同一个 Pull Request 或紧随其后的文档变更必须更新:
Issue 关闭、PR 合并或页面可访问都不能单独把状态改为“已验收”或“已上线”。