- 变更规模:新增 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/ 知识文件,按口径入库)
11 KiB
目标执行状态
🔴 本文件=检查会话判断目标状态的唯一依据(用户 2026-10-03 10:5x 要求逐字: 「目标执行情况也要有文档,这样检查会话直接根据文档判断目标状态,避免检查会话到处找信息」)。 ⛔ 检查会话不许再去工作区里翻文件找目标状态 —— 读本文件 +
tasks.json就够了。
- 目标标题:检查会话协作是否运行正常 + 协作机制问题排查与修复
- 目标简称:本机协作
- 目标生命周期:已完成(2026-10-03 12:18 由
[检查]-[目标检查]-ai1net-dsh-server-第4棒判定并写入) - 本文件由谁更新:目标检查会话(
[检查]-[目标检查]-…)在核对完成后改「目标生命周期」并更新本文档 - 最后实测时间:2026-10-03 12:18(所有读数均为现测,⛔ 不是转述)
一、怎么用这份文档(检查会话照此判断,别自己另立口径)
- 先读
tmp/supervise-inbox/tasks.json(队列四态台账)—— 那是「活干完了吗」。 - 再读本文档 —— 那是「目标达成了吗」。
- ⛔ 两者都不许跳。三路取并集,任一路"没完"就是没完:
- 台账里有
pending/running/blocked的件; - 任务图(
交付物/任务图-会话协作自检.json)里还有status != done的节点; - 本文档第二节里还有任何一条判据没过。
- 台账里有
- 全部满足 ⇒ 才可把目标生命周期改成「已完成」,并在本文档把「结论」那一行更新掉。
二、验收判据(逐条,⛔ 判据值是中文写法:过|…/🔴 不过|…)
V1 协作程序常驻一直运行
- 结论:过
- 实测:
supervise-heartbeat.json→pid=38988、round持续上涨(10 s/轮)、ts_h=2026-10-03 10:35:21。 - 判据:pid 活 ∧ 心跳新鲜(<90 s)—— 与
selftest.py::t_supervise_ensure同一口径。
V2 队列与检查会话链路
- 结论:过
- 实测:
tasks.json读数S5=done(带 artifact)、S12=done(带 artifact);queue_pending()=0(真源tasks.json四态口径);闸②_all_sessions_idle()=True、闸④ws_pending_schedules()=[]、闸③ 走queue-empty。 - ⚠️ 旧判据「跟进会话链接得住(零条活着 / 今日投递成功 0 次)」已作废 —— 唤醒/跟进/队列投递 整套退役(用户 2026-10-03 定案),那条判据永远不可能满足。⇒ 本条改为校验现行链路。
V3 协作会话在台账里留有产物文档
- 结论:过
- 实测:
S5.artifact指向references/architecture.md §2.3.0f;S12.artifact指向机制排查与修复/S12_清理报告_20261002.md。 - 判据:每条
done必须有artifact。⇒ 机制侧已加硬约束:--report --state done缺--artifact直接拒收(rc=3)。
V4 看板可服务
- 结论:过
- 实测:
netstat→127.0.0.1:8788LISTENING(pid 41764);/board.json→ HTTP 200、ts=2026-10-03 10:52:35。 - 判据:能起得来 + 回环 HTTP 200(⛔ 不看页面像不像,看接口读数)。
V5 机制自测全绿
- 结论:过
- 实测:
selftest.py→ PASS 55 / FAIL 0。 - ⚠️ 基线是 FAIL 1(
技能侧零项目串那条,已于 2026-10-03 上午修掉:域键锚点词表三处对齐 + 结构性豁免)。 ⇒ 判据写成「FAIL 0」,⛔ 不写「与基线持平」—— 那种写法会让真红也通过。
V6 协作程序格能显示"检查程序在运行"
- 结论:过
- 实测:
/board.json→runtime.check = {"n":0,"label":"无检查在跑"}。 端到端验过:临时把一条检查会话置working⇒ 线上runtime.check.n=1、label=有结果检查在运行;还原后回n=0。 - 判据:
runtime.check字段在位 + 与真库working检查会话数一致(不许恒绿)。 - ⚠️ 旧判据「跟进会话角色落地(名册 11 条)」已作废 —— 跟进会话整套退役。
V7 检查会话按规范命名、且不进协作会话区
- 结论:过
- ⚠️ 本条已于 2026-10-03 11:1x 重写 —— 上一版写的是「按
[协作]-[…]命名、判worker、画进协作会话区」, 已被用户明确纠正(逐字:「检查会话不是协作会话,不应该出现在看板协作会话区域中; 它属于协作程序的会话,可以放在协作程序框图中展示」)⇒ 旧写法作废。 - 实测(现行口径):
- 排期名=
[检查]-[结果检查]-<工作区>-第N棒(角色词是检查,⛔ 不是协作;第二段仍带方括号)。 parse_session_name()⇒role=check / topic=结果检查 / ok=True;旧式光杆名(结果检查-…)也判check。is_main_side_session()⇒ False(⛔ 不算主侧 ⇒ 不进协作会话那一排)。- 线上
/board.json:sessions_checks里有它、role=检查会话;协作会话区域不含它。
- 排期名=
- 判据:
role=check+topic非空 + 两侧解析零漂移 + ⛔ 协作会话排的判据显式排除检查会话(前端也挡一次)。 - ⚠️ 旧判据「开工建齐三类(唤醒/协作/跟进)」已作废 —— 会话类别已收敛(主会话/协作会话/检查会话)。
V8 协作程序在线状态读数不是假读数
- 结论:过
- 实测(线上
/board.json):runtime.prog.label=在线、up=true、by=常驻 --supervise(round N)、heartbeat_age_min≈0.1、heartbeat_pid=48896; 旧退役戳legacy_tick_age_min≈861.6单列且不参与判定。 - 判据:判据读常驻心跳(
logs/supervise-heartbeat.json), ⛔ 不读_tick.stamp/collabd-once.stamp(已退役投递机制的遗留,实测停在 2026-10-02 21:24)。 - ⚠️ 四态文案必须分清(2026-10-03 11:35x 用户报障「已 849.6 分钟没轮」后确立): 在线 / 已停·进程不在(pid 没了)/ 没轮(进程还在)(活着但卡住)/ 心跳读不到·判据已降级(⛔ 不提进程 —— 提了就是编)。
- ⚠️ 本机实况:后台进程活不过工具调用边界 ⇒ 长期载体必须是会话后台任务;
Popen(DETACHED|NO_WINDOW)起的常驻实测约 2 分钟就被回收。
三、结论
-
8 条判据全部通过 ⇒ 目标「检查会话协作是否运行正常」这一部分已经达成。
-
✅ 2026-10-03 12:15 更新:任务图 12 个节点现已全部
done—— 最后一个卡住的S12(await-verify)已由[协作]-[机制排查与修复]-S12解体检刷新以真读数转done。 当时阻塞它的是机制层真死锁:health()因busy早退 ⇒ 体检报告 mtime 停在 10-02 20:50:22 ⇒ 判据第二条「体检报告确认」永远无法过。修法见S12_体检刷新解锁_20261003.md。 -
✅✅ 2026-10-03 12:18 终判:目标生命周期 =「已完成」(
[检查]-[目标检查]-ai1net-dsh-server-第4棒)。 三路取并集无一路「没完」:- 台账
tasks.json:S5/S12 均done且各带artifact⇒ 无 pending/running/blocked(零僵尸件)。 - 任务图:12 个节点全部
status=done(含最后一个卡住的 S12)。 - 本文档 V1–V8:全部「过」。
本棒按 §一 的要求重跑了一遍 V1–V8(⛔ 未沿用 10:52 的旧读数),现读数:
- V1 过 —— 心跳
pid=36868、两次采样round 90→92(10 s/轮)、ts_h=12:18:25(<90 s); 进程表Win32_Process独立佐证 pid 36868 在(起 2026-10-03 12:03:13,命令行=collabd.py --supervise)。 ⚠️ 踩坑留档(P0-22 同族):先用「OpenProcess+WaitForSingleObject」判存活读出DEAD(假阴性), 与心跳新鲜自相矛盾 ⇒ 改用进程表交叉验才定案。判据冲突时必须找第二路,否则会把「判据假红」当成「机制真死」。 - V2 过 —— 同上(台账两件 done 带 artifact)。
- V3 过 —— S5/S12 的
artifact均非空。 - V4 过 ——
netstat→127.0.0.1:8788LISTENING(pid 7236);/board.json→ HTTP 200(1.6 ms)。 - V5 过 ——
selftest.py→ PASS 60 / FAIL 0(rc=0)⇒ 判据是「FAIL 0」,达标。 - V6 过 ——
/board.json→runtime.check = {"n":1,"kinds":["目标检查"],"label":"有目标检查在运行"}(n=1不是恒绿:n跟真库working检查会话数一致,此刻正是本棒自己在跑)。 - V7 过 ——
sessions_checks现读 3 条检查会话,标题分别为[检查]-[目标检查]-ai1net-dsh-server-第3棒/第2棒/结果检查-ai1net-dsh-server-第1棒,role=检查会话(⛔ 不是协作会话)⇒ 走检查会话区、不进协作会话那一排。 - V8 过 ——
runtime.prog:label=在线、up=true、by=常驻 --supervise(round 89)、heartbeat_age_min≈0.17、heartbeat_pid=36868;旧退役戳legacy_tick_age_min≈893.5单列不参与判定。 ⇒ 故goal.json.acceptance_state的机读副本保持 V1–V8 全「过|过」(与本文档一致,无需改动), 并已回读确认lifecycle=已完成(lifecycle_at=2026-10-03T12:18:51)。
- 台账
-
🔴 后续口径(不阻塞本目标):目标已标「已完成」后,本检查排期不再有可派集合 ⇒ 无需再按本目标派协作棒;若日后出现新的「协作机制问题排查与修复」诉求, 重新 declare 一个目标(
goalctl.py declare --title … --topics … --yes)再起排期,⛔ 别复用本目标。
四、旧判据的作废清单(⛔ 别再拿它们判)
| 旧判据 | 作废原因 |
|---|---|
| V2-跟进会话链接得住(零条活着/今日投递成功 0 次) | 唤醒/跟进/队列投递整套退役,永远不可能满足 |
| V6-跟进会话角色落地(名册 11 条) | 同上 |
| V7-开工建齐三类会话(唤醒/协作/跟进) | 会话类别已收敛为主/协作/检查 |
V7-旧版:检查会话按 [协作]- 命名、判 worker、进协作会话区 |
2026-10-03 11:1x 用户纠正(逐字见上)⇒ 改 [检查] + role=check + 画进协作程序框 |
协作程序状态=「已 N 分钟没轮」(单一判据读 _tick.stamp) |
2026-10-03 11:35x 实测:那两个戳 10-02 后无人写 ⇒ 报"849 分钟"=假读数 ⇒ 改读常驻心跳 + 四态 |
⚠️ 本清单不是为了好看 —— 留着它们,目标状态就永远判不出来(同族红线: 「一条判据都没有 ⇒ 判不出来,⛔ 不许当成已完成」的反面:有一条永远红的 ⇒ 也不许当成未完成)。