515cf7f87a
把中断/恢复模型在 dispatcher 接线启用,并让审批决定持久化抗离线。至此 HITL 从「阻塞 goroutine 等 5min、core NATS 非持久、不抗重启」升级为「持久化中断 + 决定持久投递 + 从 checkpoint 恢复续跑」。 - contract: 新增审批决定流 StreamApprovals(SUNDYNIX_APPROVALS)/通配 SubjectApprovalAll/消费者 ConsumerApprovals + checkpoint 桶 BucketCheckpoints。 - bus: EnsureApprovalStream(JetStream 流持久捕获 sundynix.approval.>,MaxAge 24h; gateway 现有 nc.Publish 的决定被本流自动捕获,无需改 gateway)+ ConsumeApprovals (持久消费者,队列组多副本安全)。 - orchestrator: HandleApprovalDecision(据 task_id 取 resume 记录续跑;无记录则忽略, 兼容阻塞态任务的决定 + 决定重投幂等)+ finishResumed(收尾对齐 Handle 尾段: 中断/拒绝/预算/失败/成功+评测落历史)。 - main: 开 checkpoint 存储 + 审批流 + 起决定消费者 → SetCheckpoints 启用中断模型; 任一步失败优雅降级回阻塞模型;停机 drain 在途 resume。 决定经 JetStream 持久:dispatcher 在决定发出时离线,重连后仍消费到并续跑;任一 dispatcher 副本都能据共享 KV 的 checkpoint+记录恢复(HA)。 测试:决定驱动恢复(续跑下游+判 done+清记录)、无记录忽略(幂等/兼容)。 全模块 go build + go test 绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>