# 02 — 在业务事务中可靠写入公共 Outbox **What to build:** 业务开发者可以沿用现有 GORM 显式事务,在提交业务事实的同一事务中写入权威公共 Outbox 事件。事件身份和关联标识在事务内稳定持久化,业务写入或 Outbox 写入任一步失败都会整体回滚,事务中不会调用 Redis、Asynq 或外部系统。 **Blocked by:** 01 — 建立公共迁移所有权与检查门禁 **Status:** completed **架构通道:** Application + Port/Adapter。 **完整业务边界:** 本票收口公共 Outbox 模型、事件信封、事务内追加 Port 和一个可观察的示例写入链路。明确不定义下游业务事件含义,不实现业务消费者,不引入 UnitOfWork、事务工厂或全仓事务重构。 - [x] 公共 Outbox 具有稳定唯一的事件 ID、事件类型、载荷版本、聚合与资源定位、请求与关联标识、结构化载荷、投递生命周期、重试、租约和安全错误摘要字段。 - [x] Outbox 内部状态固定为 `1=待投递、2=投递中、3=已投递、4=投递失败`,常量、模型注释和公开说明保持一致。 - [x] 业务事实和 Outbox 使用同一 GORM 事务句柄;任一写入失败时二者均不可见,未提交事件不会被投递侧读取。 - [x] 事件 ID、业务键及必要快照在事务内生成并持久化,重试过程中不会重新生成事件身份。 - [x] 事务内不执行 Redis、Asynq、HTTP、对象存储或其他外部调用,Domain 不依赖 GORM。 - [x] PostgreSQL 集成测试覆盖事务成功、业务写入失败、Outbox 写入失败、事件 ID 唯一约束和回滚行为。