# 01 — 交付不可变 Audit Event 写入闭环

**What to build:** 业务用例可以通过统一 Audit Writer 写入不可变、多资源、可串联且默认脱敏的审计事件。成功事件能够与业务事实共用事务，失败或拒绝事件使用独立短事务保留；未注册动作、缺少主要资源或审计写入失败时按明确策略阻止错误事实落地。

**Blocked by:**

- 00 — 建立全系统审计面与公共能力决策基线
- `.scratch/tech-public-foundation/issues/01-public-migration-ownership-and-gates.md` — 01 — 建立公共迁移所有权与检查门禁

**Status:** ready-for-agent

**架构通道:** 主通道为 Application + Port/Adapter，辅助通道为 Infrastructure。

**完整业务边界:** 本票收口 Audit Event、事件资源、动作注册表、统一 Sanitizer、内容哈希、大小控制和 Writer 可靠性，并用一个代表性敏感写操作验证公开接缝。明确不迁移其他旧 Service，不提供完整审计查询中心，不用 Audit Event 替代领域流水。

- [ ] Audit Event 支持稳定事件 ID、操作者与入口快照、结果、风险、前后数据、请求/关联/父事件 ID、HTTP 摘要、内容哈希和创建时间；事件资源支持 `primary/affected/reference`，且每个事件至少包含一个 `primary`。
- [ ] 动作注册表集中定义稳定动作编码、中文名称、类别、默认风险、允许资源类型和敏感字段规则；未经注册的动作不能写入生产审计。
- [ ] 统一 Sanitizer 删除禁止字段；`before_data`、`after_data`、`metadata` 分别执行 16KB 上限，超限后保存截断标志、原字节数、摘要和受控制品引用。
- [ ] `content_hash` 基于脱敏、标准化后的不可变内容生成，不包含数据库自增 ID；相同内容哈希稳定，Repository 不提供 Update/Delete 能力。
- [ ] `AppendWithTx` 与业务事实使用同一 GORM 事务，任一步失败整体回滚；已经回滚的 `failed/denied` 使用独立短事务，二次失败保留原业务错误并产生 critical 日志和指标。
- [ ] 真实 PostgreSQL 集成测试覆盖不可变约束、多资源、动作注册、风险默认值、哈希、截断、禁止字段、重复事件幂等和事务回滚。
