## 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 - [调用链较多] → 先枚举所有 `Start`、`RecordInbound` 与未发送裁决调用点,逐链路传递关联并验证缺失时告警。 - [审计事件写入先于外部调用] → 使用外部交互开始/入站事实的专用事件,终态仍由 Integration Log 保存,避免把未完成调用伪装为业务成功。 - [现有写入顺序不共享事务] → 关联事件优先创建;创建失败时仍写入 Integration Log 并记录告警。 ## Migration Plan 1. 部署新的审计事件类型、关联传递和缺失关联告警。 2. 逐调用链接入并在隔离数据库验证新记录均有有效关联。 3. 监控缺失关联告警;回滚时恢复调用链改动,不修改历史数据。