Commit Graph
39 Commits
Author SHA1 Message Date
admin 46bee95f2b B 方案补落:§5.5.2 判据订正回填 + 供给块三处(能力边界/九档/证据缺口)+ 清一处重复实证
背景:用户称「另一个会话已完成 B 方案」,核实现场不符 —— 全局仓 HEAD 仍是 237a09a(22:29),
两个文件 mtime 停在 22:21,远端 fetch 后无新提交,工作区也无相关未提交改动 ⇒ B 方案实际未落地,本提交补做。

- layouts-tooling.md §5.5.2:标题回填为「导航栏的判据是『名字常驻可读』,不是『栏有多宽』(2026-10-08 订正)」,
  回填「订正原因」段(手段/目的之辨 + tiaoyue 源站实测值 + 反向事故);清掉合并留下的重复「实证:」行
- stage-delivery/SKILL.md 供给块三处回填:
  ① 自带样式库的**能力边界**(实测只到调色板级,几何与版式不在包内;⛔ 别把「供给在位」读成「有设计系统了」)
  ② 工具型页面版式走 layouts-tooling §0 的**九档**(含 2026-10-08 新增「导航型(外壳)」一档 = §4.9)
  ③ 四项无供给来源的判据必须**逐项落进 3d 作为证据缺口**(「提一句」不算完,判据没来源 ≠ 可以不做结论)
- 自查:新增句里曾顺手列出那 8 个骨架名,撞上「名单与『为什么不能套』只许在 layouts-tooling 开头写一次」
  的复述禁令 ⇒ 已改为不复述,逐条重跑闸门确认该位置消失

⚠️ 闸门现状:通过 2048 | 失败 12 | 提示 27。这 12 条**不是本提交引入**(第八轮收口时为 0 失败),
全部落在另一会话「说人话合并/供给块重构」那批提交的作业面上,待其收口;本提交自身零新增 FAIL。
2026-10-08 22:37:53 +08:00
admin 237a09a5b0 修:draw-ui / oil-motion 原被当子模块指针收录 ⇒ 改为正常文件入库(两份内容原先对别人是空的)
一、问题(本轮实测)
`draw-ui` 与 `oil-motion` 目录里**各自带一个内嵌 `.git`** ⇒ 上一次提交把它们记成了 **gitlink(子模块指针)**
⇒ 仓库里只存了一个不属于任何远端的 commit id,**别人克隆下来这两份是空的** ✗(`git status` 显示 ` m draw-ui` / ` m oil-motion` = 子模块内容有改动)。

二、处置(可回退)
· 把两处的 `.git` **挪走**(⛔ 不是删除)⇒ `归档/内嵌git-20261008/{draw-ui,oil-motion}.git`;
· `git rm --cached` 掉那两个 gitlink,再 `git add` 两个目录 ⇒ **按正常文件入库**(内容才真的进仓库)。

三、副作用(如实记)
挪走 `.git` 后,这两个技能**不能再原地 `git pull` 取上游更新**(要更新得重新拉一份覆盖);
如需恢复其本地仓库,把 `归档/内嵌git-20261008/` 里的 `.git` 挪回原处即可。
2026-10-08 22:29:52 +08:00
admin e03465c398 按用户令提交:把此前未纳管的 9 个技能目录一并入库
用户令逐字:「E:/ProgramData/.workbuddy/skills  提交仓库是指的这里」——
即本目录就是仓库(2026-10-07 已在本目录建仓,见当日日志 §22),本轮把余下未纳管的 9 个技能一并提交。

本次入库(9 个技能,46 个文件):
1、`AI HOT`
2、`draw-ui`
3、`dsh-diagnose`
4、`dsh-knowledge`
5、`dsh-local-env`
6、`dsh-opensource-release`
7、`dsh-workflow`
8、`oil-motion`
9、`skills-security-check`

提交前核对:
· **凭据类扫描**(`*.env` / `*token*` / `*.key` / `*secret*` / `*.pem`)⇒ **零命中** ✓;
· 体积合计约 20 MB(`draw-ui` 12M + `oil-motion` 6.5M 是大头,形态为配图/素材 ——
  仓库 `.gitignore` 里明写「`assets/*.png` 是内容不是产物」⇒ 属刻意入库);
· 运行产物仍按既定规则排除(`__pycache__` / `logs/` / `tmp/` / `.venv/` / `*.egg-info` / `uv.lock` / `.workbuddy/`)。
2026-10-08 22:29:08 +08:00
admin d26c844f64 对外叫法落定:机制叫「项目机制」,用法「使用项目机制完成目标:XXXX」;角色名不变
一、用户令(逐字)
`后续说 使用项目机制完成目标:XXXX,创建会话还是叫做 执行会话 和 检查会话`
⇒ 口径终于对齐:**「项目机制」= 这套机制的名字**(不是会话名),
  而它建出来的会话**仍叫「执行会话」「检查会话」**(连同「主会话」)—— **⛔ 角色名一律不改**。

二、改法(4 处)
· `SKILL.md` H1 后新增「**对外叫法**」块,逐字记下用户原话,并写清:
  **项目机制 = 机制的名字;执行会话/检查会话 = 会话的名字**,两者⛔ 别混。
· 第 0 步触发句置顶加 **`使用项目机制完成目标:XXXX`**(标注 2026-10-08 用户令的现行写法)。
· `skill-load-guard.py` 词表加「项目机制」族(`使用项目机制`/`项目机制完成`/`项目机制`),
  ⛔ **旧词一个不删**、⛔ **角色名不加进词表**(它不变)。
  复核:`使用项目机制完成目标:XXXX` 命中 `['使用项目机制','项目机制完成','项目机制']` ✓;
  旧写法 `使用执行会话完成 X 目标` 仍命中 ✓;`按决策方法处理` 仍命中 ✓。

三、与上一轮的关系
上一轮我按「执行会话(协作会话)改为 项目会话」把目标词改错了(已全量撤回,见 `90e892e`);
本轮按用户更正后的**正确目标词「项目机制」**落地,且**不再动角色名**。

四、验收
selftest.py rc=0 PASS 106 / FAIL 0;manifest 76 份、语法失败 0。
2026-10-08 22:25:02 +08:00
admin 805f1ba2d7 对外叫法落定:机制叫「项目机制」,用法「使用项目机制完成目标:XXXX」;角色名不变
一、用户令(逐字)
`后续说 使用项目机制完成目标:XXXX,创建会话还是叫做 执行会话 和 检查会话`
⇒ 口径终于对齐:**「项目机制」= 这套机制的名字**(不是会话名),
  而它建出来的会话**仍叫「执行会话」「检查会话」**(连同「主会话」)—— **⛔ 角色名一律不改**。

二、改法(4 处)
· `SKILL.md` H1 后新增「**对外叫法**」块,逐字记下用户原话,并写清:
  **项目机制 = 机制的名字;执行会话/检查会话 = 会话的名字**,两者⛔ 别混。
· 第 0 步触发句置顶加 **`使用项目机制完成目标:XXXX`**(标注 2026-10-08 用户令的现行写法)。
· `skill-load-guard.py` 词表加「项目机制」族(`使用项目机制`/`项目机制完成`/`项目机制`),
  ⛔ **旧词一个不删**、⛔ **角色名不加进词表**(它不变)。
  复核:`使用项目机制完成目标:XXXX` 命中 `['使用项目机制','项目机制完成','项目机制']` ✓;
  旧写法 `使用执行会话完成 X 目标` 仍命中 ✓;`按决策方法处理` 仍命中 ✓。

