f08b12a46c
按「主文留头量、深规程外置」重写本仓技能,全部是逐字搬移:
搬移前断言原文每条非空行必须出现在新主文或 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() 逐个复载确认加载的是拆分版。
5.4 KiB
5.4 KiB
验证
$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/留下验证树。