Files
junhong_cmp_fiber/openspec/changes/archive/2026-08-11-enforce-integration-audit-links/design.md
break 619d0c5efe
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 51s
提案
2026-08-11 15:39:51 +08:00

2.1 KiB
Raw Blame History

Context

tb_integration_log.audit_event_id 可空,现有所有调用方均未赋值;而事件查询已只使用该稳定字段返回外部交互引用。

Goals / Non-Goals

Goals:

  • 正常路径让每条新 Integration Log 使用已持久化的 Audit Event 内部 ID。
  • 保持同一外部交互的开始、终态与重试使用同一稳定关联。
  • 在缺少关联时保留外部交互事实并输出可排查告警。

Non-Goals:

  • 不回填历史空关联记录。
  • 不按请求、资源、时间或摘要推断关联。
  • 不改变外部渠道协议、重试策略或审计查询响应格式。

Decisions

  • 为外部交互建立专用、已注册的 Audit Event再将其内部 ID 传给 Integration Log 的开始或入站写入。这样在实际外呼或回调处理前已具备稳定关联;相比在完成后补写,不会留下因超时、崩溃或未发送而无关联的记录。
  • 调用链在可取得审计事件时传递关联Integration Log 仓储允许关联缺失并记录告警。相比拒绝写入,外部交互事实不会因审计关联故障丢失。
  • Complete 仅延续既有关联,不接受用名称、时间或摘要寻找审计事件。重试沿用所属逻辑外部交互的审计事件。
  • 由完整用例负责在适当事务中创建审计事件并传递内部 ID不让 Integration Log 仓储根据不完整上下文拼造操作者、资源或业务结果。

Risks / Trade-offs

  • [调用链较多] → 先枚举所有 StartRecordInbound 与未发送裁决调用点,逐链路传递关联并验证缺失时告警。
  • [审计事件写入先于外部调用] → 使用外部交互开始/入站事实的专用事件,终态仍由 Integration Log 保存,避免把未完成调用伪装为业务成功。
  • [现有写入顺序不共享事务] → 关联事件优先创建;创建失败时仍写入 Integration Log 并记录告警。

Migration Plan

  1. 部署新的审计事件类型、关联传递和缺失关联告警。
  2. 逐调用链接入并在隔离数据库验证新记录均有有效关联。
  3. 监控缺失关联告警;回滚时恢复调用链改动,不修改历史数据。