- 变更规模:新增 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/ 知识文件,按口径入库)
12 KiB
目标执行状态
🔴 本文件=检查会话判断目标状态的唯一依据(⛔ 别再去工作区翻文件)。 由目标检查会话(
[协作]-[目标检查]-…)在核对后更新。
目标:清理过时概念 + 常驻稳定 + 执行/检查会话正常创建 + 多工作区独立运行 类别:会话协作自检 / 机制排查与修复 / 概念清理 / 常驻稳定 / 会话创建 / 多区独立 本节最近更新:2026-10-05 12:35(目标检查会话 第7棒:三路取并集复核完成 ⇒ V1–V6 全过,台账空、任务图全 done、无僵尸件 ⇒ lifecycle 已改判「已完成」,常驻随之优雅退出)|上一轮:2026-10-05 12:1x(执行会话 V5 转绿第 1 棒)
二、验收判据(值是中文写法:过|…/🔴 不过|…)
V1 两区常驻都在跑
结论:过
- 实测:本棒现读两个心跳文件 + 进程级核对 —— ai1net-dsh-server
supervise-heartbeat.json= pid 30560 / ts_h2026-10-05 11:31:55/ round 121 / interval 10.0;vibe-product 同名文件 = pid 60596 / ts_h2026-10-05 11:31:55/ round 93 / interval 30.0;tasklist /FI "PID eq …"两条均返回pythonw.exe且该 pid 在列(30560 → 45,780 K,60596 → 9,496 K)⇒ 判据「pid 活 ∧ 心跳新鲜」两区都成立。
V2 执行会话能创建
结论:过
- 实测:本棒在
workbuddy.db的sessions表回读 ——[协作]-[概念清理]-术语收敛第1棒id98fb7c55…/ statuscompleted/ created_at2026-10-05 10:38:10,是排期名([执行]/[协作]两级前缀)且已入库 ⇒ 排期 → 宿主拉起 → 会话入库这一段通。
V3 检查会话能创建
结论:过
- 实测:本棒现读三处 —— ①
tmp/supervise-inbox/check-agent.json有本轮登记条目:round=5、name=[检查]-[目标检查]-ai1net-dsh-server-第5棒、reason=queue-empty、kind=目标检查、at=2026-10-05T11:24:25、fire_at=11:25:55、queue_pending=0、idle_min=20.2;②sessions表回读该检查会话 id2cca68dd-4d45-40fd-a203-d25f0a23b4ab/ title 同名 / statuscompleted/ created_at2026-10-05 11:26:24(= fire_at 后 29 s 拉起)/ updated_at11:28:10;③collabd.parse_session_name("[检查]-[目标检查]-ai1net-dsh-server-第5棒")={"role":"check","topic":"目标检查","ok":true,"form":"prefix"},且is_check_agent()对它返True、对本棒标题返False⇒ 检查角色解析与协作角色解析互不串。 ⚠️ 一处如实记录的差异:check-agent.json的id字段是6c79dc0a-ee45-48dd-841d-5cb7c96d581a,该值在sessions表查不到;它在automations表里是[检查]-[目标检查]-ai1net-dsh-server-第5棒这条排期的 id ⇒ 该字段登记的是排期 id,不是会话 id(不影响「链路通」这一结论,但字段语义与字段名不符,已记为待澄清项)。 ⚠️ 另一处:本棒自己(eefdc322-65dc-4cad-8b58-aafe08a214cc/ title[协作]-[会话协作自检]-复验V3V5V6并回写目标执行状态/ statusworking/ created_at2026-10-05 11:31:11/is_background_automation=1)在tmp/supervise-inbox/下grep -rl eefdc322无登记条目 ⇒ 执行会话这一侧没有与检查会话同形的登记文件,检查会话的登记载体是check-agent.json。 ⚠️ 按判据要求未读tmp/supervise-inbox/queue.json(已退役旧投递机制遗留、内容停在过期状态)。
V4 看板显示当前目标
结论:过
- 实测:本棒
grep -o "本机协作" tmp/supervise-inbox/board.json | wc -l= 4 处命中,JSON 可解析 ⇒ 当前目标标题在看板上出现。另本棒对上的目标真源是tmp/supervise-inbox/goal.json(execution_doc=目标-本机协作-3e3182/目标执行状态.md、topics六项齐全)。
V5 自测基线全绿
结论:过
- 实测:本棒现跑
E:/ProgramData/.workbuddy/skills/session-mechanism/scripts/selftest.py,rc=0,合计行原文「合计:PASS 97 / FAIL 0(另有 1 条报告型,⛔ 不计入)」⇒ 判据「FAIL 0」成立。最终读数落盘目标-本机协作-c8154d/selftest-V5-最终读数-20261005.out。 - 🔴 执行对象已改正(这是上一棒 30 条 FAIL 的真因,属「判据口径错」不是部署缺陷):上一棒跑的是工作区副本
.workbuddy/collab/selftest.py,而selftest.pyL56HERE = Path(__file__).resolve().parent按技能包布局取文件(board.html取HERE.parent/assets/、judge_audit.py取HERE/、文档索引取HERE.parent/references/)⇒ 24 条FileNotFoundError+ 2 条「包内缺脚本」全部是在错的目录跑一份要求包布局的用例。本棒取证:deploy_code.py的DEFAULT_FILES(L37-44)只含 6 个.py(collabd.py/goalctl.py/collabctl.py/guard.py/session-rules-check.py/init_workspace.py),明确不含selftest.py/board.py/assets//references/;且grep -rn selftest在collabd.py/guard.py/hooks/里只命中注释与文档字符串、零执行引用 ⇒ 工作区副本本就不该有它,跑它是口径错。判据的正确执行对象=技能包那份。 - 🔴 修掉的真缺陷(1 条,与 10-03「几个 tab 看起来一样」同族):在技能包口径下
rc=1、PASS 96 / FAIL 1,红项=「跨工作区 tab:有差异的字段必须逐个被视图取到」,内层原文「⛔ 漏了['tab_hot', 'tab_i', 'ws_name']」。逐字段取证后分开处置(⛔ 不是一律塞豁免):
ws_name=真缺陷,已修。board.html的scopeView()(L1680)原先未取该字段,而下游renderProject(d)L660 读d.ws_name(用户要求「明确写出所属工作区,不搞『自己就不标』特例」),d在 L1738 =scopeView(d, gs[GIDX])的产物 ⇒ 切到别的 tab 时静默沿用本工作区的名字,跨 tab 显示错。修法=scopeView()补v.ws_name=g.ws_name||d.ws_name;。tab_hot/tab_i=后端排序键,本就不该进视图,已归位。二者由board.pyL1883-1887 在blocks.sort(key=…)里当场用掉;前端对tab_i的消费点grep -c= 0,tab_hot仅出现在一句解释「排序由后端做」的注释里 ⇒ 要求视图去取一个它根本不渲染的东西是判据分类错。处置=并入判据_IDENT表(L4358 旁已写明取证依据),⛔ 未删用例、未改判定逻辑。
-
✅ 变异对照自检(证明判据不是恒绿,三段闭环):把
v.ws_name=g.ws_name||d.ws_name;注释掉(模拟 P0-57 同族的「看着改了、其实没生效」)⇒ 判据变红rc=1、PASS 96 / FAIL 1,且内层精确点名「⛔ 漏了['ws_name']」;改回 ⇒ 判据重新变绿rc=0、PASS 97 / FAIL 0。⇒ 判据有牙、能抓住本次这类漏取,不是恒绿。 -
⚠️ 过程中被自测抓出来的一条附带真红(已处置):首修后复跑时新暴露「包体卫生:⛔ 包内无
*.bak-*历史备份」红 —— 是我自己在包内建的 2 份备份撞上的。已mv移出包外到tmp/v5-bak-20261005-1206/(保留可回退,⛔ 未删),包内find -name "*.bak-*"现为 0。这条同时印证「包无版本控制兜底 ⇒ 包内不许长备份」这条判据本身是有牙的。 -
ⓘ 唯一剩余的
✗是报告型「产物落点:每个目标一个独立文件夹」(报根目录 22 份接续包/接续入口类 md 未落进「目标-*/交付物」)—— 按判据原文它不计入--verify成败,⛔ 本棒未动(属产物归档口径,需单独一棒)。 -
实测:本棒现跑
E:/ProgramData/AIProject/ai1net-dsh-server/.workbuddy/collab/selftest.py,rc=1,末尾合计行原文「合计:PASS 67 / FAIL 30(另有 1 条报告型,⛔ 不计入)」⇒ FAIL 30 ≠ 0 ⇒ 判据「FAIL 0」不成立。完整输出落盘在tmp/selftest-V5-20261005-1132.out(215 行)。
V6 多工作区独立
结论:过
- 实测:本棒逐工作区读心跳与目标 —— ai1net-dsh-server:pid 30560、
argv0=E:\ProgramData\AIProject\ai1net-dsh-server\.workbuddy\collab\collabd.py、started_h=2026-10-05 11:11:53、round 121、interval 10.0、queue_n=1;goal.json的lifecycle=进行中。vibe-product:pid 60596、argv0=E:\ProgramData\AIProject\vibe-product\.workbuddy\collab\collabd.py、started_h=2026-10-05 10:45:53、round 93、interval 30.0、queue_n=3;goal.json的lifecycle=已完成(机器可判部分)。 - 独立性判据(结论:成立):两个常驻是两个不同 pid、不同
argv0、不同started_h、不同interval、不同queue_n的独立进程,各自只读各自工作区的goal.json;本工作区的目标在2026-10-05 11:02换过标题与判据,而 vibe-product 的常驻至今未重启(started_h仍是 10:45:53、round 从 11:31 的读数看持续递增)、其goal.json的 mtime 仍是2026-10-05 01:20⇒ A 工作区的常驻与目标变动没有导致 B 工作区的任何读数变化。 - ⚠️ 本机目前只有这两个工作区装了
.workbuddy/collab(ls -d E:/ProgramData/AIProject/*/.workbuddy/collab只命中这两个)⇒ 结论的覆盖面就是这两个区,第三个区接入时需重跑一次。
三、结论
- 6 条全部「过」(V1/V2/V3/V4/V5/V6),0 条「🔴 不过」,0 条「未测」 ⇒ 6 过 / 0 不过 / 0 未测。V5 于 2026-10-05 12:0x 由本棒转绿(修前
rc=1/PASS 96 / FAIL 1,修后rc=0/PASS 97 / FAIL 0,变异对照已闭环)。 - 目标生命周期已改判「已完成」 —— 2026-10-05 12:35:11 由目标检查会话第 7 棒执行
collabd.py --set-life 已完成(goal.json回读确认lifecycle=已完成/lifecycle_at=2026-10-05T12:35:11/lifecycle_by=[检查]-[目标检查]-ai1net-dsh-server-第7棒),⛔ 不留「进行中」空转;常驻程序随之优雅退出(pid 58860)。 判据=三路取并集全绿:① 台账tmp/supervise-inbox/tasks.json={"t":{"state":"done"}}(⛔ 无 pending/running/blocked,无僵尸件);② 任务图交付物/任务图-会话协作自检.json12 个节点(S1–S12,含关键路径 9 个)全部status=done;③ 本文档 V1–V6 6 过 / 0 不过 / 0 未测。⚠️ 域占用读数:ai1net-dsh-anywhere由[协作]N9复测-2248持有(⛔ 与本判定无关,未动)。 - 报告型红项「产物落点:每个目标一个独立文件夹」经本棒拍板:不计入目标完成度(依据=判据原文「不计入
--verify成败」),故⛔ 不因它拦下 lifecycle;但它仍是独立待办,需要时另起一棒处理。 - 下一步:① 目标已完成 ⛔ 不再派协作棒;② 若要继续,新目标须在对话里重新 declare(⛔ 不得从目录名/旧文档猜);③ 两条待澄清项仍挂着(
check-agent.json的id存的是排期 id 而非会话 id;执行会话在tmp/supervise-inbox/下无同形登记条目)—— ⛔ 属机制层口径,不自行改。 - 两条待澄清项(如实记录,未自行改):①
check-agent.json的id字段存的是排期 id 而非会话 id;② 执行会话在tmp/supervise-inbox/下无同形登记条目(检查会话有check-agent.json,执行会话没有对应文件)。 - ✅ 真源归属已明确(本棒已修):
tmp/supervise-inbox/goal.json的execution_doc原指向旧目标目标-本机协作-3e3182/目标执行状态.md(该目标已于 10-03 标「已完成」)⇒ 本棒已改指回目标-本机协作-c8154d/目标执行状态.md,检查会话下一棒不会再读错文档。