feat(id-check): 编号门禁第二步——新增行拦截(零语料)
背景:第一步(bf2a5c21)把两根护栏转成报告制,但全库语料审计仍在跑。 它真正的用途只有一个——拦住「新写一个自造编号」;这件事不需要 99 族语料。 所以本笔落第二步:只查 git diff 的新增行,判据收窄成两张前缀表。 新增 scripts/check_ids_new.py(241 行,零语料): - 破折形态:首段不在 KNOWN_DASH(活族 + 标准名,11 条)→ FAIL; 在 RETIRED_DASH(已停发族)→ 只 WARN,提示改语义短语。 - 裸形态:前缀不在 KNOWN_BARE(外设/器件/协议/点号,约 90 条)→ FAIL。 - 单字母 + 数字一律放行(元件位号与层次号同形,显式盲区)。 - 算术排除(SIZE-2 / LEN-1 这类是减法不是编号);跳过 [示例]/[计划] 行; 行内 [编号豁免] 为最后手段。默认查暂存区,另有 --worktree / --range / --self-test。 接线:新钩子 id-check-new(钩子数 51 → 52,AGENTS 与门禁索引已同批改), 与 id-check 双跑一个观察期;观察期后按 docs/编号规范.md §8.5 ③ 退役旧语料。 旧门禁的排除面加上新脚本(它必然写着示例令牌,否则自己拦自己)。 白名单是按真实数据调出来的,不是拍脑袋:回放最近 80 笔提交,未知形态只有 15 种, 其中 12 种是设备/协议名(RS232、RS485、OVER8、YT/YH 点号等,已进白名单)、 3 种是已停发族(P-8、N-1、F-NET-*,只 WARN)→ 调好后回放误报 0。 自证(实测): - 自检 5 正例全部拦下、29 反例全部放行(含 TC-NET-204 / TRAP-ADC-01 / TPAFE5160 / GD5F2GQ5UE / C12 / U15 / L3 / SIZE-2 / GPIO_PIN_5)。 - 端到端:暂存一个自造前缀 + 数字 → 钩子 FAIL;清理后 Passed。 - 反向:本页文档里举的反例自己也被拦过一次,改成带 [示例] 标记后才过—— 这条正好证明它没有「文档路径」的例外面。 - 两条门禁互不干扰:old-gate rc=0、new-gate rc=0、doc-links 通过(211 文档)。
This commit is contained in:
+17
-2
@@ -682,8 +682,9 @@ repos:
|
||||
# 必然一边倒误报 → 裸形族只在属主文档内判越游标、文档外降告警;收口属 §9 阶段
|
||||
# 1-② 的迁移批次。**不是「检查通过」,是记在案上的盲区。**
|
||||
# ⚠ 当前 warn-only(§8 上线节奏:先清 backlog → 清零后 entry 加 --strict 拦提交,
|
||||
# 与 doc-links 章节校验同一条路径)。校验 8 的「可判定比例」跌破
|
||||
# id_registry.json 里的基线时**任何模式都失败**——那根线就是防回退的本体。
|
||||
# 与 doc-links 章节校验同一条路径)。校验 8 的两根护栏(可判定比例 / 不可判定
|
||||
# 绝对数)**自 2026-10-28 起只报告、不拦提交**(用户裁定,退役路线见规范 §8.5);
|
||||
# 硬拦的只有校验 1~6 的台账外新账。
|
||||
# ⚠ pre-commit 4.x 已移除 `always: true` → files 必须覆盖所有能改编号的触发面
|
||||
# (任意 md/c/h/py/yaml/json/txt + 本配置文件);扫描范围恒为全库
|
||||
# (悬空/孤儿/重复定义是跨文件判定,pass_filenames: false)。
|
||||
@@ -694,6 +695,20 @@ repos:
|
||||
files: \.(md|c|h|py|ya?ml|json|txt)$|^\.pre-commit-config\.yaml$
|
||||
pass_filenames: false
|
||||
|
||||
# 14) 编号门禁·第二步(2026-10-28 加):只查**新增行**,零语料
|
||||
# 背景:语义标识已是默认形态,上面那套 99 族全库语料审计的维护成本高过收益
|
||||
# (近 80 笔提交有 61 笔被编号体系牵连),退役路线见 `docs/编号规范.md` §8.5。
|
||||
# 本钩子是新牙:看 git diff 的新增行里有没有**未登记形态**的「字母+数字」标识
|
||||
# (自造前缀直接 FAIL;已停发族只 WARN);白名单在脚本里,按实测普查枚举、几乎不增长。
|
||||
# 与 id-check **双跑**一个观察期(老的是全库语料、新的是新增行),观察后再摘掉老的。
|
||||
# 自检:`python scripts/check_ids_new.py --self-test`;范围自查用 `--range A..B`。
|
||||
- id: id-check-new
|
||||
name: 编号门禁·新增行(零语料,拦截新造编号)
|
||||
entry: python scripts/check_ids_new.py
|
||||
language: system
|
||||
files: \.(md|c|h|py|ya?ml|txt)$|^\.pre-commit-config\.yaml$
|
||||
pass_filenames: false
|
||||
|
||||
# 14) 分层方向门禁(2026-10-22 加,结构债的"防扩大"那一半)
|
||||
# 背景:AGENTS.md 与 项目架构总览.md 早就写着"六层单向依赖",但**从来没有机械检查**
|
||||
# ——Drivers/BSP/ 里可以随手 include "cfg_file.h" 而无人报警。后果可测量:2026-09 审查
|
||||
|
||||
Reference in New Issue
Block a user