- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次) - .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…), 目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪 - .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/) - .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*) - .gitignore 补:备份件(*.bak-*) - 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
5.3 KiB
5.3 KiB
接续包 · 查「唤醒」为什么断了
- 出具:主会话 · 2026-09-30 11:5x
- 用户原话:「还是会发呆,上次唤醒 56分钟前」,随后:「处理完成后 创建接续会话继续 排查为什么唤醒断了」
- 🔴 只做这一件:查清"唤起主会话的那个定时闹钟为什么停",⛔ 不顺手扩范围
一、已知事实(全部已实测,⛔ 别重做)
| # | 事实 | 读数 |
|---|---|---|
| 1 | 原任务 bbaf9baf(08:47 建 · */5 · durable)已从网关消失 |
GET /api/v1/scheduled-tasks?sessionId=fe146dd9-… → {"tasks":[]}(11:43 实测:一条都没有) |
| 2 | 🔴 网关没有重启过 | GET /api/v1/health → pid=50716、uptime≈40676s(≈11.3 h ⇒ 约 00:25 起)。而任务是 08:47 建的、11:43 发现没了 ⇒ 它是在网关一直活着的情况下消失的 |
| 3 | 网关无法核实任务是否存在 | GET /api/v1/scheduled-tasks/{id} → 404 No mapping found(无此路由);列表里 durable 的永远不显示 |
| 4 | 10:44→11:42 主会话闲着 57 分钟,一条心跳都没收到 | 用户看到「上次唤醒 56 分钟前」 |
| 5 | 现存两个投递方都不是时间驱动 | ① collabd.py --tick:钩子事件驱动 ⇒ 只有"有会话在跑工具调用"时才被唤起 ⇒ 闲着必然不响 ② collabd.py --supervise(PID 55332,06:02 某会话起的孤儿):已死(最后投递 10:44:43) |
| 6 | 当天投递台账 22 次投递,无一次能归因于 cron | 只有 上报·唤醒(--tick)与 监督程序·心跳(--supervise)两种 kind |
结论(已成立):没有任何"时间驱动"的触发在真正工作 ⇒ 主会话一闲就没人叫 ⇒ 发呆。
二、已做的处置(⛔ 别推翻,也别重做)
- 重建了任务:
POST /api/v1/scheduled-tasks(体 =cron:"*/5 * * * *"+prompt+recurring:true+durable:true+sessionId:fe146dd9-…)- 新 id
91f8baeb(11:47 建,humanSchedule=Every 5 minutes);旧的bbaf9baf已归入登记册_历史 - 🔴 prompt 第 0 步要求它先写触发戳
tmp/supervise-inbox/_wake.stamp—— 这是唯一能核实"它真来过"的办法(因为事实 3)
- 新 id
- 看板去假绿:
.workbuddy/collab/board_ext.py的up改成按"最近真痕迹"判(cron 戳 或 投递台账,<15 分钟才绿)⇒ 现在显示黄色 + 「上次唤醒:无记录」
三、🔴 你要查的(按顺序,每条都要给读数)
1️⃣ 新任务 91f8baeb 到底会不会响?(11:47 建 ⇒ 首次应在 11:50,之后每 5 分钟)
- 判据:
tmp/supervise-inbox/_wake.stamp有没有出现/更新;主会话转录里有没有来心跳 - 不来 ⇒ 网关的 cron 引擎本身不工作 ⇒ 从此所有
scheduled-tasks都不可信(这正是最可能的结论) - 来 ⇒ 那要解释"
bbaf9baf为什么消失"(见 3️⃣)
2️⃣ 若不来 ⇒ 摸网关 cron 的真实行为
- 拿口令(钩子/
--tick上下文天然有CODEBUDDY_GATEWAY_PASSWORD)建一条一次性任务试验:POST /api/v1/scheduled-tasks,recurring:false,cron指向 2 分钟后,prompt 写一个能留痕的动作 - 观察:① 到点是否被执行 ② 执行后从内部消失还是留着 ③ 有无任何日志/持久化文件
3️⃣ durable 到底管不管用?(本次最强嫌疑)
bbaf9baf是durable:true,却在网关没重启的情况下消失 ⇒ 存疑:durable可能只是"跨 session",并不做进程级持久化- 只读查法(优先):翻 WorkBuddy 的数据目录/日志,找 scheduled task 有没有落盘文件
- ⚠️ 要重启网关来验证的话 —— 先问用户(重启网关=重启宿主,影响面大)
4️⃣ 若确认 cron 不可信 ⇒ 给用户一个替代方案(先别动手)
- 候选:Windows 计划任务(
schtasks.exe被程序黑名单硬拦,但 PowerShell 的*-ScheduledTask不走 schtasks.exe,值得一试)/「启动文件夹」 - ⛔ 但本线有明确口径:用户反对"什么都塞进自动任务"(原话「又给我整到自动任务去了」)⇒ 取舍必须写清再报
四、边界(⛔ 越线即事故)
- ⛔ 不动正在跑的看板
127.0.0.1:8788(主会话起的,还挂着) - ⛔ 不动中继客户端
DSH-Overlay-Node-Dev - ⛔ 口令不落盘、不进日志、不回显
- ⛔ 不改 A 方案的口令入站通道(它已实证可用)
- ⚠️ 任何"重启网关 / 重启宿主"的动作,先问用户
五、相关文件
| 用途 | 路径 |
|---|---|
隐形体登记册(现役 91f8baeb/_历史 bbaf9baf) |
.workbuddy/collab/gateway-schedules.json |
看板扩展(_stamp_age / _last_wakeup / _triggers) |
.workbuddy/collab/board_ext.py |
| 投递台账 | tmp/supervise-inbox/wakeups.jsonl |
| 唤醒触发戳(要盯的就是它) | tmp/supervise-inbox/_wake.stamp |
| 当天全过程(11:42–11:52 节最相关) | .workbuddy/memory/2026-09-30.md |
网关 API 契约(含 scheduled-tasks 的体与 R5 风险) |
技能 workbuddy-extension-surface §1.4 |