Files
workbuddy_skills/session-mechanism/references/manifest.md
T
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

16 KiB
Raw Blame History

manifest · 包内文件清单

生成方式:逐文件 compile() / json.loads + md5 | 最近一次全量重算:2026-10-06 05:10 (补 P0-85(工作区解析静默错归属)+P0-84 已修尾注) ⚠️ 2026-10-05 局部增量:references/pitfalls.md(P0-77 拆条 + P0-73/P0-77 压缩)与 scripts/goalctl.py(--switch-goal 确认闸 + 旧目标归档)两行的 md5/大小已按当天实测值更新;其余行仍是 10-04 基线。 ⛔ 本表不含 install.log(运行日志)与 references/manifest.md(自引用,写完即失真)。 ⚠️ provenance 列里的 skills/multi-session-collab/…、skills/workbuddy-session-forensics/… 已是历史路径 —— 那两个目录 2026-10-01 已移到 <工作区>/归档/技能-退役-20261001/(⛔ 不在技能根了)。

文件总数:56 | 语法 / 结构检查失败:0

✅ 已完成 · 2026-10-05 「目标唯一性 + 换目标需确认」(用户口径落地)

用户原话逐字:「一个工作区 同时只能执行一个目标,如果要切换目标,需要用户确认,然后切换和关注检查切换后的目标」

  • 改前取证(三条,全实测):① 载体 goal.json 本就是单文件 ⇒ 天然满足"同时一个";② 归档零实现 (goalctl.py/collabd.py 全文搜 goals/ 零命中 ⇒ 那份归档件是手工造的);③ 确认闸零实现 (declare 直接覆盖 title,无任何准入判断)。
  • 修法(两道闸,均在 goalctl.py::declare()):① 标题变了 ⇒ 默认拒绝(rc=3、零写入), 必须带专用开关 --switch-goal(⛔ 不等于 --yes:前者=「用户已同意换目标」,后者只是「干跑转真写」, 混用 = 伪造用户授权);② 确认后旧目标整份归档到 goals/<旧标题≤40字>__<时间>.json + 新目标留 _前身目标。
  • 验收(7 项全过):拒绝 rc=3 /同目标细化 rc=0 不被拦 /归档 32 字段 / 6186 B 且与旧目标同源 / 变异对照(闸短路 ⇒ rc=0,还原 ⇒ rc=3,证判据非恒绿)/真区未污染 /副本 md5 全同。
  • ⚠️ 加闸带出的连带缺陷(已一并修):declare 没给 --title 时回落成工作区名 ⇒ 把"纯细化"误判成 "换目标" ⇒ 修成「没给 ⇒ 保持现有标题」(与 --topics/--kpi 同规矩)。
  • 📂 全文 ⇒ references/pitfalls.md P0-78;lifecycle 那条独立铁律 ⇒ P0-79(从 P0-77 拆出)。

📌 同批完成:pitfalls.md 沉淀纪律转绿(改前既有红,顺手修掉)

  • 判据=「单条 > 6 KB 且证据密度 < 4.0 ⇒ 判流水账」。改前基线读数:P0-73 7590 B/2.8。
  • 修法(两条腿,⛔ 不靠删内容):① 拆条 —— P0-77 里"前缀改造"与"lifecycle 空转"是两个主题, 拆出 P0-79(P0-77 7765→5107 B/P0-79 2141 B);② 删冗余展开(P0-73 验收段的重复读数)7795→约 5.9 KB。
  • 结果:沉淀纪律 ✓ 转绿(5 项);自测 PASS 94/FAIL 3 → PASS 95/FAIL 2(另 1 条报告型不计入)。
  • ⚠️ ⛔ 别为压体量删判据要点 —— 判据自带关键词对账(MUST 表),删了就换一种方式报红。❗原编号 77 → 79,不许再当 77 引用

