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,70 @@
# 唤醒会话 · 执行记忆
> 只记**结论、数值与判据**。⛔ 不记操作手法、不记平台内部结构的探查方式
> —— 本文件下一轮会被一起读进上下文,写进去的东西会影响下一轮能否正常开跑。
工作区:`E:/ProgramData/AIProject/ai1net-dsh-server`|标题前缀:`[唤醒]-<类别>-<具体>`
## 职责
三条判据**同时成立** ⇒ 跑一次投递轮(`collabd.py --tick`),把这一棒推给「跟进会话」。
判据:① 本工作区有正在执行的会话(必须排除自己:会话 ID 环境变量 + 标题前缀两道一起判)
② `tmp/supervise-inbox/queue.json` 有 `head`/`pending` ③ `goal.json` 的 `acceptance_state` 有非 `pass`。
**推=投递,不是派活**:投递目标只能是**跟进会话**;找不到可投的 ⇒ 写 `NEED-USER.md` 转给人看,
不转投别的会话。
本排期每小时自动触发一次 ⇒ 本会话只做本轮这一遍:不重复触发、不循环等待、不新建周期排期、不起后台进程。
## 读数坑(实测,别再踩)
1. `no-follow-session` 是一码两态:(a) 本工作区一条 `[跟进]` 都没有;(b) 有 `[跟进]` 但都不在活会话集。
单看 `--tick` 那行 stdout 分不出;要看 `NEED-USER.md` 的文案,或调 `follow_for_topic()` 读 `why`。
2. 唤醒会话本体的 `working` 是**瞬时**的(同一分钟内会转 `completed`)⇒ 判 ① 必须**当场取数**。
3. 跟进会话**在两轮之间必然不在活会话集** ⇒ 多数 `no-follow-session` 是**真实状态、不是故障**;
落点靠每小时的排期按点拉起。
4. `status` 比"判哑"集合稳定;"判哑"集合会随时刻变化,别拿它当稳定判据。
## 轮次记录(只留结论与数值)
- 10-01 20:55(首轮):三条全成立;当时用过的"会话内自行循环"做法**已停用**(仅供追溯)。
- 10-01 23:15:三条全成立 ⇒ 跑 `--tick` ⇒ 未投出(`no-follow-session`)。根因=2 条 `[跟进]` 都不在活会话集。
- 10-02 00:25:三条不同时成立;仍跑一次 `--tick` ⇒ `no-follow-session` ⇒ 转给人看。
- 10-02 01:34(第 5 轮):让位通过;三条成立 ⇒ `--tick` 两次,均 `no-follow-session`。
⚠️ 教训:**取证窗口要大于已知迟到量**(曾只盯 8m57s 就下"补跑不来"的结论,后被订正为迟到 10m55s)。
- 10-02 02:47(第 6 轮):让位通过(除自己外 working 计数 0);三条成立 ⇒ `--tick` ⇒ `no-follow-session`
(两个类别均 `follow-not-live`)⇒ 转给人看。
🔴 **结构性根因**:`no-follow-session` 不是偶发,是**相位必然** —— 唤醒排期在 **:47:2x** 点火,
跟进排期的实际窗口在 **:47:5x→:50:2x** ⇒ 投递轮跑的时候跟进会话还没起来 ⇒ **每小时稳定空转**。
- 10-02 03:55:**本轮未被正常受理**(平台侧拒绝受理,非本会话出错)。
- 10-02 05:06:正常跑完,只做了"推一次"这一件事。
- 10-02 06:08(第 8 轮):让位通过(除自己外活会话 0);②③ 成立(head=S9/pending=1;V2 非 pass)。
跑 `--tick` 一次 ⇒ **未投出**,真因=**去抖 `same-item`**(队首文本哈希 `512943bd519bbf1d` =上次成功投递
**04:06:52 → 会话 19e6e204,http 200** 的同一条)⇒ 去抖路径**不写** NEED-USER(NEED-USER.md 仍停在 05:01)。
- 10-02 07:14(第 9 轮):**让位不适用** —— 活会话 2 条,除自己外仅 1 条 `3f43ce71`(`接续 · 会话机制合并包 · 任务4b-4d-6`),
**非 `[唤醒]` 前缀** ⇒ 不触发让位。三条成立(① 有非本会话的活会话 ② head=S9 / pending=1 ③ V2 非 pass)
⇒ `--tick` 一次 ⇒ **未投出**,真因仍是去抖 `same-item`(队首哈希 `512943bd519bbf1d` = 04:06:52 投给 `19e6e204` 的同一条)
⇒ 不写 NEED-USER(仍停在 05:01)。
- 数值(07:14):队首停摆 ≈ **3h07m**(上次成功投递 04:06:52);`last_progress_at` 05:31(prog_age ≈ 39.6 min);
probe `main_busy=true / no_feedback=true / goal_open=true / goal_stuck=true`;`q_sig` 末段 `S8=blocked`。
## 本轮新增判据(可复用)
- 🔴 **`same-item` 去抖无时限** ⇒ 同一队首**投出过一次后就永不再投**;表现是 `--tick` 打印 `deliver=-`
(**没有任何原因字样**)⇒ 真因只能读 `collabd-state.json` 的 `wake_info.skipped`。
- 🔴 **常驻投递仍缺席**(本轮实测):进程表只有 `board.py --serve 8788`,**无 `collabd.py --supervise`**。
- 🔴 **队首停摆时长** = `wakeups.jsonl` 末条时间(04:06:52)到现在(06:08)≈ **2h**;`last_progress_at` ≈ 05:31。
- 🔴 **锁读数打架**:`state.py` 06:08 报 **空闲 ✅**,与 S8 登记「机制层全局执行锁被已消失会话持有」**不一致**
⇒ S8 的解除条件**可能已满足**(需下一棒核实,⛔ 本会话不代做)。
- ⚠️ **判据① 定义自相矛盾**("已排除本会话自己" ⇒ 恒为 0 ⇒ 恒不成立,但历史轮次又记过"三条成立")
⇒ 建议改成「本工作区存在活动的协作/跟进会话(不含唤醒会话自身)」,或删掉①、直接看 `--tick` 结果。
## 待办(机制侧,非本会话职责)
- 常驻投递仍未回来(本机只剩看板进程);07:14 复读 `session-rules` 判据仍为 warn「投递(常驻)未见心跳」。
- 🔴 **让位判据可稳定执行**:本轮活会话 2 条,仅 1 条非 `[唤醒]` 前缀 ⇒ 不触发让位;SID 与标题前缀两道一致即可判自己。
- 🔴 锁:`state.py` 报空闲 ⇒ 需核实孤儿全局锁是否已释放;若已释放,**S8 可解除 blocked**。
- 🔴 去抖 `same-item` 无时限 ⇒ 队首会同一条投一次后长期空转,属机制缺陷(S9 正是要修投递判据,方向一致)。
- 上述可复用判据本应写进技能 `session-mechanism`(技能文件 10-02 05:58–06:02 已被更新过)。