三、与上一轮的关系
上一轮我按「执行会话(协作会话)改为 项目会话」把目标词改错了(已全量撤回,见 `90e892e`);
本轮按用户更正后的**正确目标词「项目机制」**落地,且**不再动角色名**。

四、验收
selftest.py rc=0 PASS 106 / FAIL 0;manifest 76 份、语法失败 0。
2026-10-08 22:24:30 +08:00
admin 90e892ea2c 撤销误用的「项目会话」更名 + 说人话新稿按**合并**落地(141 处措辞替换)
一、用户令(逐字)
1. `1、A方案`
2. `执行会话没问题 。是之前的说法有问题:应该叫 项目机制 不叫 项目会话`

二、🔴 先撤回上一轮的错误更名(用户更正了目标词)
上一轮我按「执行会话(协作会话)改为 项目会话」把术语改成了**项目会话** ⇒ 本轮用户明确:
**「执行会话没问题」**、要叫的是「**项目机制**」、**⛔ 不是「项目会话」**。
⇒ 已**全量撤回**(6 处):`SKILL.md` 的术语更名口径块/三类会话表那行/第 0 步触发句插入,
以及 `skill-load-guard.py` 词表里新增的"项目会话族"。
⚠️ 复核时看到的另外 4 处「项目会话」是**巧合的普通词组**(「本项目会话共 N 个」「不算本项目会话」),
   ⛔ 不是更名产物 ⇒ 未动。
🔴 **教训**:改名属"影响面变更"的**目标词**,一次说错就要全量撤回 —— 所以我这轮**没有再自行猜**(见待拍板项)。

三、A 方案:7 份按「**合并**」落地(不是覆盖)
· 规则(保守):只应用**两侧都 ≤8 行、且在现文件里唯一**的"措辞替换";**更大的块一律保留现文件原样**
  (那些块是别的会话今天加的新内容,例如 `stage-delivery/SKILL.md` 里 106 行的增量)。
· 结果:7 份共应用 **141 处**措辞替换(9/6/17/12/27/10/60),逐份有残留大块未动(已列出)。
· **改前备份** ⇒ `待清理/技能包-说人话合并前备份-20261008/`(7 份,可回退)。
· ⚠️ 加上上一轮直落的 9 份,A 方案的 16 份**全部处理完毕**:9 份直落(差异只在措辞)+ 7 份按合并(保留新内容)。

四、验收
selftest.py rc=0 PASS 106 / FAIL 0;manifest 76 份、语法失败 0。
2026-10-08 22:23:09 +08:00
admin 1d7d31a529 撤销误用的「项目会话」更名 + 说人话新稿按**合并**落地(141 处措辞替换)
一、用户令(逐字)
1. `1、A方案`
2. `执行会话没问题 。是之前的说法有问题:应该叫 项目机制 不叫 项目会话`

二、🔴 先撤回上一轮的错误更名(用户更正了目标词)
上一轮我按「执行会话(协作会话)改为 项目会话」把术语改成了**项目会话** ⇒ 本轮用户明确:
**「执行会话没问题」**、要叫的是「**项目机制**」、**⛔ 不是「项目会话」**。
⇒ 已**全量撤回**(6 处):`SKILL.md` 的术语更名口径块/三类会话表那行/第 0 步触发句插入,
以及 `skill-load-guard.py` 词表里新增的"项目会话族"。
⚠️ 复核时看到的另外 4 处「项目会话」是**巧合的普通词组**(「本项目会话共 N 个」「不算本项目会话」),
   ⛔ 不是更名产物 ⇒ 未动。
🔴 **教训**:改名属"影响面变更"的**目标词**,一次说错就要全量撤回 —— 所以我这轮**没有再自行猜**(见待拍板项)。

三、A 方案:7 份按「**合并**」落地(不是覆盖)
· 规则(保守):只应用**两侧都 ≤8 行、且在现文件里唯一**的"措辞替换";**更大的块一律保留现文件原样**
  (那些块是别的会话今天加的新内容,例如 `stage-delivery/SKILL.md` 里 106 行的增量)。
· 结果:7 份共应用 **141 处**措辞替换(9/6/17/12/27/10/60),逐份有残留大块未动(已列出)。
· **改前备份** ⇒ `待清理/技能包-说人话合并前备份-20261008/`(7 份,可回退)。
· ⚠️ 加上上一轮直落的 9 份,A 方案的 16 份**全部处理完毕**:9 份直落(差异只在措辞)+ 7 份按合并(保留新内容)。

四、验收
selftest.py rc=0 PASS 106 / FAIL 0;manifest 76 份、语法失败 0。
2026-10-08 22:22:38 +08:00
admin 44d42b0943 browser-harness:补两条浏览器复用纪律(用户当场点破)+ 入库积压的「调 AI 工具提问方法」
- 🔴 先探测、能复用就复用:动手第一件事查 9223 上有没有已在跑的实例,
  有就直接连(netstat / curl /json/version 两种探法),⛔ 不再起第二个。
  专治「为了量一次尺寸就另起一个 headless 实例」这类小活
  (用户原话:「为什么要重新开浏览器,先检查之前是否开过浏览能否复用」)
- 🔴 一个页面只开一个标签:同一页面全程一个标签,换路由改 hash、换视口走 Emulation,
  只有并排对比两个不同页面才开第二个、用完立刻关;收工前 list_tabs() 复核,
  不给自己留尾巴、也不关别人的页
  (用户原话:「后续调试网页 一个页面开一个标签就行了不要反复开」)
- ⛔ 别自建取数通道:要 DOM 数值就用 js(...),别为「量一个高度」另写脚本去起 Chrome

同文件另有 2026-10-07 定案的「用 browser-harness 调 AI 工具(ChatGPT 等)的提问方法」一节,
一直是未提交状态,随本次一并入库(常驻后台任务守端口、独立实例 9223、profile 复用保登录态)。
2026-10-08 22:22:01 +08:00
admin 7a476f9400 术语更名第一步:执行会话/任务会话 ⇒ 项目会话(口径块 + 触发词表)+ 落地 9 份"说人话"新稿
一、用户令(逐字)
1. `1、A 方案`
2. `把会话技能中 执行会话(协作会话)改为 项目会话 # 用法改为输入 使用项目会话完成目标:XXXXX`

二、A 方案:只落"说人话"新稿 —— ⚠️ 实测**只能落 9 份**,7 份必须合并
· 16 份新稿(`contentm_agent` 那条目标产出)逐份比对现文件:**9 份差异只在措辞**(0~2 行)⇒ ✅ 已落地,
  逐份 md5 与稿子一致;**原件已备份**到 `待清理/技能包-说人话落地前备份-20261008/`。
· 🔴 **7 份现文件含稿子里没有的内容**(最多的少 106 行!)—— 且 `stage-delivery/SKILL.md`、
  `execution-runbook.md`、`SKILL.md` 是**今天 15:28/15:29 刚被别的会话改过** ⇒ 直接覆盖会**丢掉今天的新内容**。
  ⇒ 按「改技能包前先看别人在途改动、⛔ 别硬覆盖」的规定**没动这 7 份**,留待合并(见回复待拍板项)。

三、术语更名(先落低风险那一半,让新用法今天可用)
· `SKILL.md` 第一屏加**术语更名口径块**:**项目会话(现行)= 任务会话(旧称)= 执行会话/协作会话(更旧称)**,
  新文字一律用「项目会话」;⛔ 三个词的旧正文**按本块读**(同 10-02 那次的做法)。