✅ 已完成 · 2026-10-05 三代术语收敛(本节替代原「待办」)

  • 已执行:包内 + 两个工作区副本三方同步,md5 一致(collabd.py/goalctl.py/board.py/board_ext.py/ selftest.py/collabctl.py/guard.py/init_workspace.py/session-rules-check.py/board.html 全部 OK)。 selftest.py 基线 PASS 97 / FAIL 0(报告型 1 条不计入);改名的 5 条 @case 均能按新名字 -k 找到。
  • ⛔ 三类不动,是判据不是遗漏(下一次改名前照抄): ① 「」引述内容逐字不动(含跨行引述块)—— 引用用户口径只写原话; ② 历史段整段不动 —— SKILL.md 19–27 行代际表、含 旧称/旧词/一代/二代/第三代 的行、<hN> 历史… 段落 (要讲清三代分别叫什么,就必须留着旧名); ③ .py 里 目标检查 一律不动 —— 它是检查会话类别名(_CHECK_TAGS/_CHECK_TOPICS、 [检查]-[结果检查/目标检查]),并散在字面断言里(CHECK_KINDS["queue-empty"][1] == "目标检查"、 rows.append(...)、【目标检查】 prompt 头)⇒ 改了直接断判据。
  • ⚠️ 一处同改对:board.py::_ROLE_LABEL["worker"] 与 board.html 的 role==='…' 是同一处判据的两侧。
  • ⚠️ 本条暴露的存量缺陷(已一并修):selftest.py 的期望串原写 才建立一轮任务会话,而 SKILL.md 引述里逐字是 才建立一轮执行会话 ⇒ 该子项改前就是红的(被基线里的 97/0 掩盖)。
  • 工具:tmp/term-apply-v3-20261005.py(dry-run/--apply,写盘前自动备份)+ tmp/term-sync-20261005.py。

2026-10-04 新增文件(⛔ 由 manifest 重算登记)

  • references/01-文档索引.md — 3604 B |md5 825999a411e2a4f6b740063f81c01b03
  • scripts/judge_audit.py — 13562 B |md5 8f14a973fa5709a3b9a60b065dc22d7d
  • scripts/workspace_mirror.py — 17263 B |md5 60f104b37df3133785abb13f686eea4f
  • assets/start-supervise.ps1.tpl — 5360 B |md5 3805f1a82a1747269212287e9dfde369
  • assets/design-tokens.css — 6364 B |md5 0668feb3a4729f1022e579ac0c5d2569

