# 19 — 执行一次性审计切换与停机发布门禁

**What to build:** 发布负责人可以在一次停机窗口内完成新结构、Writer、现有敏感入口、历史查询、权限、监控和跨仓契约切换，并通过自动化门禁决定是否开放流量。任一关键检查失败时整体停止发布；一旦新系统产生生产事实，只能前向修复，不能恢复旧 Writer 制造分裂历史。

**Blocked by:**

- 00 — 建立全系统审计面与公共能力决策基线
- 03 — 完成 Access Log 全路由敏感信息防泄漏
- 04 — 迁移账号、角色与权限敏感操作到统一审计
- 05 — 迁移卡资产生命周期操作到统一审计
- 06 — 迁移设备与资产导入操作到统一审计
- 07 — 迁移店铺、套餐和关键配置操作到统一审计
- 08 — 迁移现有资金与订单敏感操作到统一审计
- 09 — 承接手动轮询状态并记录同步外部尝试
- 10 — 提供旧审计历史统一只读投影
- 11 — 交付全局事件和资源轨迹查询闭环
- 12 — 交付人员行为和风险事件查询闭环
- 13 — 交付请求、业务链路和外部集成时间线
- 14 — 交付资金审计时间线
- 15 — 交付敏感值二次查看与自审计闭环
- 16 — 交付审计导出与字段授权快照
- 17 — 交付审计保留、清理和运行监控
- 18 — 冻结审计中心跨仓前端契约与验收包
- 20 — 接入公共系统配置正式审计 Adapter
- 21 — 接入 Outbox 人工恢复正式审计 Adapter
- `.scratch/tech-public-foundation/issues/12-foundation-release-gate-and-integration-contract.md` — 12 — 建立公共基础发布门禁和下游接入契约

**Status:** ready-for-agent

**架构通道:** 主通道为 Infrastructure，辅助通道为 Application/Query 验收。

**完整业务边界:** 本票收口全局审计一次性停机切换、迁移验证、旧写收缩、对账、性能、安全、监控和发布回滚边界。明确不允许长期双写或局部放量，不删除旧历史，不在新事实产生后通过删表回滚。

- [ ] 停机顺序明确覆盖暂停流量与 Worker、前置检查、增量迁移、权限初始化、新 Writer 装配、旧写护栏、历史对账、Worker 恢复和开放流量。
- [ ] 自动切换清单证明生产产物不再调用旧账号/资产审计 Writer、不再直接 Create 旧三表、启动装配不再注入旧 Writer；旧表意外新增会立即告警或失败。
- [ ] 《审计覆盖基线》的全部入口均已分类且无空白项；所有 Audit Event 动作已注册，所有 N/A 均有评审理由，系统配置更新和 Outbox 人工恢复已装配正式 Audit Writer。
- [ ] 门禁覆盖关键业务与审计同事务、审计失败回滚、失败短事务、Integration 结果未知、历史新旧交界、Access Log 敏感矩阵和权限隔离。
- [ ] Query 性能验证常用过滤使用索引、无 JSONB 全表模糊扫描、无资源/操作者 N+1，并满足项目 P95/P99 目标。
- [ ] 任一迁移、旧写清单、样本对账、事务、安全、权限、性能、监控或跨仓验收失败均在开放流量前整体终止发布，不能让局部模块继续写旧表。
- [ ] 发布与回滚说明明确：未产生新事实时可回退兼容应用；已产生 Audit/Integration/Outbox 事实后保留全部记录、停止异常生产者并前向修复，禁止恢复旧 Writer 或删除事实。
- [ ] 中文功能总结覆盖关键流程、前后端契约、异常闭环、发布回滚、监控恢复和待决策项，README 增加索引；完整停机演练通过后方可放量。