· 三类会话表里那一行改为「**项目会话**(旧称任务会话/执行会话)」。
· 第 0 步触发句加 **`使用项目会话完成目标:XXXXX`**(用户口径的现行写法)。
· `skill-load-guard.py` 的词表**加**项目会话族(`使用项目会话`/`项目会话完成`/`项目会话`/`创建项目会话`/`派项目会话`),
  ⛔ **旧词一个不删**(用户与新会话都可能用旧词,收窄词表=把已授权的触发句漏掉,本项目栽过)。
  复核:`使用项目会话完成目标:XXXXX` 命中 `['使用项目会话','项目会话完成']` ✓;`用执行会话完成 X` 仍命中 ✓。
· 🔴 **机器前缀 `[执行]` 暂不变** —— 它是角色解析与看板的键(`parse_session_name`/`board.py::_role_of_title`/
  在跑的排期名),属影响面变更,**等用户拍板**。
· ⚠️ **全量更名尚未做完**:实测 **416 处 / 22 个文件**(`collabd.py` 71 / `selftest.py` 63 / `SKILL.md` 50 /
  `board.html` 46 / `pitfalls.md` 36 / `board.py` 33 …)⇒ 按机制自己的三类规矩(注释文档 / `@case` 标题 / 看板文案)逐步收尾。

四、验收
selftest.py rc=0 PASS 106 / FAIL 0;manifest 76 份、语法失败 0。
2026-10-08 22:11:35 +08:00
admin 1ca0a637a6 术语更名第一步:执行会话/任务会话 ⇒ 项目会话(口径块 + 触发词表)+ 落地 9 份"说人话"新稿
一、用户令(逐字)
1. `1、A 方案`
2. `把会话技能中 执行会话(协作会话)改为 项目会话 # 用法改为输入 使用项目会话完成目标:XXXXX`

二、A 方案:只落"说人话"新稿 —— ⚠️ 实测**只能落 9 份**,7 份必须合并
· 16 份新稿(`contentm_agent` 那条目标产出)逐份比对现文件:**9 份差异只在措辞**(0~2 行)⇒ ✅ 已落地,
  逐份 md5 与稿子一致;**原件已备份**到 `待清理/技能包-说人话落地前备份-20261008/`。
· 🔴 **7 份现文件含稿子里没有的内容**(最多的少 106 行!)—— 且 `stage-delivery/SKILL.md`、
  `execution-runbook.md`、`SKILL.md` 是**今天 15:28/15:29 刚被别的会话改过** ⇒ 直接覆盖会**丢掉今天的新内容**。
  ⇒ 按「改技能包前先看别人在途改动、⛔ 别硬覆盖」的规定**没动这 7 份**,留待合并(见回复待拍板项)。

三、术语更名(先落低风险那一半,让新用法今天可用)
· `SKILL.md` 第一屏加**术语更名口径块**:**项目会话(现行)= 任务会话(旧称)= 执行会话/协作会话(更旧称)**,
  新文字一律用「项目会话」;⛔ 三个词的旧正文**按本块读**(同 10-02 那次的做法)。
· 三类会话表里那一行改为「**项目会话**(旧称任务会话/执行会话)」。
· 第 0 步触发句加 **`使用项目会话完成目标:XXXXX`**(用户口径的现行写法)。
· `skill-load-guard.py` 的词表**加**项目会话族(`使用项目会话`/`项目会话完成`/`项目会话`/`创建项目会话`/`派项目会话`),
  ⛔ **旧词一个不删**(用户与新会话都可能用旧词,收窄词表=把已授权的触发句漏掉,本项目栽过)。
  复核:`使用项目会话完成目标:XXXXX` 命中 `['使用项目会话','项目会话完成']` ✓;`用执行会话完成 X` 仍命中 ✓。
· 🔴 **机器前缀 `[执行]` 暂不变** —— 它是角色解析与看板的键(`parse_session_name`/`board.py::_role_of_title`/
  在跑的排期名),属影响面变更,**等用户拍板**。
· ⚠️ **全量更名尚未做完**:实测 **416 处 / 22 个文件**(`collabd.py` 71 / `selftest.py` 63 / `SKILL.md` 50 /
  `board.html` 46 / `pitfalls.md` 36 / `board.py` 33 …)⇒ 按机制自己的三类规矩(注释文档 / `@case` 标题 / 看板文案)逐步收尾。

四、验收
selftest.py rc=0 PASS 106 / FAIL 0;manifest 76 份、语法失败 0。
2026-10-08 22:10:12 +08:00
admin a7bf194ee7 manifest:移出两个 .bak 备份后重算(76 份;包体卫生那条判据恢复绿) 2026-10-08 08:50:36 +08:00
admin 5ba958f7fb 关停程序改为「传哪些就关哪些」:--ws 支持多区 + 认短名;一键开关加"只停指定"
一、用户令(逐字)
「把关停程序改为 传参数的形式,传那些就关那些,每次都出问题这里」

二、根因(两处,都不在"能不能停"上)
1. 🔴 **双击入口只有"全部停止"**:`会话机制-一键开关.bat`(工作区根 + 桌面各一份)原先只有
   1 全部启动/2 全部停止/3 看状态 ⇒ **没有任何"只停某些"的口子** ⇒ 每次关停都会**连全局看板、
   连别的区一起停** ⇒ 这正是用户说的「每次都出问题这里」。
2. 🔴 **`--ws` 实测只认全路径**:原判据拿参数与 `E:/…/vibe-product` 整串比 ⇒ 传短名 `vibe-product`
   **一个都匹配不上**,直接报「不在管辖名单里」并停手(用户要"传哪些"时当然写短名)。
3. ⚠️ 顺带核实:管辖名单里的 `contentm_agent` **不是陈旧项** —— 该工作区已于 2026-10-08
   由 `content_marketing_agent` 改名为 `contentm_agent`(旧目录留 `.RETIRED-20261008`)⇒ ⛔ 没动它。

三、改法
1. `collabctl.py`:
   · `--ws` 支持**多个**(`--ws a,b`,或多次 `--ws a --ws b`);
   · 区名匹配改为**全路径或短名都认**(`_k1` 全路径/`_k2` 末段),并对不在名单里的项**逐条提示跳过**;
   · `cmd_off` 头两行改成**先报作用面**(「只关这些 …」/「全部(含全局看板)」),
     收尾文案由「一键全关」改为「关停」,避免与"只关一部分"混淆。
2. `会话机制-一键开关.bat`(**两份同步**:工作区根 + 桌面):
   · 菜单加 `4 = 只停指定工作区(可多个用逗号分隔,⛔ 不动看板与其它区)`;
   · 新增**免交互参数模式**:`会话机制-一键开关.bat off vibe-product,contentm_agent`(⛔ 不动看板)。

