核心设计:接力棒管线中每一棒的入口/出口都有 Telegram 通知,全链路 8 个关键节点覆盖任务全生命周期
| # | 节点 | 发送者 | 通知内容 |
|---|---|---|---|
| 1 | 任务已派发 | 骰子 | 任务ID + 红中编号 |
| 2 | 红中已接任务 | 红中N号 | 开始规划 |
| 3 | plan.md 写完 | 红中N号 | 白板将触发 |
| 4 | 白板审核结果 | 白板N号 | 准奏 / 封驳 |
| 5 | 红中决策完成 | 红中N号 | 归属牌将触发 |
| 6 | 执行完成 | 归属牌 | 白板验收将触发 |
| 7 | 验收通过/失败 | 白板N号 | 通过 / 退回 |
| 8 | 任务关闭 | end-task.py | 关闭 cron + 更新状态 |
统一关闭:所有监督 cron 由 end-task.py 统一关闭,任务结束(成功/失败/超时)自动触发
骰子定时心跳:每 30 分钟全局扫描一次,兜底清理异常状态,防止任务泄漏与资源残留
| 检查项 | 判定条件 | 处理方式 |
|---|---|---|
| 僵死任务 | progress.md 超 30 分钟无更新 | end-task.py --reason error |
| 告警超标 | .alert-count >= 3 | end-task.py --reason error |
| 残留 cron | 任务已结束但 cron 仍在运行 | disable cron |
| 积压收件箱 | bus/inbox/main/ 有消息 | 按消息类型分别处理 |
核心原则
只在状态切换时通知,不在过程中通知
入棒通知 → 工作过程(静默)→ 出棒通知
过程数据通过 progress.md 记录,由 cron 巡查机制监督,无需实时推送
消息路由规则:发送方写 MSG-{timestamp}.json 到目标 Soul 的 bus/inbox/{soul}/ 目录
接收方 cron 轮询 inbox → 发现消息 → 读取 task_id → 进入任务目录获取上下文 → 执行
设计哲学:文件系统是最可靠的消息队列,无需额外中间件