唤醒 · 「上报给主会话」到底是不是唤醒 + 门控该归谁

结论:是 —— 但只对「此刻活着的主会话」成立;「上报」在本机制里不是写文件,是投递。
主会话已退出 ⇒ 投不出去 ⇒ 只能由唤醒轮起新会话(≤30 分钟)。

① 「上报」拆成三段 —— 只有中间那段会唤醒 ① 内容 · 落盘 tasks.json / TO_MAIN.md blocked.json / NEED-USER.md ✗ 一个人都叫不起来 ② 投递 · 钩子→网关 POST /api/v1/sessions/ <主会话>/reply ✓ 这就是唤醒 ③ 起会话 · 自动任务 唤醒轮 A / B HOURLY ×2,错开 30 分 ✓ 主会话不在时的唯一通道 主会话被推进一轮 = 被唤醒 前提:它此刻活着(reply 只认 live) ⚠ 只做 ① 不做 ② ⇒ 等于没上报;主会话已退出 ⇒ ② 发不出去(程序拒绝盲投,只喊人)

判据:collabd.py:1770 先写 TO_MAIN.md,:1777 才 _deliver_str();端点见 :1058。

② 门控矩阵 —— 你的规则 vs 现有实现 红=缺 / 绿=已有 / 黄=接口有但需接上 条件 该干什么 现状 有会话在执行 不打扰 · 延后(target-busy) ✓ 已有 有队列任务 ∧ 无会话执行 派一棒去干 ✗ 缺 无队列 ∧ 无会话 · 目标未完成 写差距进 supervise-inbox ~ 部分 无队列 ∧ 无会话 · 有阻碍 写清"要用户做什么" + A/B 暂停 ~ 接口有 无队列 ∧ 无会话 · 目标已完成 A、B 两条排期一起置 PAUSED ✗ 缺 判不准是哪一种 按"未完成"处理,⛔ 不造活 ✓ 已有

判据读法:队列 tmp/supervise-inbox/tasks.json;会话在执行 = 宿主库 sessions.status='working';目标 = goals_open() 三路并集(collabd.py:1403)。

③ 谁把主会话叫起来 —— 三态分工 活着 · 空闲 钩子投递(reply) 延迟:秒级~分钟 ✓ 能唤醒 活着 · 执行中 延后,不打扰 等它空闲再投 ⏸ 有意不唤 已退出(worker 没了) 网关随进程消失 只剩唤醒轮起新会话 ≤30 分钟 · 花一个新会话

⚠ 源码原话(collabd.py:857-860):「每次投递都会唤起主会话跑一轮 ⇒ 用户发消息撞 busy ⇒ 体感"卡"」⇒ 上报即唤醒必须节流(单条+握手 / 哈希去重 / 300 s 最小间隔 / 15 分钟真停滞门槛)。