四、验证(只读)
· `status --ws "vibe-product,contentm_agent"` ⇒ 作用面**只收敛到这两个**(看板段为空=未触碰)✓;
· `status --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 旧的全路径写法**仍可用** ✓;
· `selftest.py` rc=0 **PASS 106 / FAIL 0**;manifest 76 份、语法失败 0。
· ⛔ 不需要分发/重启(`collabctl.py` 由 `.bat` 与计划任务直读技能目录)。
2026-10-08 08:48:29 +08:00
admin 8a69dced90 关停程序改为「传哪些就关哪些」:--ws 支持多区 + 认短名;一键开关加"只停指定"
一、用户令(逐字)
「把关停程序改为 传参数的形式,传那些就关那些,每次都出问题这里」

二、根因(两处,都不在"能不能停"上)
1. 🔴 **双击入口只有"全部停止"**:`会话机制-一键开关.bat`(工作区根 + 桌面各一份)原先只有
   1 全部启动/2 全部停止/3 看状态 ⇒ **没有任何"只停某些"的口子** ⇒ 每次关停都会**连全局看板、
   连别的区一起停** ⇒ 这正是用户说的「每次都出问题这里」。
2. 🔴 **`--ws` 实测只认全路径**:原判据拿参数与 `E:/…/vibe-product` 整串比 ⇒ 传短名 `vibe-product`
   **一个都匹配不上**,直接报「不在管辖名单里」并停手(用户要"传哪些"时当然写短名)。
3. ⚠️ 顺带核实:管辖名单里的 `contentm_agent` **不是陈旧项** —— 该工作区已于 2026-10-08
   由 `content_marketing_agent` 改名为 `contentm_agent`(旧目录留 `.RETIRED-20261008`)⇒ ⛔ 没动它。

三、改法
1. `collabctl.py`:
   · `--ws` 支持**多个**(`--ws a,b`,或多次 `--ws a --ws b`);
   · 区名匹配改为**全路径或短名都认**(`_k1` 全路径/`_k2` 末段),并对不在名单里的项**逐条提示跳过**;
   · `cmd_off` 头两行改成**先报作用面**(「只关这些 …」/「全部(含全局看板)」),
     收尾文案由「一键全关」改为「关停」,避免与"只关一部分"混淆。
2. `会话机制-一键开关.bat`(**两份同步**:工作区根 + 桌面):
   · 菜单加 `4 = 只停指定工作区(可多个用逗号分隔,⛔ 不动看板与其它区)`;
   · 新增**免交互参数模式**:`会话机制-一键开关.bat off vibe-product,contentm_agent`(⛔ 不动看板)。

四、验证(只读)
· `status --ws "vibe-product,contentm_agent"` ⇒ 作用面**只收敛到这两个**(看板段为空=未触碰)✓;
· `status --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 旧的全路径写法**仍可用** ✓;
· `selftest.py` rc=0 **PASS 106 / FAIL 0**;manifest 76 份、语法失败 0。
· ⛔ 不需要分发/重启(`collabctl.py` 由 `.bat` 与计划任务直读技能目录)。
2026-10-08 08:47:55 +08:00
admin fca5a084ce 检查程序静默阈值:6 → 3 分钟(用户当日第三次调整)
用户令逐字:「把 检查程序等待时间 改为3分钟,现在应该是6分钟」。
调整轨迹:**20 → 10 → 6 → 3**(分别是当日 09:xx / 18:25 / 本次 02:4x 三次用户指令)。

改法(四处同源,⛔ 少改一处就会出现「判据说 3、写给检查会话的文案说 6」):
1. 常量 `CHECK_IDLE_MIN`:6 → 3;
2. `CHECK_PROMPT_GOAL` 里写给检查会话看的文案:`已静默 ≥6 分钟` → `≥3 分钟`;
3. 注释/文档:`# 【目标检查】` 那行、`_last_progress_ts` docstring、
   `references/supervise-persistence.md` §六、`selftest.py` 的口径说明。
⚠️ 另有两处「留痕注释」(写"两度拍板"、"由 20 改 10")本轮**没能改到** ——
   实测那两行的当前文本与上一轮 grep 到的已不一致,怀疑**另一个会话正在改同一批文件**
   (该区当前目标就叫「技能包规则文件已全量过说人话」)⇒ ⛔ 不硬改(避免与它打架),如实留待下轮核对。

判据:`selftest.py::t_check_idle_min` 守的是「常量/闸门/试算/文案四处同源」(⛔ 不锁具体数值)
⇒ 本次改动后仍绿,等于自动证明四处都已是 3。

验收:selftest.py rc=0 PASS 106 / FAIL 0;manifest 76 份、语法失败 0。
2026-10-08 02:42:13 +08:00
admin 2ed7766007 说人话落地:加每轮注入 + 英文硬核版整包纳入 + 第①段补写作口径
一、用户令(逐字)
「humanizer(英文那份) 也要纳入」「重点就是做到说人话就行了」「但是 content_marketing_agent 的会话生成的文档并没有说人话,还是我手动要求的」

二、根因(两处,都不是"没整合")
· **语气那一档只有指针、没有注入** ⇒ 实测没被读到(`SKILL.md` 必读表标题原写「三篇」而表里有 4 行,
  第 4 项=作业规矩整包,被顶在"必读"之外;已订正为「四类」)。
· **写文档的执行会话那条链上一句写作口径都没有** —— 产品规划技能里「反 AI 味」只出现在**第③段界面**
  (且指的是界面不是文字),**第①段出文档那节零口径** ⇒ 产物自然是 AI 味。

三、改法
1. **每轮注入**(照排版那条现成机制,⛔ 不改 `main()`):
   · `04-去AI味与说话方式.md` 顶部加 `<!-- VOICE-CORE -->` 紧凑块(≈450 字符:核心原则/四种高频 AI 味/交付前三问);
   · `reply-style-guard.py` 里**原地重定义** `_core`(`_core_reply = _core` 后用新 `_core` 包住它并追加语气块)
     ⇒ 注入正文自动多一段,排版那条**不受影响**。
2. **产出侧补口径**:`product-planning` 第①段(stage-discovery)在 1b 表后新增「写作口径」块 ——
   落笔前读 `humanizer-zh` 或本包 04,**定稿前过「交付前快速清单」**,并列出六种禁用 AI 味;**适用本段全部五份产出**。
3. **英文硬核版整包纳入**:原独立技能 `humanizer` **逐字**搬入本包 `references/humanizer-en/`(6 文件、
   md5 逐个一致):55 个模式 + 5 种语气档 + 0–100 AI 痕迹打分 + `--file` 就地改;
   在 `04 §9` 关系表与 `SKILL.md` 对应物段登记(冲突以本包会话场景版为先)。

四、验收
· 新增 `selftest.py::t_voice_core`(4 项);全量 **PASS 106 / FAIL 0**;manifest 70 → **76** 份、语法失败 0。
· 端到端喂真钩子:注入正文已含说人话块、排版块仍在。
· ⛔ 改的是钩子与技能目录(宿主直读)⇒ **不需要分发/重启**。
2026-10-07 22:00:13 +08:00
admin 7ec94b63d3 必读表标题订正:「先看这三篇」→「先看这四类」(第 4 项被顶在"三篇"之外、常被跳过)
起因(用户问「说人话技能 加载会话基础规则中了吗」)⇒ 查证发现:
`SKILL.md` 第一屏那张必读表**标题写着「先看这三篇」,而表里实际有 4 行** ——
第 4 项就是 `references/作业规矩/`(一整包,`04-去AI味与说话方式.md` 说话方式/语气就在里面)
⇒ 标题把读者框在"前三篇"里,**第 4 项等于被跳过** ⇒ 语气那一档自然进不了上下文。

改法:
· 标题 → 「先看这**四类**」;
· 表后补一句点明:**第 4 项是一整包(四份)**,其中 `04-去AI味与说话方式.md` 管**语气**、
  `03-回复排版-核心块.md` 管**结构**(那一份的核心块由排版钩子**每轮自动注入**);
· 留痕写上这次是哪个问题查出来的。

⚠️ 本轮**只订正"读得到"这一层**:说话方式目前仍属**按需读**(04 里没有任何注入标记,钩子也不读它)
—— 要不要照 `03` 的现成机制把它也做成**每轮注入**,是另一件事(涉上下文成本),已列为待拍板项。

