## ADDED Requirements

### Requirement: 本里程碑仅面向测试环境部署
本 Change 的近期发布目标 SHALL 是在 2026-07-27 前部署到测试环境，不得将其描述为正式生产验收或七月迭代全链路完成。测试环境发布状态 MUST 与生产发布状态分开记录。

#### Scenario: 测试环境部署完成
- **WHEN** 数据库迁移、API、Worker、前端和配置已按本 Change 装配到测试环境
- **THEN** 发布状态 MAY 标记为“测试环境已部署”，但生产发布、真实外部验收和延期门禁 MUST 保持未完成

### Requirement: 自动化测试豁免仅限本次测试环境里程碑
本轮实施 MUST 不新增 `_test.go`、不运行 `go test`，也不执行真实 PostgreSQL、Redis、企微、支付或 Gateway 自动验收。每批实现仅要求执行 `gofmt`、必要代码生成、`go build ./...` 和部署检查。自动化测试、真实外部验收和生产发布门禁 MUST 登记为延期项，未执行验证不得标记通过。

#### Scenario: 完成一批业务代码
- **WHEN** 某实施批次完成代码修改
- **THEN** 执行者 MUST 运行该批约定的格式化、必要生成、`go build ./...` 与部署检查，不得新增或运行自动化测试

#### Scenario: 未执行测试
- **WHEN** 任务因本次豁免没有自动化或真实外部验证证据
- **THEN** 验证状态 MUST 标记“代码完成、验证延期”或“待前端/人工验收”，不得标记“验收完成”

### Requirement: Audit Event 专项必须移出本 Change 与本次上线范围
`.scratch/tech-global-audit/issues/01`、`19`、`20`、`21` 及其他 Audit Event 写入、审计中心、历史投影、敏感读取、导出、保留清理和一次性审计切换任务 MUST 不进入本轮实现任务，也不得作为其他七月需求的测试环境或生产上线阻塞项。提交 `ff44305` 已存在的相关代码 MUST 原样冻结，不删除、不回滚、不继续扩展；未来如需恢复审计治理，MUST 另开独立 Change 重新评审。

#### Scenario: 下游原 Ticket 依赖全局审计
- **WHEN** 某七月 PRD/Ticket 原先把 Audit Event 或一次性审计发布门禁列为 blocker
- **THEN** 本 Change MUST 同时移除测试环境和生产上线阻塞边，不在本 Change 内保留恢复义务

#### Scenario: 审计冻结代码存在
- **WHEN** 构建包含 `integrationlog.Repository`、`cmd/audit-coverage`、`pkg/sanitizer` 或迁移 `000167_create_audit_integration_log`
- **THEN** 不得为冻结目的删除这些代码；未装配到生产组合根的审计组件不得被本轮业务主动启用

### Requirement: 可靠性事实不得因 Audit Event 排除而削弱
Access Log SHALL 继续负责 HTTP 调试并使用现有递归脱敏；Integration Log SHALL 记录外部交互及结果未知恢复事实；Domain Ledger SHALL 继续作为金额、订单、退款、充值、审批和状态的业务权威；Outbox SHALL 继续作为可靠副作用投递事实。Audit Event 作为“谁对什么做了什么”的统一治理能力不属于本 Change，其他事实不得被停用或合并。

#### Scenario: 新业务调用外部系统
- **WHEN** 本轮新业务通过企微等审批渠道 Adapter、支付、Gateway 或运营商 Adapter 发出请求或接收回调
- **THEN** 仍 MUST 写 Integration Log 并保留幂等、事务与恢复语义，即使本次不写 Audit Event

#### Scenario: Access Log 处理敏感正文
- **WHEN** 登录、Token、支付、企微、运营商回调或文件路由产生请求响应日志
- **THEN** 现有 Sanitizer 与安全摘要策略 MUST 继续生效，不得因审计冻结恢复原文记录

### Requirement: 测试环境发布必须按停机依赖顺序执行
测试环境发布 MUST 按“确认变更与配置 → 停止相关写入和 Worker → 执行增量迁移 → 发布 API 与 Relay/Worker → 发布前端 → 装配企微/支付/Gateway/运营商/对象存储配置 → 执行部署检查 → 恢复 Worker 与访问”的顺序。涉及旧接口停用和新契约同批切换的需求 MUST 在解除访问前完成版本一致性检查。

#### Scenario: 部署检查失败
- **WHEN** 迁移、构建、配置、路由、Worker 注册或前后端版本一致性检查失败
- **THEN** 测试环境 MUST 保持维护或停止新入口，不得将该批标记部署完成

#### Scenario: 审批业务核心先于渠道装配完成
- **WHEN** 退款或线下代充业务代码已围绕 Approval Port 完成，但当前环境尚无有效 WeCom Adapter、场景或发起身份配置
- **THEN** 该业务只能记录“后端代码完成”，新提交入口 MUST 保持关闭或失败关闭，不得标记“测试环境可用”

### Requirement: 回滚必须保留不可逆业务事实
开放访问前失败 MAY 回滚应用和可逆迁移；一旦产生审批、支付、资金流水、订单、退款、充值、Outbox、Integration Log、通知或部分成功批量任务，回滚 MUST 保留这些事实，暂停异常生产者并采用前向修复。不得通过清表、恢复旧 Writer 或要求用户重复支付来回滚。

#### Scenario: 支付成功但钱包尚未入账
- **WHEN** 测试环境回滚时存在已支付未入账充值
- **THEN** 系统 MUST 保留支付与 Outbox/恢复事实，并在恢复后幂等完成入账，不得关闭原事实或要求重新支付

### Requirement: 生产发布不得继承测试豁免
生产发布前 MUST 恢复并完成自动化测试、真实 PostgreSQL/Redis/企微/支付/Gateway 验收、前后端联调、历史数据抽样与迁移演练、性能/权限/安全检查。延期项 MUST 保持未勾选，直至产生真实证据；Audit Event 已明确移出本 Change，不属于需要恢复的测试豁免。

#### Scenario: 准备生产发布
- **WHEN** 团队从测试环境里程碑推进正式生产
- **THEN** 发布负责人 MUST 重新启用延期验证与治理清单，全部完成前不得声明生产验收通过
