Files
STM32F4-Base/.dsh/skills/task-worktree/reference/clean-room-measure.md
T
wandering1 ecf9d3ad3d docs(task-worktree skill): 修 @T3@ 围栏腐坏,正文瘦身并把细节外置 reference/
围栏腐坏是真 bug:@T3@ 是被误提交进仓的代码围栏占位符,Markdown 渲染出
来就是一行 @T3@ 加裸命令。git log -S 定位:842d711e(2026-10-28)
SKILL.md 还有 18 个真三反引号围栏行、0 个占位符;21c68521(2026-10-29
插件桥接那笔)起变 0 围栏 / 34 个占位符。全仓只有本技能 6 个文件有此
病,draw-diagram / keil-build / ui-verify 等都用真围栏。本轮七个文件
占位符清零、围栏全部成对。

信息密度:SKILL.md 28,139 → 23,087 B(−18%,占插件写侧上限 65536 的
35%,给自进化留头量)。同一句外置理由在 C2/D/E/F/G/陷阱/验证 重复 7 次
→ 0;frontmatter 与 F 节写了两遍的插件桥接说明收进 F 节;「这不是免费
的」「挡给你看的保护」这类修辞删掉。删掉的细节全部落进对应 reference
篇——skill-size 钩子会校验指针不悬空:现 26 处链接 / 8 篇目标 / 悬空 0,
每篇都有入口。

锚点未重排:节号 A–G/C2、各节步骤号、铁律编号被 reference/ 反向引用
(铁律 3/5/7/9 与 A 第 1、5 步,C 第 5~7 步,E 第 1~6 步均结构性存在)。
只在 SKILL.md 出现的 PIPESTATUS 教训保留(reference/ 里没有,删了就丢)。

门禁:check_skill_size.py rc=0(17 个 SKILL.md 全在写侧上限内、无悬空
指针);七文件均无 BOM / CR / U+FFFD、单个尾换行。
2026-10-30 00:31:36 +08:00

5.1 KiB
Raw Blame History

D. 门禁指标异常增长 → 逐文件归因(把净室工作树当测量仪,主树全程只读)

场景(2026-10-27 实测):id-check 突然 FAIL「不可判定 1,178 > 上限 1,166」——比上一轮量到的 1,162 又涨了 +16, 而主工作树里同时压着 4 条在飞任务道的未提交改动。不许 stash / checkout / reset(那是搬动甚至丢弃别人未提交的工作, 项目级 Never;git status 一乱,整条道的现场就没了),不许改门禁脚本本身(它就是那把尺子,改了数字就不可信), 也别在脏主树里跑门禁(那测的是 4 条道 + 未跟踪文件的混合体,永远分不出谁)。正解:在仓库之外另起一棵 detached HEAD 的干净工作树当净室,一次只往里注入一份在飞文件,与基线差分即得每个文件的独立贡献。两步: 净室建树 → 单文件注入测量。

  1. 建净室 + 先落基线数(路径必须在仓库目录之外;铁律 7 对临时树同样成立——放仓内就污染 git status / pre-commit --all-files / 全库搜索):
MAIN="D:/Code/DTU Code/STM32F4-Base"           # 主工作树绝对路径(含空格 → 变量整体加引号)
WT="$MAIN/../_wt/und-attr"                     # 仓外同级 _wt/ 下;一次测量固定用同一个名字
rm -rf "$WT" 2>/dev/null
git -C "$MAIN" worktree add --detach "$WT" HEAD >/dev/null 2>&1 || { echo WT_FAIL; exit 9; }
git -C "$WT" status --porcelain                # 应为空
"$PY" "$WT/scripts/archive/id_gate/check_ids.py" 2>&1 | tail -25     # ← 口径:id-check 钩子已于 2026-10-28 退役(脚本移入 scripts/archive/id_gate/),按该脚本自身默认参数跑;基线与注入用**同一条命令**
  • --detach(不要 -b):净室没有分支、不写 _wt/.state/<ID>.json 台账 → 不占 MAX_CONCURRENT = 8 名额、不出现在 $TW list,也没人会被误指去对它跑 done(建与拆都不走 $TW new / $TW done)。
  • 能这么量的前提:该门禁只读仓库内文本。依赖本树构建产物的门禁(mem-numbers / mem-budget 要 .map) 在净室里必然报「找不到 .map 事实源」(见陷阱「新建工作树从未构建过」)——那类指标不能这么归因。
  • git status --porcelain 非空 = 有别人的未跟踪文件被带进净室 → 先 git clean -xdn 干扫(别去 n) 看清会删什么,只挪走多出来的那些再测;语料被污染出来的数字与 CI 不可比。
  1. 一次只注入一份在飞文件 → 跑同一个扫描器 → 与基线差分(得到的是每个文件的独立贡献,不是合计):
for f in "App/log/sys_log_mcu.c" "test/host/sys_log_mcu/sys_log_mcu_test.c" "docs/子系统设计/运行与自检记录设计说明.md"; do
  mkdir -p "$WT/$(dirname "$f")"
  cp "$MAIN/$f" "$WT/$f"                       # 拷进净室;主树那份只读、一字节不动
  echo "== $f =="; "$PY" "$WT/scripts/archive/id_gate/check_ids.py" 2>&1 | tail -25    # ← 与第 1 步同一条命令
  git -C "$WT" checkout -- "$f"                # 只还原净室里自己刚拷进来的那份
done

实测:run_par.c / board_ui_nav.py / check_nested_comment.py / keil SKILL.md 各 +0, 而 log 道那三个文件 +6 / +8 / +2,合计正好 +16。Σ(逐文件增量) ≠ 观察到的涨幅 → 还有没被注入的 在飞文件,或存在文件间交互项,不许就此交卷。 3. 定性增量是哪一类字面量(只有「谁」没有「为什么」= 给不出可执行的改法):同一计数器在 HEAD 版与 在飞版各数一遍,差值才是新增行带来的(存量的不算这条道的账);再对新增行直接 grep。本次 16 处全是 裸形 「字母 T 累进数字 4」(T 在 scripts/archive/id_gate/id_registry.json 的 bare_check_letters 里,规范形态是连字符形), 全部落进 skip_bare_unmanaged —— 到这一步结论才配发给属主。 4. 闭合 + 复验主树一个字节没被污染:

git -C "$MAIN" worktree remove --force "$WT"   # 净室里只有自己的拷贝、没有原件,--force 安全
git -C "$MAIN" worktree list                   # 不该再有 und-attr
git -C "$MAIN" status --porcelain | sort       # 与测量前**逐行一致**(测量前先存一份基线清单)

⚠ 上面第一行的前提是有条件的:树里混进了别人的在飞 / 未跟踪内容时「只有自己的拷贝」就不成立了, --force 直接拆等于替别人把唯一版本删掉 → 先走 E 节(全景 → 逐文件分桶 → 联接预扫 → 唯一残留先备份), 再回来执行本步;复验按 E 第 5 步做(拆前/拆后主树 status --porcelain -uall 行数必须相同)。 同一棵净室树的第二种用法:按指定 commit 只读构建出像 / 烧录验收——不搬动任何在飞改动,也不为台架 提前抢发一笔提交;构建与烧录都在这棵树里做(不在主树),仍受 bench / build 锁串行(铁律 3)。