Files
STM32F4-Base/.dsh/skills/task-worktree/reference/verification.md
T
wandering1 f08b12a46c docs(技能渐进展开): 五个技能正文逐字外置到 reference/,主文只留索引与指针
按「主文留头量、深规程外置」重写本仓技能,全部是逐字搬移:
搬移前断言原文每条非空行必须出现在新主文或 reference 文件里,
0 丢失才落盘;步骤编号一律不重排(正文有「第 12 步」交叉引用);
每个切点保留原小标题 + 索引(加粗引导句与步骤标题)+ 指针行。

主文变化(上限口径 = 插件写侧 65536 字节,见上一笔 skill-size 钩子):
- id-family-semantic-migration 33392 -> 10968(17%),reference 3 篇
- stale-doc-count-sweep 19811 -> 6945(11%),reference 2 篇
- mem-budget 19963 -> 13042(19%),reference 3 篇
- keil-build 12917 -> 8879(14%),reference 2 篇
- task-worktree 72601 -> 28139(42%),reference 8 篇

task-worktree 本笔同时收录另一会话已写完的 C2/D/G 三节正文——那
三处手改与我的拆分落在同一份文件改动里,不可分离;其内容同样已
随 reference/ 外置,主文只剩标题、索引与指针。

外置语料合计 122211 字节 / 30 篇:围栏数逐篇为偶,无 BOM/CR/U+FFFD。
draw-diagram 与 serial-boot-test 脚本是另一会话的在飞改动,本笔未含。

skill-size 钩子在本笔首次真跑(前一笔无 .dsh/skills 文件可触发)。

gate: pre-commit 全绿(doc-links、id-check-new、check-yaml、
      skill-size、check-added-large-files);30 篇 reference 手工字节
      体检 clean;skill() 逐个复载确认加载的是拆分版。
2026-10-29 15:03:12 +08:00

5.4 KiB
Raw Blame History

验证

  • $TW list:台账段条目数 = ls _wt 的目录数且 ≤ 8(MAX_CONCURRENT);刚回收的任务与历史占位条目都不再出现 (插件树另起一段,不参与这条计数)。
  • $TW lock status:build 空闲(TTL 1.0h) + bench 空闲(TTL 6.0h)——没有本会话留下的持有者。
  • git log --oneline -3:能看到 merge: task/<ID>-<slug> 合入 <base> 与其后的补基线提交; git status --porcelain 为空(补链改动已提交,才谈得上重跑 done)。
  • ls _wt/.state/:该 ID 的台账已无(清场最后一步 unlink);重复 done 报「任务不存在」不必再追。
  • E 节回收:git worktree list 只剩主树 + 判「保留不动」的树(已拆路径逐条消失);拆前/拆后主树 git status --porcelain -uall 行数相同且 diff 为空(实测 0 → 0);ci-artifacts/wt-leftover-backup/ 里每个留档件都打印过 文件名与字节数、条目数 = 分桶判「要留档」的条目数;每棵被拆的树都留有 REPARSE: none 预扫记录;全景输出里 UNIQUE-UNMERGED 归零(或全部已备份);保留树在报告里点名给出判据(merge-base --is-ancestor = MERGED)。
  • E 第 6 步清悬挂台账:该 json 已从 _wt/.state/ 消失(.state-bak 在备份目录里)、$TW list 不再打出它、 $TW lock status 两把锁仍空闲;全程未对该 ID 跑 done / abort。
  • F 节桥接:plugin list 的「联接」列按实际三态点名(已联 / 缺 .venv / 缺 SDL2 / 齐(实体SDL2)——旧实现只取样 .venv,半联树会说谎);adopt/unadopt 前后主树 .venv 与树内文件都 还在;主线缺 SDL2 时 adopt 打 [skip] + 「还不能算就绪」而不打「现在可以跑」;plugin adopt ".." 必须 exit 2;打印的 pw:<name> 与 keil_build.py 从 cwd 反推的名字逐字相同;done <插件树名> 只 exit 2。
  • C2 主树被别的会话弄脏时的手工合并:合并前打印过 git merge-tree --write-tree 的结果树 sha 且 MT_RC=0; 合并用 git merge --no-ff --no-edit -F ci-artifacts/merge-msg-<slug>.txt(UTF-8 无 BOM)并写明绕开 done 的理由; 外部文件合并前后的 git hash-object 逐字符相同、git diff --stat 同一组数字、status 里仍是 M (没被提交也没被清掉;实测同为 369380ca…、2+/2−);台账先 cp 成 <ID>.json.state-bak 再由 $TW done (或 E 节手工路径)摘联接拆树;收工前 git worktree list 只剩主树 + 别人的在飞树(点名保留)、 $TW lock status 两把锁均空闲(build 空闲(TTL 1.0h) / bench 空闲(TTL 6.0h))。
  • G 节树内门禁:<tree>/ci-artifacts/ 先 mkdir -p 再写、事后 ls 得到真实文件(cat 读得到内容); 树内 check_doc_links.py 按单文件跑并打印「N 处 / 机器可判定百分比 / rc」(实测 161 处/98%/rc=0、16 处/88%/rc=0); 全库 --all 只在合并后的主树跑(实测 2,597 处 / 194 个文档 / rc=0);若树内跑过 --all 且判红,报告里 必须给得出「过滤 simulator/SDL2 后与主树同命令基线对比」这一步。
  • D 节归因:测量前后 git -C "$MAIN" status --porcelain 逐行一致(主树全程只读); git worktree list 里净室路径已消失;逐文件增量之和 等于观察到的涨幅(实测 +6+8+2 = +16),且每处增量 都指到具体字面量类别(裸形 「字母 T 累进数字 4」)与属主;取数走 import check_ids 读 ck.stats,且门禁脚本自身 git diff 为空。
  • 补绿链的每一条都自己 echo RC=$? 看到 0,最后以重跑 done 打出的清场日志(已摘除联接 / 已删除分支 / 完成(分支此前已合入))为成功判据,而不是 tail 出来的最后一行。
  • 树内提交 / 合并信息(G 节):git log -1 --pretty=%B | grep -c '<被清退主题关键词>' 打出 0(标题 + 正文 + 合并信息三处都查过);消息文件在 ci-artifacts/、UTF-8 无 BOM、CR=0、标题 ≤100、正文最长行 ≤80(实测 31/50、32/55); 自审发现消息统计算错是在未推送状态下 --amend -F 修掉的,历史里没有「更正」提交。
  • 文档改动体检(G 节):提交前打印过 lines/bytes/BOM/CR/U+FFFD/三连续空行/行尾空格/末行 LF 与表格列数一致性, 并区分「本次改动引入 = 0」与「文件里既有的坏行」(实测两处历史坏表格与本次无关,只在报告里点名)。
  • F 节分级与自持理由:判 simulator/SDL2 为硬需求要给出 simulator/CMakeLists.txt:12(非 CACHE)+ 派生路径行号 (:34/:70/:71/:180/:207);判 .venv 为软需求要给出 DTU_PRECOMMIT_PYTHON 与 ci_local.py 五级解释器候选顺序; 答「为什么不用插件」时报出插件包版本、文件与三个概念的 grep 命中数,并说明重叠只在 git worktree add 的开/收两个动作。
  • 改并行上限数字:唯一事实源 = task_worktree.py 的 MAX_CONCURRENT(报错文案与 new 提示都 .format() 插值它, 实测 :764-766 / :768-771),其余全是引用同步;隔离小仓验证到「8 棵成功、第 9 棵不带 --force 被拒」, 且没在真仓 ../_wt 及其 .state/ 留下验证树。