fix(session-mechanism): 常驻读不到宿主库 ⇒ 检查会话永不建

- init_workspace.py 生成配置时写 host_db(宿主 env → 本包 env/roots.env);旧配置留空则补,已写值不动
- collabd._wb_db() 去掉 ~/.workbuddy 回落(本机无此文件),取不到改为占位路径 + 限流留痕
- _sm_load_roots() 先读 COLLABD_CONFIG 所指配置的 host_db,再试 <CODEBUDDY_CONFIG_DIR>/skills/session-mechanism/env/roots.env,最后才上跳
- pitfalls 新增 P0-99(含「新工作区验收跑一次脱环境探针」通则)

实测:deepwrite-harness 新建区 2091 条「读库失败」、11.5 小时零检查会话;修复后五区重启读库失败归零,检查会话建棒并把目标置「已完成」
This commit is contained in:
admin committed 2026-10-17 11:36:13 +08:00
1 parent 8160f91559
commit 310a964a94
3 files changed
+111 -3

No files matched your search

+23
View File
@@ -3823,3 +3823,26 @@ var r = el.getBoundingClientRect();
- ⚠️ 升级后必做的回归:核对**下游按名引用的具体文件还在不在**
(本次 `product-planning` 引用的 `visual-review.md`/`tools.md`/`design-direction.md`/`style-explorer.md` 全部健在;
新版删了 `imagery.md`、新增 16 份 —— 删除项要逐条确认无下游引用)。
## P0-99 新建工作区的常驻读不到宿主库 ⇒ 检查会话永不建(2026-10-17 实测)
- **症状**:新开的工作区(`deepwrite-harness`)整夜零检查会话;`_collabd.log` 里
`all_sessions_idle 读库失败 unable to open database file` 每 20 秒一条,**2091 条**。
`_all_sessions_idle()` 是 fail-safe:读不出来 ⇒ 判「有会话在跑」⇒ 闸② 恒挡 ⇒ 检查线整条瘫。
- **根因链(三道兜底全空)**:① 计划任务起 `pythonw supervise-launch.py`,环境里没有
`CODEBUDDY_CONFIG_DIR`;② 本区 `collabd.config.json` 的 `host_db` 被 `init_workspace.py` 留空;
③ 启动器第③级与 `collabd._sm_load_roots()` 都靠「从自身位置往上跳找 `env/roots.env`」,
而副本在 `<工作区>/.workbuddy/collab/`、与技能包没有相对关系 ⇒ **恒找不到**。
⇒ `_wb_db()` 回落 `~/.workbuddy/workbuddy.db`(本机无此文件)⇒ 打不开。
- **旁证**:本机六个区里写过 `host_db` 绝对路径的三个(`aigc`/`contentm`/`mcn`)没炸;
`ai1net-dsh-server` 同样留空 ⇒ 日志 41 次 `no such table: sessions` —— 同一个病两个报错。
- **✅ 正解(三处一起改)**:
① `init_workspace.py` 新增 `_resolve_host_db()`,生成配置时写 `host_db`(宿主 env → 本包 `env/roots.env`);
旧配置留空 ⇒ 补上,已写值保持不动。
② `collabd._wb_db()` 去掉 `Path.home()/".workbuddy"` 回落,取不到 ⇒ 返回占位路径 + `log_throttled` 留痕。
③ `_sm_load_roots()` **先读 `COLLABD_CONFIG` 所指配置里的 `host_db`**(最接近真相,启动器恒设这个 env),
再补一条 `<CODEBUDDY_CONFIG_DIR>/skills/session-mechanism/env/roots.env`;仍找不到才上跳。
- **验收**:清空 `CODEBUDDY_CONFIG_DIR` 起探针 ⇒ 解析出 `E:\ProgramData\.workbuddy`;
五个区重启后 `11:34 之后读库失败 = 0`;本区检查会话 11:26:49 起、11:28:39 把目标置「已完成」。
- **🔴 通则**:**新工作区验收要跑一次「脱环境」探针**(`env -u CODEBUDDY_CONFIG_DIR` 起 collabd),
能解析出宿主库才算装好。⛔ 别拿「其它区都在跑」当证据 —— 那是早年的 `host_db` 绝对路径在兜底。