Files
dsh_ai1net_server/执行会话/目标-本机协作-3e3182/目标执行状态.md
T
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

11 KiB
Raw Blame History

目标执行状态

🔴 本文件=检查会话判断目标状态的唯一依据(用户 2026-10-03 10:5x 要求逐字: 「目标执行情况也要有文档,这样检查会话直接根据文档判断目标状态,避免检查会话到处找信息」)。 ⛔ 检查会话不许再去工作区里翻文件找目标状态 —— 读本文件 + tasks.json 就够了。

  • 目标标题:检查会话协作是否运行正常 + 协作机制问题排查与修复
  • 目标简称:本机协作
  • 目标生命周期:已完成(2026-10-03 12:18 由 [检查]-[目标检查]-ai1net-dsh-server-第4棒 判定并写入)
  • 本文件由谁更新:目标检查会话([检查]-[目标检查]-…)在核对完成后改「目标生命周期」并更新本文档
  • 最后实测时间:2026-10-03 12:18(所有读数均为现测,⛔ 不是转述)

一、怎么用这份文档(检查会话照此判断,别自己另立口径)

  1. 先读 tmp/supervise-inbox/tasks.json(队列四态台账)—— 那是「活干完了吗」。
  2. 再读本文档 —— 那是「目标达成了吗」。
  3. ⛔ 两者都不许跳。三路取并集,任一路"没完"就是没完:
    • 台账里有 pending/running/blocked 的件;
    • 任务图(交付物/任务图-会话协作自检.json)里还有 status != done 的节点;
    • 本文档第二节里还有任何一条判据没过。
  4. 全部满足 ⇒ 才可把目标生命周期改成「已完成」,并在本文档把「结论」那一行更新掉。

二、验收判据(逐条,⛔ 判据值是中文写法:过|…/🔴 不过|…)

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:8788 LISTENING(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棒)。 三路取并集无一路「没完」:

    1. 台账 tasks.json:S5/S12 均 done 且各带 artifact ⇒ 无 pending/running/blocked(零僵尸件)。
    2. 任务图:12 个节点全部 status=done(含最后一个卡住的 S12)。
    3. 本文档 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:8788 LISTENING(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 分钟"=假读数 ⇒ 改读常驻心跳 + 四态

⚠️ 本清单不是为了好看 —— 留着它们,目标状态就永远判不出来(同族红线: 「一条判据都没有 ⇒ 判不出来,⛔ 不许当成已完成」的反面:有一条永远红的 ⇒ 也不许当成未完成)。