最近改动(⛔ 只记「什么时候改了什么」,不写流水账)

  • 2026-10-02 07:0x · 开工第 0 步改名:会话「规划」→ 会话「规则机制」(本轮): ① 用户纠正原话:「就应该是检查清楚 所有会话规则机制 是否配置完整且生效, 不是规划 是 规则」 ⇒ 首版体检脚本只查排期那一面,当天实测出的三类失效(钩子注入指向已退役技能名 / 常驻快照写进幽灵目录 / 每轮注入的记忆指针悬空)一条都没覆盖 ⇒ 名字还叫「规划」=第二次「在册 ≠ 生效」。 ② 收敛成一个入口:新增 scripts/session-rules-check.py(查 三类十二项:A 钩子在册·路径存在· 注入技能名存在·闸门日志新鲜 | B 每轮注入记忆的技能指针·常驻快照不比权威旧 | C 周期钟·模型可用性· cwds 同形·投递心跳·活会话·once 从未运行的死排期);旧 scripts/session-plan-check.py 退役 到 <WS>/归档/技能包-旧件-20261002/,能力不回退。 ③ 状态标记改名:session-plan.json → session-rules.json(旧的属过期件,⛔ 别拿来对照)。 ④ 判据收紧:cwds 近失配原写成「同父目录 + 字面不同」⇒ 在 AIProject/ 这种多业务线平级目录下 把别的线报成失配(实跑当场 2 条假红)⇒ 改为「同父目录 + 名字去 -/_ 后仍相同」/「同名不同父目录」。 ⑤ 判据自验:⑨⑫ 抽成纯函数 + 合成样本夹具(<WS>/tmp/rules-check-mutate.py)—— 原版 10/0 绿、 四个变异体逐一按预期报红。⚠️ 夹具自己先红两次(期望值写死:漏算样本 + 有序列表比中文名)。
  • 2026-10-01 18:5x · 外置根贯通 + 两处真缺陷(本轮): ① roots.env 引导块从 9 份扩到 16 份(补齐 7 个非钩子脚本:board / board_ext / collabd / deliver-gateway-token / goalctl / selftest / stop-collab); ② 盘符字面量清零:配置目录兜底改 ~/.workbuddy,工作区兜底改 DSH_WS_ROOT/cwd, 覆盖网日志 glob 改 DSH_OVERLAY_LOG_GLOB(原为死路径 —— 本机 E:/dsh-worker-dev 不存在); ③ 7 份加输出编码兜底;④ roots.env 增写 CODEBUDDY_CONFIG_DIR; ⑤ 🔴 修「钩子把技能包当工作区」:wb-result-hook.py 的 _WS_ROOT 原按 3×dirname(__file__) 推, 包内这份推出来=技能包自己 ⇒ 包里长出 tmp/supervise-inbox/;改为复用 resolve_ws(); ⑥ 🔴 修「重定向 + GBK ⇒ print 抛异常 ⇒ 顶层记 fatal、整轮失败」(本机实测 4 次; 这正是常驻跑不起来的拦路石 —— 常驻必须重定向 stdout); ⑦ install.py 工作区模板路径纠错(原指 scripts/collab/,实际在 scripts/); ⑧ collabd.py docstring + 两处活注释改常驻定案(上一轮漏传导); ⑨ lock/preflight-lock.sh + hooks/lock-guard-hook.py 的盘符字面量清零; ⑩ 新增 install.py --manifest(见下条); ⑪ 🔴 scripts/selftest.py 去掉最后一处项目绝对路径:t_tick_wired 原先写死 <某工作区>/.workbuddy/tools/wb-result-hook.py ⇒ 两处都不对:既违反「技能里只用相对路径」, 又因宿主接线已改指包内那份而恒走"文件不在,跳过" ⇒ 看着绿、其实什么都没验(静默假绿)。 现改按包内相对路径取 hooks/wb-result-hook.py,该用例从"跳过"变真检(4 项实跑通过)。
  • 2026-10-01 19:0x · install.py --manifest:把「重算本表」固化成子命令 (包一改表就过期 ⇒ 以前每轮临时手搓脚本、跑完即删,已因此误判两次)。 只重写表 + 计数行 + 重算时间,⛔ 不碰上方散文;行尾随原文件(本表是 CRLF,写成 LF 会造成一次无声全文件 diff)。
  • 🔴 两份同源脚本「有意不一致」(⛔ 别当 bug 去修平):preflight-lock.sh 与 lock-guard-hook.py 在 技能包与文档库 07-scripts/ 各有一份。包内那份住在技能包里、推不出文档库根 ⇒ 只能走 roots.env +(lock-guard-hook.py 的)末位字面量兜底;库内那份住在 <文档库>/07-scripts/ ⇒ 按 __file__ 往上两级即文档库根。⇒ 包内有引导块、库内没有,是位置决定的,不是漏改。
  • 2026-10-01 18:2x · 瘦身(本轮):references/collab-detail.md 删去原件 YAML 变更流水(约 9.4 KB)+ 加读法索引+ 压缩 §12; references/{manifest,taskgraph,pitfalls}.md 去掉过期条目与旧抬头;包内 __pycache__/、hooks/bak-*/、tmp/ 已清。 ⛔ 本轮无机制代码改动。
  • 2026-10-01 16:5x:scripts/hooks/session-log-guard.py 新增「硬档就地回收」—— 到 8 MiB 先试一次把本会话 logs/<日期>/sdk/conversations/<sid>.log 改名(后缀 .recycled-<时间戳>,⛔ 不删、⛔ 不以 .log 结尾故与清扫器不重叠) ⇒ 宿主立刻重建并继续写 ⇒ 会话不必再因撞 10 MiB 而停手;失败则逐字退回原「停手+建接续」口径。 开关 DSH_SLG_NO_RECYCLE=1(只关回收、保留叫停)。⚠️ 文档库原件 07-scripts/session-log-guard.py 已同语义同步。
  • 2026-10-01 16:0x:原 multi-session-collab 的 SKILL.md 全文并入 references/collab-detail.md(治 8 处悬空引用: §0.05 §0.5.2 §0.5.4 §0.5.5 §1.3 §1.4a §3 §6);清掉 9 处旧技能路径/名的活文本; 两个原技能目录移入 <工作区>/归档/技能-退役-20261001/。

逐文件清单

