All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m25s
1.6 KiB
1.6 KiB
Context
公共 Outbox 的 event_id 与 parent_event_id 上限均为 64 字符。业务观测已有一个稳定 SHA-256 摘要实现,但停复机、网络和流量路径仍直接拼接 UUID 或 Integration ID;Repository 也未提前执行长度校验。
Goals / Non-Goals
Goals:
- 复用单一、稳定的事件 ID 压缩规则覆盖四条风险路径。
- 在公共持久化边界报告长度契约违规。
Non-Goals:
- 不扩大数据库字段,不修改既有事件,不改变 API 或异步载荷结构。
- 不重构其他 Outbox 生产者。
Decisions
- 在公共 Outbox 包提供最小稳定 ID 函数:原值未超限时原样返回,超限时保留短业务前缀并拼接 SHA-256 十六进制摘要至恰好不超过 64 字符。相比扩大 Schema,此方案保持既有契约;相比各调用点手写截断,可避免碰撞风险和重复实现。
- 四条已确认风险路径在构造业务事实时调用同一函数,使事件载荷内
event_id与信封一致,保持幂等消费校验。 - Repository 在 GORM Create 前校验
EventID、ParentEventID长度。该防线仅返回明确错误,不自动改写未知生产者的标识语义。
Risks / Trade-offs
- [摘要后的 ID 可读性降低] → 保留业务前缀,完整业务定位仍在聚合、资源和载荷字段中。
- [历史超长请求的重试 ID 发生变化] → 历史写入已整体回滚,不存在需兼容的 Outbox 事实。
Migration Plan
部署代码后用 UUID 和 20 位主键验证四条构造路径及 Repository 边界,再执行现有构建与 OpenSpec 校验。回滚仅需恢复代码;无 Schema 与数据迁移。