@@ -585,6 +585,38 @@ git commit -m "docs(standards): 重建行数豁免登记为快照表"
585585
586586---
587587
588+ ### Task 3 修复轮(**Task 4 的前置**,两个提交):评审的 2 条 Important
589+
590+ Task 3 评审结论 **NEEDS_FIXES**。两条 Important **根因都在本计划的设计里**,不是执行问题 —— 记在这里,以免后来者照抄上面的代码块。
591+
592+ **★ Important 1:` -- write` 缺规模自检 —— 另一个入口在"报平安"。**
593+ 本计划给 ` check ()` 加了 ` measured .size === 0 ` 守卫(Task 2 修复轮),**但 ` writeTable ()` 没有**。评审者实测:把 ` SCAN_DIRS ` 指向不存在路径后跑 ` -- write` → **` exit 0 ` 、stderr 0 字节、stdout 打印「✅ 已重写 …:>600 硬限 0 · 301–600 档 0」**,而登记表从 **179 行塌到 41 行**(138 条与全部理由清空,只剩表头与历史节)。git 可还原,但 **✅ + exit 0 掩盖了破坏** —— 而且恰在 0-C2/C3 会**反复执行 ` -- write` ** 的窗口里。
594+ ⇒ **修法**:把规模自检**抽成两个入口共用的守卫**,` writeTable ()` 必须在 ` writeFileSync` **之前** ` exit 1 ` ;并**逐目录断言**(存在 + 至少贡献 1 个文件)——否则只坏一个目录时仍会刷出上百条「` (b)` 冻结名单里的文件已不存在 → 从 ` FROZEN_OVER_LIMIT ` 删除该行」「` (d)` … → 删除该行」,**把人引向删棘轮/删条目**(与已修的 Minor 2 同类误导)。
595+
596+ **★ Important 2:超硬限行的「豁免理由」人工文字被常量整列丢弃。**
597+ 本计划把超硬限行写成 ` row (p, n, \` 超硬限(>N 行),不允许豁免\` , reasons.get(p)?.split)` —— ** 只保留了 ` split` ,把 ` why` 换成常量** 。于是旧表那 15 条理由(** ≥1009 字** ,含 ` TD-2026-09-09-D` / ` TD-2026-08-30-A` / ` TD-2026-09-09-A` 编号、「超限为预存债务」、` lib.rs` 的「拆分会破坏注册可读性」等)在新表里** 出现 0 次** ;而** 表头与脚本 docblock 都宣称「两列由人工维护,生成器按路径保留」** —— 自述与行为不符,且下次 ` --write` 会继续吞掉按表头指引写进该列的理由。
598+ ⇒ ** 修法** :保留常量前缀** 并追加** 人工理由,且** 必须幂等** (读回时先剥掉生成器自己加的前缀,否则每次 ` --write` 会层层叠加):
599+
600+ ` ` ` js
601+ const OVER_PREFIX = ` 超硬限(> ${HARD_LIMIT } 行),不允许豁免` ;
602+ /** 幂等:先剥掉生成器自己加的前缀,否则每次 --write 都会叠加一层 */
603+ const stripOverPrefix = (t) =>
604+ t.startsWith(OVER_PREFIX) ? t.slice(OVER_PREFIX.length).replace(/^\s *——\s */, '').trim() : t.trim();
605+ const overWhy = (p) => {
606+ const human = stripOverPrefix(reasons.get(p)?.why ?? '');
607+ return human ? ` ${OVER_PREFIX } —— ${human}` : OVER_PREFIX;
608+ };
609+ ` ` `
610+
611+ ⚠️ ** 光改代码 + 重跑 ` --write` 恢复不了那 15 条** —— 它们** 已被上一次重建丢掉** ,必须先从 git 旧版捞回:` git show a4cb549d:docs/standards/line-limit-exemptions.md` ,按路径取出原文写回,再跑 ` --write` 验证「跑一次后仍在」且「第二次运行 SHA256 不变」。
612+
613+ ** 本修复轮的验收** :① ` SCAN_DIRS` 全失效 → 两个入口** 都** ` exit=1` 且** 登记表字节不变** (SHA256 对照);② ` SCAN_DIRS` 部分失效(只留 ` app/src` )→ ` exit=1` 且报「扫描目录不存在」,** 不再** 刷 (b)/ (d) 的" → 删除该行" ;③ 15 条人工理由** 全部捞回** (旧/ 新字数对照,证明零丢失);④ 连跑两次 ` --write` ** SHA256 相同** (前缀不叠加);⑤ 默认与 ` --full` 仍 ` exit=0` 、` 138` 条。
614+ ** 提交** :` fix(scripts): write 入口补规模守卫并保留超硬限人工理由` + ` docs(standards): 恢复 15 条超硬限人工理由并重生成` 。
615+
616+ ** 遗留 Nit(不处理)** :迁入历史节的 3 条散注里只有 121 是逐字,117 / 119 被** 改写** (原文内容保住并补上复核结论)—— 与计划「逐字迁入」的字面不符,但** 结果更好** (补了复核数字),不影响合并。
617+
618+ -- -
619+
588620### Task 4 : 接线(本地提交门禁 + CI )
589621
590622** Files: **
0 commit comments