包内路径 字节 md5 语法检查
SKILL.md 110832 25aefce4ad7402c216ad7784ebed7b92 —
assets/board-launch.py.tpl 4355 7e9dfe1c4845f20dbb89f599d80e167b —
assets/board-render-probe.js 14398 a21bd1905b34537436ce778c6bfbc288 —
assets/board.html 151811 c597cd7f21543542e9cdbe486c5ccd79 —
assets/design-tokens.css 6364 0668feb3a4729f1022e579ac0c5d2569 —
assets/start-supervise.ps1.tpl 5778 4eae189c7c850e4748a0a62024f48127 —
install.py 33311 ee11283cbcdbb4f821f021e86cff4498 ok
references/00-动手前必过.md 7181 33bc86e442ccd4fcbb930c79c4ad0641 —
references/01-文档索引.md 3604 825999a411e2a4f6b740063f81c01b03 —
references/02-功能优先协作协议.md 30502 e241742b41cb25ff7d1b6447b9ee623e —
references/03-回复排版-核心块.md 2187 201e7f112ee432b89e38f82f49301966 —
references/99-速查清单.md 9832 5c97728af7cb67e9be9a3e491bdc5fd9 —
references/architecture.md 119622 d7f0990daeb4cd7d2d262646f67b8ffd —
references/collab-detail.md 98760 7b843b0072d8da8abe0a162a44a96eb7 —
references/collab.md 16560 97aa751f86d9b4ba8db401b5ec592695 —
references/deploy.md 16754 4e382f7876f31754ec9629925340c2d8 —
references/forensics.md 6067 1fb6deca9bb05bebe950d4f4e3adf043 —
references/pitfalls.md 281757 8e3c654a8ea824da2a066726305accde —
references/rules.md 8106 95af3566066d27c3c224ce681a82efc1 —
references/supervise-persistence.md 27698 2e7ba3d89146881eb9a7ec5d2ada891b —
references/taskgraph.md 3521 be6c6540be86475bb3430688c2987afc —
roots.env 624 ec38f15f9a4101d69c815aa2cdd7b477 —
scripts/board-launch.py 2794 998a66b9d335ab1863b5b871a527bf4f ok
scripts/board.py 146111 d90395d1f1a7c3f94419a33cdf444384 ok
scripts/board_ext.py 45655 2319fb9d2d21bf961e03a42da9a1ad4b ok
scripts/collabctl.py 28124 827fe07da25b86b773a3f701e86db351 ok
scripts/collabd.config.example.json 1158 6655c15c411a84e3ca12fd136dbe2c60 ok
scripts/collabd.py 431355 955bd92009d7cd0cccc53d867f591b49 ok
scripts/deliver-gateway-token.py 5685 cbba9648d404ecd2683061e19dbdb24a ok
scripts/deploy_code.py 5325 a79cf5e5ffb3e8c60a31b4d0d8845f40 ok
scripts/forensics/proc-parent.py 2347 8cdfff2dbb88303298752c3777da7b20 ok
scripts/goalctl.py 47839 0e8b1d05003342a9ab474cfbfde5d704 ok
scripts/guard.py 13653 43f4e279896090c6c6c3fcbdb4fa95d6 ok
scripts/hooks/_env.py 17767 7177d04805c607fa155831340267c49b ok
scripts/hooks/bash-output-guard.py 17741 3f2fdfa17f66f7fcac42e06853433a26 ok
scripts/hooks/lock-guard-hook.py 20363 641457de0297ee7a812ccde57f67dc2b ok
scripts/hooks/reply-style-guard.py 10779 a05ca0d6ebef2be55a3d6f96a4c712da ok
scripts/hooks/session-log-guard.py 24636 4dd13b24d541d1afc7b4874dba6bb1eb ok
scripts/hooks/skill-load-guard.py 24261 21c3a3f8732698ef3a6f1a5c61aae343 ok
scripts/hooks/stop-dialog-guard.py 40247 4e5f9889717d4ed37a6384c643b4d05e ok
scripts/hooks/supervise-ensure-hook.py 14308 dc6f62584a8384baba0a1f2460828013 ok
scripts/hooks/wb-result-hook.py 37199 2d4f694acd031222bf03b98a859b6e90 ok
scripts/init_workspace.py 35817 c8b6bbbae01f21939ea2fd8d294d2726 ok
scripts/judge_audit.py 13562 8f14a973fa5709a3b9a60b065dc22d7d ok
scripts/keepalive.py 12265 b84c753917e0a34cf40800bda953e7a4 ok
scripts/lock/handoff-guard.sh 34616 f38b2ec92fdc1dab9abdaca0e0bb001a —
scripts/lock/handoff-status.py 3923 3edb20f9c4021ebe2323478860bf8f6f ok
scripts/lock/op-lock.sh 4690 1a31eda3642e23693a65e1519860c744 —
scripts/lock/preflight-lock.sh 8673 e985ec1cb853fae4c351cd03b171355d —
scripts/mut_run.py 13323 3bffc12e1e57d5efc743bac55e584b62 ok
scripts/selftest.py 469482 dc0f4801b2e4fa76e71f649b03f2ed50 ok
scripts/session-rules-check.py 37640 552c90b93a051d775299170d5ff49b56 ok
scripts/stop-collab.py 10462 d8043bedd23b52b6642aaf7ec8b8c980 ok
scripts/supervise-launch.py 2503 f416a2f197e5524a8859c1d227ba1d05 ok
scripts/wake-session.py 11011 32c6038b541249730f322f933ee287c1 ok
scripts/workspace_mirror.py 17263 60f104b37df3133785abb13f686eea4f ok