验收:selftest.py rc=0 PASS 105 / FAIL 0;manifest 70 份、语法失败 0。
2026-10-07 21:34:16 +08:00
admin 537f15f119 必读表标题订正:「先看这三篇」→「先看这四类」(第 4 项被顶在"三篇"之外、常被跳过)
起因(用户问「说人话技能 加载会话基础规则中了吗」)⇒ 查证发现:
`SKILL.md` 第一屏那张必读表**标题写着「先看这三篇」,而表里实际有 4 行** ——
第 4 项就是 `references/作业规矩/`(一整包,`04-去AI味与说话方式.md` 说话方式/语气就在里面)
⇒ 标题把读者框在"前三篇"里,**第 4 项等于被跳过** ⇒ 语气那一档自然进不了上下文。

改法:
· 标题 → 「先看这**四类**」;
· 表后补一句点明:**第 4 项是一整包(四份)**,其中 `04-去AI味与说话方式.md` 管**语气**、
  `03-回复排版-核心块.md` 管**结构**(那一份的核心块由排版钩子**每轮自动注入**);
· 留痕写上这次是哪个问题查出来的。

⚠️ 本轮**只订正"读得到"这一层**:说话方式目前仍属**按需读**(04 里没有任何注入标记,钩子也不读它)
—— 要不要照 `03` 的现成机制把它也做成**每轮注入**,是另一件事(涉上下文成本),已列为待拍板项。

验收:selftest.py rc=0 PASS 105 / FAIL 0;manifest 70 份、语法失败 0。
2026-10-07 21:33:44 +08:00
admin e378db6af9 检查任务要「确认并写回验收」(用户令:不是拦截)+ 新判据
一、用户令(逐字)
「不是拦截 是检查任务要确认这种情况」—— 否掉了「加闸拦住『验收未过却标已完成』」那条路,
改成把**确认责任**落到检查任务本身。

二、病根(前置排查结论,见当日日志 §24)
· 权威文档(`目标执行状态.md`)写「5 条全过」,而 `goal.json.acceptance_state` 仍是「全未过」
  ⇒ 检查会话按 prompt 指定的**文档**判「做完了」并标了「已完成」⇒ 看板按**机读副本**渲染 ⇒ 显示自相矛盾。
· 检查会话本身**没做错**(prompt 三路取并集里就有验收那一路);断点是
  **它有判验收的职责、却没有写回验收的动作**("有读者、没写手")。
· 次生:副本里写的是「未过」,**不在机制定义的取值域**(`过|…`/`🔴 不过|…`/`待重验(…)`)里
  ⇒ 机器分不出「还没判」与「判了没过」。

三、改法(只动 prompt,⛔ 不加闸、⛔ 不新增占位符)
`CHECK_PROMPT_GOAL` 第三节第 3 条改为「**做完了 ⇒ 先确认并写回验收,再改状态**」:
· 逐条读文档结论 → 与机读副本对一遍 → 不一致**以文档为准、改齐**;
· 写明写回手段=同目录 `goalctl.py declare --kpi "判据A=过|依据;判据B=过|依据"`(⚠️ **按分号切**);
· 要求**写完回读一次**(⛔ 不许「以为写成功了」—— 本项目栽过「命令不存在却 rc=0 静默放行」);
· 要求**规范取值**,⛔ 禁 `未过`/`pass` 这类域外值;
· 确认确实没过 ⇒ 继续派活,⛔ **不许标已完成**。

四、判据
新增 `selftest.py::t_checker_confirms_acceptance`(6 项,源码级):确认职责 + 写回手段 +
分号分隔 + 回读 + 取值域 + 没过不标完成。

验收:selftest.py rc=0 PASS 105 / FAIL 0(改前 104);manifest 70 份、语法失败 0。
2026-10-07 21:07:05 +08:00
admin 976abbd71a 订正两处陈旧表述:agent-operating-rules 已并入删除;补记 humanizer-zh 为可选增强
起因(用户问「说人话技能 有整合到技能中吗」)⇒ 查证时发现会话技能里两处**现行表述**仍指着已删除的东西。

一、`SKILL.md`:「⛔ 已无必需外部依赖」那段的末句写着
   「📌 **那个技能**若同时装着,属可选增强(多了跨项目排版/去 AI 味的完整版),⛔ 不装也能跑」——
   而那个技能(`agent-operating-rules`)**已于 2026-10-06 整包并入本包并删除** ⇒ 照旧句去找必然扑空。
   已订正为:明确指出它已并入删除,并列出本包自带的对应物
   (排版 → `references/03-回复排版-核心块.md`;语气/去 AI 味 → `references/作业规矩/04-去AI味与说话方式.md`)。

二、`references/作业规矩/04-去AI味与说话方式.md` §9「与其他规则的关系」:原来只列了
   「入口 §2 排版契约」「本参考」「协作与提报判据」三项,**没提独立技能 `humanizer-zh`**。
   已补一行:通用版在 `humanizer-zh`(示例更全,19 KB),本包那份是**会话场景加固版**(多 4 节:
   中文会话专属加固 / 交付前清单 / 质量评分 / 完整示例)⇒ 两处同时装着时**以本包为先**;⛔ 不装也能跑。

验收:selftest.py rc=0 PASS 104 / FAIL 0;manifest 70 份、语法失败 0。
2026-10-07 21:04:07 +08:00
admin 4ec25125d1 技能库本目录改建为 git 工作区(用户令「就在这个下面建立 git 推送就行」)
一、做法
把 E:/ProgramData/.workbuddy/skills 本身初始化为仓库(⛔ 不再用外部暂存目录),
远端=[email protected]:admin/workbuddy_skills.git;取回远端历史后只补差异。

二、仓库级配置(含一处**有意偏离**旧仓约定)
· core.autocrlf = **true**(旧仓是 false)。理由:本目录是 **Windows 原生工作区**(文件是 LF/CRLF 混合),
  而仓库里存的是 LF ⇒ 用 false 时 `git status` 报 **196 处"修改"**,实测**全是行尾**;
  改成 true 后降到 **16 处**,剩下的才是真差异。⛔ 否则一次提交会把几百个文件的行尾改掉。
  身份:maogeigei <[email protected]>。

三、本次提交
· `.gitignore` 扩充(按实测盘点补):logs/ · tmp/ · .venv/ · *.egg-info/ · uv.lock · node_modules/ ·
  .workbuddy/ · 四个宿主迁移标记 JSON(宿主每次启动可能重写,⛔ 不是内容)。
· `oil-ui-pro/SKILL.md`:把描述里的「不用于 A/B/C」改成「正向用途 + 一句邻接边界」
  (与 2026-10-07 `rules.md §9`「只写正向范围」同一条口径)。

⛔ 本轮**未纳管**(保持未跟踪,见下一条待拍板):AI HOT · draw-ui · dsh-diagnose · dsh-knowledge ·
  dsh-local-env · dsh-opensource-release · dsh-workflow · oil-motion · skills-security-check(共 9 个目录)。
2026-10-07 20:46:04 +08:00
admin 61962f1726 补入本地今日改动:session-mechanism + product-planning(按用户令改推本仓库)
背景:旧远端 work.alotbuy.com 今天一直连不上(222/22 端口都不通)⇒ 今天本地累积多条提交推不上去;
用户令改推本仓库 [email protected]:admin/workbuddy_skills.git(只推这 5 个技能:
browser-harness / humanizer / humanizer-zh / product-planning / session-mechanism)。

本次改动(对照本机已安装的技能源逐文件 md5 比对得出,⛔ 是「补差异」不是「整体覆盖」):
· session-mechanism:含今天两条钩子改动(派活收工闸、点名加载收工闸)、
  rules.md §9「只写正向范围」、检查程序静默阈值 10→6、检查排期补 workspace_scope(修未分组)、
  以及今天修的三处陈旧指针(旧技能名 dsh-decision / agent-operating-rules 与旧路径编号)。
