Files
dsh_ai1net_server/交付物/接续包-查唤醒为什么断-20260930.md
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 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/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

68 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 接续包 · 查「唤醒」为什么断了
- 出具:主会话 · 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)
- **看板去假绿**:`.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 |