需求统一启停控制台 · 一个需求牵扯的四层

入口:goalctl.py status | start | stop(默认干跑,--yes 才真做)。 🔴 钩子层**不在可启停范围内** —— 它全局注册、跨项目共用,装卸会连累所有项目。

① 一个需求牵扯什么(本机实测) 层 具体物 谁能改 实测状态 ① 排期层 automations 表的周期排期 ⛔ 只有会话 3 条全 PAUSED ② 程序层 collabd 的 wake_enable(投递总闸) ✓ 脚本 已置 false ③ 总开关层 goal.json 的 run 段 ✓ 脚本 已置 paused ④ 服务层 看板 serve / 守护 guard / 网关心跳 ✓ 复用 stop-collab 全停 — 钩子层(⛔ 不在闸内) 全局 12 个 hook 注册在 settings.json,里面还混着**别的工作区**的 decision_bridge.py(×4 事件) ⇒ 装卸钩子会连累所有项目 ⇒ 只能「开关文件 + 入口早退」;它本身零 token,不拦

⚠️ 剔除项:**一次性棒 15 条**(schedule_type='once'、next 为空=已耗),⛔ 不是启停对象。判"还在不在跑"要看 deleted_at(删除是**软删**,status 仍 ACTIVE)。

② 三道闸各拦什么 —— 缺一层就留缝 ① 排期层 PAUSED 拦「起新会话」 ② 程序闸 false 拦「投递=唤醒主会话」 ③ 总开关 paused 拦「起来后干活」 三者互补不重叠 ⇒ 三个一起翻才是「真停」 只关 ② ⇒ 排期照旧起会话 | 只停 ① ⇒ 程序照旧投递(占主会话,体感"卡") ⛔ 做不到"一秒内把在跑的会话停下":会话不可 kill ⇒ 只能「不再叫新的 + 起来了不干活」 降级保障:漏改排期时,唤醒轮第 0 步读到 run=paused 也会立刻退(成本=一次空跑)

驱动口径=用户已定的那条:下「执行 XXX 目标」口令 ⇒ start;完成/阻碍 ⇒ stop。⛔ 唤醒轮不许把自己启回来。