· product-planning:第③段「随段样式风格库」并入 design-system-tiaoyue、竞品分析方法论重写等。
· humanizer / humanizer-zh:已一致,零改动。
· browser-harness:比对出的 7 个「本地独有」全是**它自己 .gitignore 里就排除的**构建产物
  (src/*.egg-info/ 与 uv.lock)⇒ 按该技能自己的规矩不推(用户口径「不要环境」)。

仓库级配置(与旧仓一致):core.autocrlf=false;身份 maogeigei <[email protected]>。
⚠️ 克隆时仓库默认 autocrlf=true(会把行尾转成 CRLF)⇒ 已改回 false 并重新暂存,
   核对索引 blob 均为 LF、真实差异 23 个(⛔ 不是把几百个文件一起改掉)。
2026-10-07 20:33:49 +08:00
admin 0abd33b3a0 补入 oil-ui-pro(上一提交按授权清空时移出,本轮按用户要求加回) 2026-10-07 16:06:27 +08:00
admin 777f7fe5d0 重开仓库内容:改推五个技能(browser-harness / humanizer / humanizer-zh / product-planning / session-mechanism)
按授权清空原有内容后重新提交(原 oil-ui-pro 一并移出,可从历史恢复)。
browser-harness 剔除 .venv 等运行环境;根 .gitignore 补记 .venv/ 与 node_modules/。
2026-10-07 16:06:02 +08:00
admin 9a152a1952 加载闸门两处收口:派活族不受冷却 + 冷却跳过留痕(用户问「有什么影响 该如何处理」)
一、影响评估(实测,会话 b232218f)
- 冷却窗口 COOLDOWN=300;旧实现:命中 → 查冷却 → 落在窗口内就 return,**且只在注入成功后才写日志**。
- 后果两条:
  ① 01:32:00 命中后,**01:33:46 那条最明确的触发句**(「每次我说使用执行会话完成目标…」)
     距上次仅 105 s ⇒ **被吞掉,那一轮 AI 收不到任何提醒**;
  ② 被吞掉**连一行痕迹都没有** ⇒ "没命中"与"被吞"在日志上分不出来,排查只能靠状态文件时间戳反推。
- ⚠️ 危害已被 2026-10-07 新增的「派活收工闸」**部分补偿**(待办标记写在冷却之前 ⇒ 不受冷却影响,
  仍会在收工前拦一次);剩下的是"口头提醒缺失"与"日志盲点"。

二、处置(两处,都在 skill-load-guard.py)
1. 抽出共用的 `_is_dispatch()`;冷却旁路改为
   `if _cooling(workdir, sid) and not _is_dispatch(prompt):`
   ⇒ **派活族显式触发句不受冷却**(其余词照旧受)。
2. 被跳过时写一行 `COOL_SKIP sid=… hits=…(冷却中,本轮不注入)` ⇒ 抑制态不再隐身。

三、判据与验证
- 新增 selftest 用例 t_skillguard_cooldown(3 项,**源码级** —— 跑真钩子会动到真工作区的冷却状态,
  ⛔ 不适合进回归套)。
- 另做了一次**行为级**验证(外部脚本,用真作用域内的工作区、测前备份冷却状态、测后还原):
  5/5 通过 —— 非派活首次注入 ✓/非派活冷却中不注入 ✓/**派活族冷却中仍注入 ✓**/
  日志有 COOL_SKIP ✓/日志有 DISPATCH_PENDING ✓。
- ⚠️ 该验证脚本第一版**读日志读错**:`log_before` 是字节数却按字符切片 ⇒ 误判成"日志没写"。
  改成按字节 seek 后全绿(同族坑:本项目已记过"字节 vs 字符")。

验收:selftest.py rc=0 PASS 103 / FAIL 0(改前 102);manifest 70 份、语法失败 0。
2026-10-07 08:15:31 +08:00
admin 1a0cd14c91 排版核心块:明确「当前状态:」是小标题、每件事只写一次(⛔ 不许每条圆点都带前缀)
一、起因(用户点破逐字)
「为什么每句话 前面都要加「当前状态:」,我的记得 应该是
 当前状态:
 段落XXXXX
 段落XXXXX」
⇒ 我把「当前状态」读成了**每条圆点的前缀**,连着好多轮都这么写。

二、根因:注入源那句话本身写得含糊
原句:「每件事先写「当前状态」(**每条一个圆点**,用**一句陈述句**说重点…)」——
「每条一个圆点」是附着在「当前状态」下面的,但读起来也能读成"每条都写当前状态"。
⚠️ 对照:本区 `CODEBUDDY.md` 那条**本来写得很清楚**(「每件事写两段:**当前状态** + **待处理事项**」
+「**当前状态**:每条一个**圆点**」)—— 两份文本不一致,而**每轮注入的是含糊的那份** ⇒ 含糊的那份赢。

三、改法
1. `references/03-回复排版-核心块.md` 的骨架那条重写为三行:
   · 骨架:`# 大类别` → `## 具体事项` → **每件事写两段:`当前状态:` + `待处理事项:`**;
   · 🔴 **这两个小标题各占一行、每件事只写一次**;⛔ **不许在每条圆点前面都加「当前状态:」**;
   · `当前状态:` 下面**每条一个圆点**(`- `)…;`待处理事项:` 下面用序号 `1、2、3、`。
   核心块 1091 → 1287 字符(⛔ 它每轮都注入,已压紧到三行)。
2. 走注入器刷新**本区环境文件**:`apply-reply-rules.py --ws <本区> --apply`
   ⇒ 回读一致 ✅(写前自动备份 `CODEBUDDY.md.bak-replycore-20261007-080319`)。

验收:selftest.py rc=0 PASS 102 / FAIL 0;manifest 70 份、语法失败 0;
`apply-reply-rules --check` 报「一致 ✅」。
2026-10-07 08:05:12 +08:00
admin a3935b5fc5 修「检查会话落到未分组」+ 检查程序静默阈值 20 → 10 分钟
一、检查会话跑到未分组(用户报障逐字)
「vibe-product 的检查会话没有创建到工作区下,跑到未分组的会话中去了」。
根因(实测坐实):collabd.py::create_check_schedule() 的 INSERT **少了 workspace_scope 列**
⇒ 落库 NULL ⇒ 排期触发出来的会话被宿主当**游乐场**建
(sessions 行:is_playground=1 + source_mode='craft' + use_sandbox_cli=0)⇒ 不进工作区分组。
对照读数(同一晚两条排期):会话侧 automation_update 建的是 'workspace' ✓,
机制自建的是 None ❌;近 3 天 59 条排期里只有机制那条是 None。
修法:INSERT 补 workspace_scope 并以 'workspace' 落库。
配套:新增 selftest 用例 t_check_schedule_scope(3 项),含变异对照
(把列删掉 ⇒ 报红;还原 ⇒ 逐字节一致)。

二、检查程序等待时间 20 → 10 分钟(用户令逐字)
「把检查程序的等待时间由 20分钟 改为 10分钟」。
改法:新增常量 CHECK_IDLE_MIN = 10,**闸门与 --dry-run 试算都读它**(原来两处各写死 20);
并同步**写给检查会话看的 prompt 文案**(≥20 → ≥10)与 4 处注释/文档
(references/supervise-persistence.md §六;顺带订正该节「基准取台账 tasks.json 的 mtime」——
与代码不符,实际是「本工作区排期的 updated_at 最大值」)。
配套:新增 selftest 用例 t_check_idle_min(4 项,**不锁数值**、只锁"常量/闸门/试算/文案同源"),
含变异对照(把文案改回 20 ⇒ 报红)。

三、旧数据归位与分发
- 今晚那条歪掉的检查会话已改回工作区档(is_playground 1→0、source_mode craft→work、
  use_sandbox_cli 0→1;排期 workspace_scope → 'workspace');改前原值已备份到
  归档/检查会话归位-20261007/;PRAGMA integrity_check = ok。
- 副本分发:ai1net-dsh-server 与 vibe-product 各 7 个文件;两区常驻已重启
  (判据=心跳 started_h 07:54:35 / 07:54:37,晚于分发时刻 07:54:07)。

验收:selftest.py rc=0 PASS 102 / FAIL 0(改前 99);manifest 70 份、语法失败 0。
2026-10-07 07:55:29 +08:00
admin 9a665039a9 派活触发句收工闸:说了就必须把执行会话拉起来(实测栽过,补机器抓手)
一、起因(用户令逐字)
「重点问题是 会话接收到 调用执行会话完成目标 没有去调用对应技能去执行」。
实测会话 b232218f(vibe-product):用户 01:32:00 / 01:33:46 两次说触发句,
到 01:36:27 才建出排期 —— 中间那一轮 AI 只在回复里解释口径,没拉起执行会话。
根因:机制里**只有 "注入提醒"**,⛔ 没有任何机器抓手检查"到底做没做"。

二、改法(发现 → 拦住,两步)
1. scripts/hooks/skill-load-guard.py:命中**派活族**触发句时写一条待办
   <工作区>/.workbuddy/.dispatch-pending(会话 id / 时间戳 / 命中词)。
   ⚠️ 写在**冷却判定之前** —— 实测 01:33:46 那条最明确的触发句正被 300 s 冷却吞掉,
     写在冷却之后就等于"最该拦的那一条反而没有标记"。
   ⚠️ 比对前**去掉空白**:用户写的是「应该使用 执行会话的技能去完成工作」(中间有空格)。
   ⛔ 不把裸词「执行会话」算进派活族(太宽,讨论机制时也出现)⇒ 误报面保持最小。
2. scripts/hooks/stop-dialog-guard.py:新增收工前闸 —— 同会话 + 超 90 s 宽限 +
   宿主库该区此后**没有**新建排期 ⇒ 返回 {"continue": false} 拦一次,逼它先建排期。
   ⚠️ 必须放在**自作用域判定之前**(那条作用域只认本工作区,而栽的会话在 vibe-product)。
   ⛔ 三条安全底线:① 全程 fail-open(读不到库/解析失败/任何异常 ⇒ 一律放行);
     ② 只拦一次(复用本文件 10 分钟限流);③ 待办 30 分钟过期,⛔ 不长期纠缠。

三、判据(新增自测用例,5 项)
selftest.py::t_dispatch_gate —— 派活句留待办(含带空格写法)/非派活句不留/
超宽限且未建排期则拦/宽限内放行。三条断言都确定性,⛔ 不依赖现网存量。

验收:selftest.py rc=0 PASS 100 / FAIL 0(改前 99);
两组外部变异对照(发现侧 3 项、收工闸 4 项)全过;
另实测"10 分钟限流"有效(同一会话重复构造不再重复拦)。
2026-10-07 01:47:38 +08:00
admin f2691e9368 移入随包子技能 karpathy-output-ladder(全局 skills 里的原件已移出)
一、为什么
- 用户令:把这个技能复制进会话技能「当作子技能」,用法后续再定;
  随后又明确「并从 全局 skills 文件夹中移除」⇒ 全局那份已移出(移进归档,可原样移回)。

二、落在哪、怎么放
- 位置:references/karpathy-output-ladder/(与本包既有的随包子技能同形态:各自带 SKILL.md + 自己的 references/assets)
- 内容:4 个文件(SKILL.md · references/ladder-workflow.md · references/ste100.md · assets/html-template/index.html)
  **逐字复制,一字未改**(md5 与原件逐个核对一致)

三、登记(只做到"找得到",⛔ 不接线)
- references/01-文档索引.md 增一行「要把一个话题讲清楚(文字→图→互动页)」→ karpathy-output-ladder/SKILL.md,
  并在表下写明:**用法尚未接线**,不参与本包的钩子 / 判据 / 自动加载(用户原话「后续再看如何使用」)
- references/manifest.md 随生成器重算:66 → 70 份文件,语法失败 0

验收:selftest.py rc=0 PASS 99 / FAIL 0;全局 skills 顶层已无 karpathy-output-ladder;
会话技能内 4 个文件与原件 md5 逐个一致。
2026-10-07 01:26:47 +08:00
admin 9721876f08 新增两个技能(product-planning / oil-ui-pro)+ 作业规矩交叉引用跟到新落点
一、新增技能
- product-planning(253 文件):四阶段产品方案流水线(调研方案 / 需求结构 / 界面交付 / 说明文档),
  含 references/stage-* 与内置的 diagram-design 子技能、scripts/
- oil-ui-pro(26 文件):UI/UX 设计 · 评审 · 多风格对比,含 assets/style-explorer.html、scripts/shoot.mjs、tests/

二、session-mechanism 收尾(承接 e5dfb6e)
- references/作业规矩/03-多棒接力编排.md、04-去AI味与说话方式.md:交叉引用表里的「参考 01」改为新落点
  (该不该问/结论骨架 → references/02-功能优先协作协议.md;回复排版 → references/03-回复排版-核心块.md)
- references/manifest.md 随生成器重算(含上述两行的 md5 与字节数)

三、入库前检查
- 三个技能内均无令牌 / 私钥 / 密钥赋值;.neodata_token 类落点已由 .gitignore 挡住
- 无运行期产物混入(logs/ · tmp/ · __pycache__ · *.log)
- 暂存 282 个文件 = 279 新增(253 + 26)+ 3 修改
2026-10-07 00:48:07 +08:00
admin e5dfb6e4ef 发布:常驻文档按现行形态重写 + 作业规矩/01 先并后删
一、常驻机制文档 references/supervise-persistence.md(整份重写 410→469 行)
- 照抄段由废弃的 start-supervise.ps1 形态,改为现行形态:
  计划任务 collabd-keepalive-<区>(每 5 分钟)→ pythonw.exe → supervise-launch.py → collabd.py --supervise
- 旧 ps1 形态整体降级为「§四 旧形态留痕」(逐条标 🟠,内容一字未删,供读老日志/老进程用)
- 判据订正:LastTaskResult 在长驻运行中是 267009(旧口径「必须 0」属"跑一次就退"时代,已作废);
  BOM 那条随 ps1 形态一并降为历史;另两条仍有效(CODEBUDDY_CONFIG_DIR 空库 / WorkingDirectory 必须是工作区根)
- 删除 assets/start-supervise.ps1.tpl —— SKILL.md、manifest.md、collabd.py、selftest.py 四处早已按「该模板已删除」口径,本次把磁盘与文档对齐

二、references/作业规矩/01 先并后删(用户选定 A 方案:不丢内容 + 只剩一处)
- 判据类并入 references/02-功能优先协作协议.md:
  §3.2 补「规则冲突裁决顺序」「冲突 ≠ 门禁」;§3.3 补回完整语言转换表(原处"已收敛到通用技能"在并包后成了悬空指针);
  §5.3 铁律由五条补到六条 + 接上配套硬红线「只做正向迭代」;新增 §5.5「提报前必答三问 + 回话前自检」
- 排版类并入 references/03-回复排版-核心块.md 的「完整版」段(十四条反模式 / 骨架路由表 / 文案点名主体 / 文档直入主题)
  该段放在 REPLY-CORE 标记之外 ⇒ 每轮注入块逐字未变(实测仍 1172 字符)
- 删除 references/作业规矩/01-协作与提报用户判据.md,并跟改 6 处引用(SKILL.md 第一屏表、作业规矩/00 索引表与两处指针、
  作业规矩/03-多棒接力编排、00 的 frontmatter 变更记录)——含一处二级指针「见 §6 第 0 条」,已改指 03 完整版段

三、判据与卫生
- pitfalls.md:P0-74 去冗余(7107 → 5982 B,重复叙述合并),「沉淀纪律」由 FAIL 1 转绿
- install.py:manifest_files() 补排 logs/ —— 与它自己「运行日志不入表」的口径一致,否则跑一次钩子表就过期
- .gitignore:补 logs/;撤跟踪 logs/_dr_probe.json(钩子输出转储,全包零引用)
- references/manifest.md 用生成器重算:66 份文件,语法失败 0

验收读数:selftest.py rc=0 PASS 99 / FAIL 0(另 1 条报告型不计入);
session-rules-check.py fail 0 / warn 1("此刻无活会话",正常态)/ ok 13;改动文件行尾全 LF。
2026-10-07 00:32:47 +08:00
admin 9fd120f40b 整合作业规矩:agent-operating-rules 整包并入本技能 references/作业规矩/ 2026-10-06 23:44:16 +08:00
admin 119f0084e2 删尾巴:dsh-decision 整份删除;活指针全部改指本包 2026-10-06 23:21:29 +08:00
admin 93cf1c2b9f 会话机制 02:同步「dsh-decision 那份已删(只留指针)」的说法 2026-10-06 22:49:58 +08:00
admin ea4e6d6d58 权威统一:提问/排版格式与自决策判据都归位到会话机制包内
起因(用户):「提问拍板格式不应该在会话机制中吗,怎么跑到别的技能中去了」
病根=**权威声明分裂**:
  · SKILL.md:963 说 03 号是「内联副本」⇒ 隐指权威在 agent-operating-rules;
  · 而 03 号自己头部写着「**这份是权威源**」,且把它说的第②个消费者
    `scripts/apply-reply-rules.py` 写成了**不在本包**的路径。
  ⇒ 同一件事两处说法打架 ⇒ 改的人(我)会把改动做错地方。

处置(统一为「会话机制包内即权威」,与 02/04 两份的既有处置一致):
  ① 注入器归位:新增 `session-mechanism/scripts/apply-reply-rules.py`,默认读**包内** 03 号;
  ② 03 号头部改写:权威=本文件,两个消费者都在本包内;
  ③ `reply-style-guard.py` 第③级兜底从**别的技能**改回包内路径;
  ④ `agent-operating-rules/references/回复排版-核心块.md` 标注「副本·权威在会话机制」;
  ⑤ `dsh-decision/references/00-决策方法论.md` 标注「来源·权威在会话机制」;
  ⑥ SKILL.md:963 措辞由「内联副本」校正为「收进本包并定为权威」。

验收:注入器 `--check` 报权威源=包内 03 号且与 CODEBUDDY.md 一致;
      每轮注入 1183 字符(含「竖排」「变相征询」);
      **无 CODEBUDDY.md 的干净工作区也能取到**(1185 字符)⇒ 自包含成立。
2026-10-06 22:45:43 +08:00
admin 423b16004f 排版核心块:待拍板项强制「四行竖排」;补回被误删的 start-supervise.ps1.tpl
1) 起因(2026-10-06 用户):「提问还是不按照提问排版格式来」——
   复盘:我上一次把「问题/说明/候选A/候选B/倾向」全塞进一个自然段,
   违反既有的「并列内容竖排」。核心块原本只写"逐条编号",
   ⇒ 本次把**四行竖排**写成明文并给出形样(问题/说明/候选各占独立一行/倾向)。
   核心块 835 → 1172 字符。

