diff --git a/session-mechanism/SKILL.md b/session-mechanism/SKILL.md index faae48e..122822e 100644 --- a/session-mechanism/SKILL.md +++ b/session-mechanism/SKILL.md @@ -3,18 +3,19 @@ name: session-mechanism description: 「**会话机制 + 多会话执行**」的合并总入口(原 `multi-session-collab` + `workbuddy-session-forensics` 已并入本包)。🔴 **2026-10-05 起会话只三类:主会话 + 任务会话 + 检查会话**(唤醒/跟进/队列上报**已整套退役**;**任务会话=旧称「执行会话」,同一个角色**)|🔴 **2026-10-03 起「上报」整套真删**——现行机制=**常驻程序 `collabd.py` 接收(`--report` 写台账)+ 处理(建检查会话排期)**(⛔ 「协作程序」是 10-03 已退役的旧称,见文首术语表),⛔ **队列变化不再自动通知任何人**,要落事得**显式建执行会话**。两段可分别加载:① **会话机制** —— 管「会话怎么活下去、怎么不哑掉、怎么不失忆、跨机器怎么一键装好」:治「会话卡住 / 一直转圈 / 发消息没反应 / 界面不刷新」「会话日志涨到上限把界面顶死」「上下文爆了要换会话 / 接续会话怎么开」「抢锁 / 执行锁 / 并发 / 别的会话在动」「钩子没生效 / 钩子把我也拦住了」「换一台电脑要重装这一堆钩子」「某个历史会话当时到底干了啥」。② **多会话执行** —— 管「一个主会话带多个执行会话把需求做完」:治「多个会话协同但工期被拖长 / 有会话在干等 / 链条断了没人接 / 分不清『真完成』还是『只排了下一棒』/ 问清主会话·执行会话两类怎么分(**接续会话是撞阈值时的「形态」,⛔ 不是第 3 类**)」。🔴 **主触发句(2026-10-03 用户定案)**:用户说「**使用执行会话完成 XXXX 目标**」「**继续 XXXX 目标**」时**直接走本技能**(=要派执行会话去把一个目标做完/接着做)。🔴🔴 **未装即装(2026-10-14 用户令)**:说「使用项目机制完成目标:XXXX」时,若本区 **没装机制** ⇒ **当场跑 `install.py --apply --workspace <本区根>` 装好,再往下走**(装机制是这条链的第一环,⛔ 不报成阻碍、⛔ 不绕过机制直接干、⛔ 装完不停手)。其他触发:「怎么协同多个会话」「别的会话都在干等」「任务没推进」「链条断了」「你监督这些会话」「会话卡住」「日志要爆了」「换机器怎么配」「升级 / 安装这套机制」。核心=**会话机制三件套(钩子 + 锁 + 日志闸)全局生效** + **执行两条通道各走各的**(派活靠自动化/收结果直读宿主库/机械判定下沉到常驻程序/人只看一个看板)+ **一键配置 `install.py`**(换机器不手抄绝对路径)。 version: 1.3.0 updated_at: 2026-10-05 -last_change: 2026-10-05 10:5x · 🔴🔴 **`lifecycle` 判定收敛为「单一事实源」**:抽 `goal_life_of(root)`(剥全角/半角括号后缀 + 认不出时写日志),`goal_life()` 降为薄封装,`peer_supervise_sweep()` 改调它 —— 此前它**自己又抄了一遍**精确匹配(不剥后缀)⇒ **同一份 `goal.json` 两条路两个答案**。⛔ 判「目标状态」一律问代码(`--check-status`/`goal_life_of()`),⛔ 不许肉眼读原文比对。⚠️ 端到端实测坐实**夹具坑**:合成区只复制配置字节、不改 `workspace` 字段 ⇒ 钩子读的是**真区心跳** ⇒ 正确地"在位沉默",而我差点误判成"钩子失效"(P0-53)。 🔴 起不来先报错这条红线已落进 T 表 §1.6(用户原话「必须首先启动好在执行」)+ **`supervise-ensure-hook.py` 两个真缺陷已修并变异验证报红**:① 工作区原先只读 `DSH_WS_ROOT`(宿主 env 三级全空 ⇒ **钩子长期空转**)② `env=dict(os.environ)` 对 `exec_module` 里的 `load_cfg()` **无效** ⇒ 会验到别的区。⛔ 教训=**「零输出」既可能是"正确沉默"也可能是"根本没看见"⇒ 必须造合成区做反向对照**。 🔴 10-04 17:3x · **文档索引已建**:`references/01-文档索引.md`(干什么事→看哪篇 + **文档四条规则**:分类索引/结论在最前/历史倒排·新的在前/单条 ≤6 KB)+ SKILL.md 第一屏挂「改机制前必读三篇」(⛔ 只写进工作区日志的规矩=没立:10-03 立的「⛔ 写会怎样前先取证」10-04 复发)。 🔴 **本行是「现行口径台账」,⛔ 不是变更日记**:只记**现行结论**,实体与来路在 `references/`(下面每条都给指向)。⛔ **不再在这里堆叠「本条为准」式的旧口径**(那会让同一件事在两处各存一份、改一处忘另一处就打架)。 -· **常驻形态(2026-10-03 定案)**:每个工作区的常驻**由它自己的主会话起**(主会话开工第0 步:确认 pid 活 ∧ 心跳 <90 s);看板**全平台只保留一份**,其它区用 `peer_workspaces` 并列看。→ `architecture.md`《运行形态》+`pitfalls.md` **P0-41**(载体与三条封死路)。 -· **常驻存活唯一机读判据**:`pid 活 ∧ 心跳新鲜(<90 s)`—— ⛔ 别看退役旧戳。→ `pitfalls.md`。 -· **看板 tab 跨工作区并列**:一样数据源跟着格走(⛔ 只换标题不换数据源 ⇒ 看板在说假话)。→ `pitfalls.md` **P0-40**。 -· **改看板要不要重启?四类答案**(读前部的真相)。→ `pitfalls.md` **P0-38**。 -· **钩子超时是「拦截」不是「变慢」**:会报阻塞、不会只慢。→ `pitfalls.md`。 -· **开工第 0 步:会话机制体检**(不是规划)**—— 用户原话「不是规划 是 规则」。→ `references/collab.md`。 -· **诊断口径**:删看板里「负责类别:—」那行(它会说假话)、会话类别与主体的两轴消歧。→ `references/collab-detail.md`。 -· **看板标签用「简称」**:简称只是压缩版面,⛔ 不是又多了角色。→ `collab-detail.md`。 -· **常驻被杀的真因结案**:「释放锁」≠「删文件」(**P0-6**);载体与长期在线→ `references/supervise-persistence.md`。 -· **投赴与队列投递**:「投递」整套已真删(2026-10-03,用户原话「没用了就删除」);实际机制=**常驻接收(`--report` 写台账)+处理(建检查排期)**,⛔没有「推送」环节。→ `pitfalls.md`。 -· 🔴🔴 **术语统一**(用户「语言全部统一」)——**同一件事只许有一个词,现行以第三代为准**: +last_change: |- + 2026-10-05 10:5x · 🔴🔴 **`lifecycle` 判定收敛为「单一事实源」**:抽 `goal_life_of(root)`(剥全角/半角括号后缀 + 认不出时写日志),`goal_life()` 降为薄封装,`peer_supervise_sweep()` 改调它 —— 此前它**自己又抄了一遍**精确匹配(不剥后缀)⇒ **同一份 `goal.json` 两条路两个答案**。⛔ 判「目标状态」一律问代码(`--check-status`/`goal_life_of()`),⛔ 不许肉眼读原文比对。⚠️ 端到端实测坐实**夹具坑**:合成区只复制配置字节、不改 `workspace` 字段 ⇒ 钩子读的是**真区心跳** ⇒ 正确地"在位沉默",而我差点误判成"钩子失效"(P0-53)。 🔴 起不来先报错这条红线已落进 T 表 §1.6(用户原话「必须首先启动好在执行」)+ **`supervise-ensure-hook.py` 两个真缺陷已修并变异验证报红**:① 工作区原先只读 `DSH_WS_ROOT`(宿主 env 三级全空 ⇒ **钩子长期空转**)② `env=dict(os.environ)` 对 `exec_module` 里的 `load_cfg()` **无效** ⇒ 会验到别的区。⛔ 教训=**「零输出」既可能是"正确沉默"也可能是"根本没看见"⇒ 必须造合成区做反向对照**。 🔴 10-04 17:3x · **文档索引已建**:`references/01-文档索引.md`(干什么事→看哪篇 + **文档四条规则**:分类索引/结论在最前/历史倒排·新的在前/单条 ≤6 KB)+ SKILL.md 第一屏挂「改机制前必读三篇」(⛔ 只写进工作区日志的规矩=没立:10-03 立的「⛔ 写会怎样前先取证」10-04 复发)。 🔴 **本行是「现行口径台账」,⛔ 不是变更日记**:只记**现行结论**,实体与来路在 `references/`(下面每条都给指向)。⛔ **不再在这里堆叠「本条为准」式的旧口径**(那会让同一件事在两处各存一份、改一处忘另一处就打架)。 + · **常驻形态(2026-10-03 定案)**:每个工作区的常驻**由它自己的主会话起**(主会话开工第0 步:确认 pid 活 ∧ 心跳 <90 s);看板**全平台只保留一份**,其它区用 `peer_workspaces` 并列看。→ `architecture.md`《运行形态》+`pitfalls.md` **P0-41**(载体与三条封死路)。 + · **常驻存活唯一机读判据**:`pid 活 ∧ 心跳新鲜(<90 s)`—— ⛔ 别看退役旧戳。→ `pitfalls.md`。 + · **看板 tab 跨工作区并列**:一样数据源跟着格走(⛔ 只换标题不换数据源 ⇒ 看板在说假话)。→ `pitfalls.md` **P0-40**。 + · **改看板要不要重启?四类答案**(读前部的真相)。→ `pitfalls.md` **P0-38**。 + · **钩子超时是「拦截」不是「变慢」**:会报阻塞、不会只慢。→ `pitfalls.md`。 + · **开工第 0 步:会话机制体检**(不是规划)**—— 用户原话「不是规划 是 规则」。→ `references/collab.md`。 + · **诊断口径**:删看板里「负责类别:—」那行(它会说假话)、会话类别与主体的两轴消歧。→ `references/collab-detail.md`。 + · **看板标签用「简称」**:简称只是压缩版面,⛔ 不是又多了角色。→ `collab-detail.md`。 + · **常驻被杀的真因结案**:「释放锁」≠「删文件」(**P0-6**);载体与长期在线→ `references/supervise-persistence.md`。 + · **投赴与队列投递**:「投递」整套已真删(2026-10-03,用户原话「没用了就删除」);实际机制=**常驻接收(`--report` 写台账)+处理(建检查排期)**,⛔没有「推送」环节。→ `pitfalls.md`。 + · 🔴🔴 **术语统一**(用户「语言全部统一」)——**同一件事只许有一个词,现行以第三代为准**: | 代 | 时间 | 被派的会话 | 常驻程序 | 状态 | |---|---|---|---|---| @@ -38,7 +39,7 @@ last_change: 2026-10-05 10:5x · 🔴🔴 **`lifecycle` 判定收敛为「单一 🔴 **改名落地位置**:发源地 `collabd.py::_gap_plan()` 的 `_zh = {"worker": "执行"}`(**唯一出处**)+ 文首提示词模板 9 处 + 本文件现行规范句。 🔴 **待办(未做)**:一/二代旧词在包内仍有 ~174 处(`collabd.py` 37、`board.py` 27、`board.html` 28、`selftest.py` 22、`goalctl.py` 15…)。 ⛔ **改名不能盲替换**,先分三类:① 注释/文档 ⇒ 可直接改;② `selftest.py` 的 `@case` 标题 ⇒ 改了会断 `-k` 用例引用;③ 看板显示文案 ⇒ 改了用户可见,且可能有字面判据(`board.py:191` 那条就是防两处漂移的)。→ 待办清单 `references/manifest.md`。 -· **本包自身**:`install.py`(干跑/安装/校验)+`references/manifest.md`(清单);⛔ 包外**不应**有第二套会话机制代码。 + · **本包自身**:`install.py`(干跑/安装/校验)+`references/manifest.md`(清单);⛔ 包外**不应**有第二套会话机制代码。 agent_created: true ---