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/ 知识文件,按口径入库)
This commit is contained in:
admin committed 2026-10-10 23:13:22 +08:00
1 parent 30b46dbd0c
commit c1b5e4d966
735 files changed
+153192 -2415

No files matched your search

@@ -0,0 +1,142 @@
# 目标执行状态
> 🔴 **本文件=检查会话判断目标状态的唯一依据**(用户 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 分钟"=假读数 ⇒ 改读常驻心跳 + 四态 |
⚠️ 本清单**不是为了好看** —— 留着它们,目标状态就**永远判不出来**(同族红线:
「一条判据都没有 ⇒ 判不出来,⛔ 不许当成已完成」的反面:**有一条永远红的 ⇒ 也不许当成未完成**)。