2) 顺带修:上一轮同步时 `assets/start-supervise.ps1.tpl` 被漏拷而删掉了远端那份,
   该文件被 manifest / pitfalls / supervise-persistence / collabd.py / init_workspace.py 五处引用
   ⇒ 已从 64dd820 取回,本次一并发回。
2026-10-06 22:42:15 +08:00
admin bcb9d1253d decision-rules-hook: 注入补「两个停止点」+「技术方案排序轴」
起因(2026-10-06 用户问):能自决的问题为什么还要问。
复盘发现注入的判据里**缺动作**:
- 缺「十步」的两个停止点 → ① 判类型(方案请求 vs 直接执行)② 判方向(扩大/收窄/中性);
- 缺「自主裁决顺序」的排序轴 → 更小改动 → 更少新增形态 → **不扩大可见面**。
⇒ 前者导致「会扩大可见面」时不停手;后者导致排完仍把已定项混进待拍板清单(=变相征询)。
本次只补这两条动作骨架(1459 → 1906 字符),⛔ 不塞十步全文(避免稀释)。
2026-10-06 22:40:05 +08:00
admin 433d43af54 decision-rules-hook: 注入补「两个停止点」+「技术方案排序轴」
起因(2026-10-06 用户问):能自决的问题为什么还要问。
复盘发现注入的判据里**缺动作**:
- 缺「十步」的两个停止点 → ① 判类型(方案请求 vs 直接执行)② 判方向(扩大/收窄/中性);
- 缺「自主裁决顺序」的排序轴 → 更小改动 → 更少新增形态 → **不扩大可见面**。
⇒ 前者导致「会扩大可见面」时不停手;后者导致排完仍把已定项混进待拍板清单(=变相征询)。
本次只补这两条动作骨架(1459 → 1906 字符),⛔ 不塞十步全文(避免稀释)。
2026-10-06 22:39:51 +08:00
admin 64dd82073b session-mechanism: 修复钩子静默失效 + 3 处判据缺陷;禁「变相征询」
1) stop-dialog-guard: session_budget() 早退路径返回 2 值、末尾返回 3 值,调用方按 3 值解包
   ⇒ transcript > 64 MiB 时每轮 ValueError。因 fail-open(异常仍 exit 0),
   宿主零报错、install.py --verify 只判 rc=0 ⇒ 假绿;实测 86 条 EXCEPTION,
   死掉的是整条(水位/收口、接续机制起点、预算告警、门禁自检、路径自检)。

2) session-rules-check 三处判据:
   · hook_reg  按旧文件名找 ⇒ 合并成 prompt-guards.py 后每轮假红 ⇒ 改为一组可接受名
   · snap_sync 拿 mtime 当内容判据 ⇒ 连续 4 天假红 ⇒ 改为复用抽取器本体比对内容
               (变异对照:截断快照能报 fail,非恒绿)
   · mem_ptr   只查全局技能根 ⇒ 工作区自带技能被判悬空 ⇒ 改查「全局 ∪ 工作区」

3) pitfalls 新增 P0-95(改判据必须重跑变异对照;fail-open + 只看 rc=0 = 假绿温床)

4) 回复排版核心块新增「变相征询同样禁止」(先只报不动/等你发话/我倾向X你看呢
   这类不带选项的待定清单,一律按待拍板项写:问题+说明+各候选优缺点+倾向)
2026-10-06 22:27:03 +08:00
admin 19101acd65 init: workbuddy_skills 重建,仅收录 session-mechanism
- 按用户指示清空原有 25 技能内容,只提交 session-mechanism(57 文件)
- 附 .gitignore(产物 + 本机凭据)
- 令牌明文已脱敏(历史 .neodata_token 与 pitfalls 引用均不入库)
- 本提交为孤儿提交(父提交为空),历史自此重新开始
2026-10-05 14:13:24 +08:00