From ad87f979b1f824b69f9696eaacf51feef1f6907e Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Fri, 6 Nov 2026 18:32:04 +0800 Subject: [PATCH] =?UTF-8?q?docs(=E8=A7=84=E7=BA=A6):=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=BC=96=E5=8F=B7=E8=A7=84=E8=8C=83.md=EF=BC=8C=E7=94=9F?= =?UTF-8?q?=E6=95=88=E8=A7=84=E5=88=99=E5=B9=B6=E5=85=A5=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E8=A7=84=E8=8C=83=20=C2=A77.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户裁定:docs/编号规范.md 在项目里已无意义,删除。 依据:该文 253 行里真正仍生效的只有两条规则(新条目一律不发编号、 人读文档存量编号继续清退)和一张存量族表;其余内容早有归属——两道 编号门禁的退役记录在 docs/门禁说明/id-check.md 与 id-check-new.md, 手工普查与恢复机器面在 scripts/archive/id_gate/README.md。留着就是 第二真相源,同一事实写在两处迟早漂移。 处理: - docs/文档规范.md 新增 §7.1「条目与编号:一律不发」,承接规则、 场景表、三条硬规矩、存量族表、已停发旧号族清单、不是编号的清单、 清理动作与「没有机器门禁兜底」四段。 - 活跃引用 62 处逐条改指 §7.1 或归档 README:AGENTS.md 2 处、 门禁说明三篇 18 处、其余文档 11 篇、代码与脚本 10 处、rename_maps 七个 record 字段、.dsh/skills 四个文件 8 处。 - 归档区 107 处去掉 docs/ 前缀当纯文本提及;编号治理历史.md 45 处 改为「原编号规范 §N」,避免被 doc-links 当自引用解析。 - 顺带修正 scripts/archive/id_gate/README.md 里仍称旧文为现行规范 的表述。 门禁:check_doc_links --all --sections-strict 220 篇全通过、无法判定 0; pre-commit 全 Passed。 --- .../id-family-semantic-migration/SKILL.md | 6 +- .../reference/steps-alpha-numeric-family.md | 6 +- .../reference/steps-chinese-prefix-family.md | 2 +- .../reference/pitfalls.md | 2 +- .pre-commit-config.yaml | 4 +- AGENTS.md | 4 +- App/algo/README.md | 2 +- docs/产品需求/产品需求设计文档.md | 4 +- docs/产品需求/参考产品复刻明细.md | 2 +- docs/任务规划/README.md | 2 +- docs/文档规范.md | 48 ++++ .../测试说明/单元测试/开机账本单元测试说明.md | 4 +- .../测试说明/单元测试/时间同步单元测试说明.md | 2 +- docs/测试说明/流程与规范/测试文档模板规范.md | 2 +- docs/编号规范.md | 253 ------------------ docs/网络/网络自愈架构设计.md | 6 +- docs/门禁说明/host-unit-tests.md | 6 +- docs/门禁说明/id-check-new.md | 10 +- docs/门禁说明/id-check.md | 26 +- docs/问题记录/ADC_Trap_Records.md | 2 +- docs/问题记录/CH395F_Trap_Records.md | 2 +- scripts/README.md | 4 +- scripts/archive/id_gate/README.md | 8 +- scripts/archive/id_gate/check_ids.py | 24 +- scripts/archive/id_gate/check_ids_new.py | 4 +- scripts/archive/id_gate/id_aliases.json | 36 +-- scripts/archive/id_gate/id_known_backlog.json | 2 +- scripts/archive/id_gate/id_registry.json | 58 ++-- scripts/archive/id_gate/编号治理历史.md | 76 +++--- scripts/check_bsp_err.py | 2 +- scripts/check_test_traceability.py | 9 +- scripts/rename_ids.py | 2 +- scripts/rename_maps/batch1.json | 4 +- scripts/rename_maps/batch2.json | 2 +- scripts/rename_maps/batch3-trap.json | 2 +- scripts/rename_maps/batch6-net-annotate.json | 2 +- .../rename_maps/batch7-f-net-semantic.json | 2 +- scripts/rename_maps/batch8-s-review-dead.json | 2 +- test/host/time_sync/time_sync_test.c | 2 +- 39 files changed, 216 insertions(+), 420 deletions(-) delete mode 100644 docs/编号规范.md diff --git a/.dsh/skills/id-family-semantic-migration/SKILL.md b/.dsh/skills/id-family-semantic-migration/SKILL.md index d9477aad..b6872fd8 100644 --- a/.dsh/skills/id-family-semantic-migration/SKILL.md +++ b/.dsh/skills/id-family-semantic-migration/SKILL.md @@ -1,13 +1,13 @@ --- name: id-family-semantic-migration description: 编号族整族清退/停发 playbook:把一个编号族(字母+数字如保护功能号 L1-x~L5-x、网络条目号 F-*、登记簿旧号 N-x、台架阶段裸形 T1~T3、用例号 TC-*,或中文前缀「卡」+ 数字这类门禁语料里**没有机器识别面**的族)在全仓代码注释、测试、活文档与门禁配置里改成语义短语(含销项删行与逐号换算表入档),或把「不清退」裁定写成硬口径入档。触发语:清退某族编号、编号改成语义名或语义短语、还有多少号可清、残留多少、批次二/批次三/批次五、「卡 0」「卡 0b」「卡 1~12」、销项删行并去除相关编号、id-check 报悬空引用或不可判定超限、不可判定引用绝对数涨点、「这一族不做了」。 -whenToUse: 用于**整族**处理:先判这一族有没有机器识别面 → 清点存量 → 逐族分类 → 分批派单清退 → 收口 → 回写 docs/编号规范.md 对应节。单条待办行销项并写 void 别名用 ledger-row-retire-void-id;某个事实数(页数、叶数、钩子数)变了要同步全仓用 stale-doc-count-sweep;单个文件改名或挪目录用 scripts/rename_ref.py;跑 HEAD 版对照组用 task-worktree 的净室 worktree。这四类不由本技能覆盖,但「涨点归因」一节会用到净室 worktree。 +whenToUse: 用于**整族**处理:先判这一族有没有机器识别面 → 清点存量 → 逐族分类 → 分批派单清退 → 收口 → 回写 docs/文档规范.md §7.1。单条待办行销项并写 void 别名用 ledger-row-retire-void-id;某个事实数(页数、叶数、钩子数)变了要同步全仓用 stale-doc-count-sweep;单个文件改名或挪目录用 scripts/rename_ref.py;跑 HEAD 版对照组用 task-worktree 的净室 worktree。这四类不由本技能覆盖,但「涨点归因」一节会用到净室 worktree。 version: 1.1.0 --- # 编号族清退成语义标识 -**2026-10-29 用户裁定:全族一律停发**(含 `docs/编号规范.md` §4.1 那五个存量族)——本 playbook 的「停发」分支默认已成立, +**2026-10-29 用户裁定:全族一律停发**(含 `docs/文档规范.md` §7.1 那幾个存量族)——本 playbook 的「停发」分支默认已成立, 现在唯一还需要决策的是**要不要清退存量**(全仓改语义 + 销项删行 + 逐号换算表入档)。 **动手前先判这一族有没有「机器识别面」**——它决定计数口径的来源与落地去处,两条路的做法**正好相反**: @@ -47,7 +47,7 @@ version: 1.1.0 10. 核队友交付 11. 分笔提交走真实 pre-commit 钩子 12. 收口只认门禁自身计数 -13. 回写 docs/编号规范.md +13. 回写 docs/文档规范.md §7.1 14. 裁定「不做」也要写成可执行硬口径入档 > 本节全文(逐字搬移、未改写,含命令与实测数字)→ [steps-alpha-numeric-family.md](reference/steps-alpha-numeric-family.md)。动手前先读那篇。 diff --git a/.dsh/skills/id-family-semantic-migration/reference/steps-alpha-numeric-family.md b/.dsh/skills/id-family-semantic-migration/reference/steps-alpha-numeric-family.md index eb986d56..f8c79bf5 100644 --- a/.dsh/skills/id-family-semantic-migration/reference/steps-alpha-numeric-family.md +++ b/.dsh/skills/id-family-semantic-migration/reference/steps-alpha-numeric-family.md @@ -2,7 +2,7 @@ > 本文由 id-family-semantic-migration 的 SKILL.md「Steps(字母+数字族:门禁看得见的那一路)」一节逐字外置而来(渐进展开:主文件只留索引与指针)。步骤号沿用原文,未重编。 -1. **确认范围与定调**:先按开头的表判识别面(无识别面 → 走下一节);再读 `docs/编号规范.md` §4.1(族总表,穷举)、§4.1.1(已停发栏),存量与批次见 `scripts/archive/id_gate/编号治理历史.md` §9,明确本族属主登记处(`owner_docs_glob`);旧判据「有脚本按字面量匹配它」自 2026-10-29 起作废——全族一律停发。清退 = 全仓改语义;停发 = 在规范表里写死不再新增引用(`id_registry.json` 的游标冻结只是裁定留痕,2026-10-29 起无机器读者)。 +1. **确认范围与定调**:先按开头的表判识别面(无识别面 → 走下一节);再读 `docs/文档规范.md` §7.1(存量族表与已停发族表),存量与批次见 `scripts/archive/id_gate/编号治理历史.md` §9,明确本族属主登记处(`owner_docs_glob`);旧判据「有脚本按字面量匹配它」自 2026-10-29 起作废——全族一律停发。清退 = 全仓改语义;停发 = 在规范表里写死不再新增引用(`id_registry.json` 的游标冻结只是裁定留痕,2026-10-29 起无机器读者)。 2. **按族实测三口径(字面量 / 站点 / 文件),不用 grep 估数**。`Checker.refs` 是 **dict(字面量 → 文件集合)不是方法**,`ck.refs(fam)` 这种写法会 `TypeError`;站点数门禁不直接给,用族正则重扫它自己的语料: ```python import sys; sys.path.insert(0, "scripts") @@ -58,9 +58,9 @@ ./.venv/Scripts/python.exe scripts/archive/id_gate/check_ids.py --strict 2>&1 | tail -1 # [OK] 校验 1~6 无错误 ``` 报告「字面量 8787→8299→7828」「不可判定绝对数 1161→984→982→978(上限 1166)」「可判定比例 88.14%(基线 86.0%,容差 0.1pp)」。**绝对数与比例两根线都要报**:把可判定引用改成散文会稀释比值,所以另有不可判定绝对数上限。涨点归因见「净室归因」一节。 -13. **回写 `docs/编号规范.md`**:§4.1 族表(停发/待清栏)、§4.1.1 已停发栏;存量表与批次结果表在 `scripts/archive/id_gate/编号治理历史.md` §9(只减不增、清点数字按最终实测同步);表格若保留动手前的清点数,**明确标注「不是当前存量,是动手前基线」**,否则就是拿旧数当现状。**用户裁定原文与理由直接写进对应节**(§4.1.1 停发行 + 该族的批次结论段落)——2026-10-28 起不再往变更记录写流水(`docs/文档规范.md` §5.1)。 +13. **回写 `docs/文档规范.md` §7.1**:存量族表与已停发族表;存量表与批次结果表在 `scripts/archive/id_gate/编号治理历史.md` §9(只减不增、清点数字按最终实测同步);表格若保留动手前的清点数,**明确标注「不是当前存量,是动手前基线」**,否则就是拿旧数当现状。**用户裁定原文与理由直接写进对应节**(§4.1.1 停发行 + 该族的批次结论段落)——2026-10-28 起不再往变更记录写流水(`docs/文档规范.md` §5.1)。 14. **裁定「不做」也要写成可执行硬口径入档**(不是只划掉一行——「不做」最容易被读成「那还可以继续发号」): - §4.1.1「已停发」栏新增该族一行:**游标冻结、现存号只减不增、新用例改用语义化测试函数名 + 文档表格行名**,并写清与 §4.1 存量族栏的关系(那五族 2026-10-29 起也一律停发); - 批次段落写明裁定原文与理由(归档 `scripts/archive/id_gate/编号治理历史.md` §9.1——§9 一族的事实源已在归档篇,规范正文只留口径)(该族是唯一真被脚本按字面量匹配的族:C 断言标签 + 测试函数名 + 文档用例表三处同一号),并给出**将来真要清退的前置条件**:追溯器(`check_test_traceability.py`)先同时认新旧两种形态、并行核对通过,**不许先改文档再改代码**; - 全文核「等你裁定 / 需你裁定」悬空表述残留数归 0; - - 无机器识别面的族落地面不同(`docs/编号规范.md` §4.1.1 一行 + 归档 `编号治理历史.md` §9.3 换算表 + 叙述同步三处),见下一节第 7 步。 + - 无机器识别面的族落地面不同(`docs/文档规范.md` §7.1 的已停发族表一行 + 归档 `编号治理历史.md` §9.3 换算表 + 叙述同步三处),见下一节第 7 步。 diff --git a/.dsh/skills/id-family-semantic-migration/reference/steps-chinese-prefix-family.md b/.dsh/skills/id-family-semantic-migration/reference/steps-chinese-prefix-family.md index 3bad5961..df2c208c 100644 --- a/.dsh/skills/id-family-semantic-migration/reference/steps-chinese-prefix-family.md +++ b/.dsh/skills/id-family-semantic-migration/reference/steps-chinese-prefix-family.md @@ -48,7 +48,7 @@ 5. **派单前写一份 spec 文件**(`ci-artifacts/card_retire_spec.md`),作为各道唯一口径来源,含五块:① 背景与**用户裁定原文**;② 逐号映射表(旧号形态 → 语义短语 → 属主出处);③ 措辞规则(补短语时括号怎么降级、动不动字符串字面量、生成器归属、悬空引用怎么判);④ 硬约束(BOM 原样补回、行尾由 `.gitattributes` 写死、冻结历史行与原始证据不回改、代码头注释引用的设计约束章节保留、带 BOM 文件名单);⑤ 自检与交付格式(逐文件命中数、删了哪几行、残留数、门禁复跑结果)。`send_message` 只发路径 + 关键裁定,长中文正文不要整段塞进消息(一次串多条长消息会撑爆 120s,发出 1 条后 abort,剩余未发)。 6. **逐处替换断言命中数**(同第 7 步的 `rep(tag, old, new, want)`),且 `old` 串**从原文取、不凭记忆敲**:本仓中文引号与 ASCII 双引号混用(实测某文档里的「中文引号」其实是 ASCII `"`),凭印象写 `old` 必 `got=0`;断言抛错后先 `git status --porcelain=v1 -- <文件>` 自证文件未被别道改动,再回读该行真身重跑。删行类改动单独记 tag 并打印删了几行、行号与原行长度。多道并行时同一文件常被别道改过:`edit` 报 `file changed since it was read` → 重新 `read` 再改;报 `ReplaceFileW EIO (Win32 1175)` → 先自证文件字节完好(BOM / CRLF / `EF BF BD` 三项)再重试同一笔,不要顺手改内容。 7. **落地位置写死(这一族只有这几条兜)**: - - `docs/编号规范.md` **§4.1.1「已停发的族」表加一行**,三列齐全,第三列直写「⚠ **这一族从来没有机器面**:中文前缀不进任何编号语料(族 pattern 全是拉丁形态),而两道编号门禁已于 2026-10-28 / 29 退役 → 只有本表 + 归档换算表 + 评审三条兜;`id_aliases.json` 刻意不登记(没有机器读者,登记等于多一张没人核的表)」; + - `docs/文档规范.md` **§7.1「已停发、只读的旧号」段加一行**,三列齐全,第三列直写「⚠ **这一族从来没有机器面**:中文前缀不进任何编号语料(族 pattern 全是拉丁形态),而两道编号门禁已于 2026-10-28 / 29 退役 → 只有本表 + 归档换算表 + 评审三条兜;`id_aliases.json` 刻意不登记(没有机器读者,登记等于多一张没人核的表)」; - `scripts/archive/id_gate/编号治理历史.md` **§9.3 逐号换算表**(旧号形态 → 语义短语 → 现行口径出处;本族实测 14 行 = 0、0b、1~12)+ 同篇 §9 批次段落(裁定原文与逐号结论都落在归档正文),**写明旧号永久作废、不得重新取走**; - 表内**把形态写成「卡」+ 数字而不复述字面量**:规范本身是门禁语料,复述字面量会把「讲规则的文档」变成自己的引用站点; - **同步叙述**:`AGENTS.md`「文档与图形」的销项条目、`docs/README.md`(例:`数据可信.md = 三项阻塞任务` → 两项)、`docs/任务规划/README.md`、`docs/任务规划/登记簿.md`——「剩余三项」这类旧口径实测归零; diff --git a/.dsh/skills/stale-doc-count-sweep/reference/pitfalls.md b/.dsh/skills/stale-doc-count-sweep/reference/pitfalls.md index c7675d87..69d76350 100644 --- a/.dsh/skills/stale-doc-count-sweep/reference/pitfalls.md +++ b/.dsh/skills/stale-doc-count-sweep/reference/pitfalls.md @@ -21,4 +21,4 @@ - **误报跟着改**:「< 40KB」是绘制缓冲红线,与页数无关。 - **带日期戳的测量臆改新数**:「2026-10-26 实跑 …覆盖 40 页」改成 47 就是把历史测量冒充现值;只加「当时」。 - **用截断的 grep 输出判定**:`cut -c` 截掉的后半句常含日期戳/口径,据此分类必错。 -- **新写文本别再造编号**:两道编号门禁都已退役(全库八项校验 2026-10-28、只查新增行 2026-10-29,脚本与白名单在 `scripts/archive/id_gate/`),**撞号不再有机器报警**,只剩规范与评审——所以这批文本的形态自查要自己做(`docs/编号规范.md` §1 三句;要机器帮忙就手工跑 `scripts/archive/id_gate/check_ids_new.py --worktree`)。 +- **新写文本别再造编号**:两道编号门禁都已退役(全库八项校验 2026-10-28、只查新增行 2026-10-29,脚本与白名单在 `scripts/archive/id_gate/`),**撞号不再有机器报警**,只剩规范与评审——所以这批文本的形态自查要自己做(`docs/文档规范.md` §7.1;要机器帮忙就手工跑 `scripts/archive/id_gate/check_ids_new.py --worktree`)。 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2f0a500a..ae298065 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -704,9 +704,9 @@ repos: # (保留可复现性,**不再进提交门禁**)。退役路线与判据替换见规范 §8.5。 # 14) 编号门禁(2026-10-28 上线只查新增行那一道;2026-10-29 用户裁定**整体退役**,钩子已摘) - # 退役后编号形态没有机器面:判据回到 docs/编号规范.md §1 三句自问 + §4.1 族总表 + 评审。 + # 退役后编号形态没有机器面:判据回到 docs/文档规范.md §7.1(一律不发编号)+ 评审。 # 脚本移入 scripts/archive/id_gate/check_ids_new.py(手工可跑,--self-test 保留),留档说明 - # → docs/门禁说明/id-check-new.md;手工普查与恢复机器面 → docs/编号规范.md §8.5。 + # → docs/门禁说明/id-check-new.md;手工普查与恢复机器面 → scripts/archive/id_gate/README.md。 # ⚠ 计数口径:本条摘除使 YAML 解析条目 52 → **51**,须与 AGENTS.md 的「共 N 个钩子」、 # docs/门禁说明/README.md §2 标题三数同源同批改(自查命令见该条;别在注释里写数钩子的字面量)。 diff --git a/AGENTS.md b/AGENTS.md index f0e5822e..01f4e0b7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -94,7 +94,7 @@ ## 提交门禁(pre-commit) -- 任一失败即拦截,共 **52 个钩子**(**口径 = YAML 解析后的 hook 条目数**:自查命令与「声明 / 文档 / 实跑」三数同源核对见 `docs/门禁说明/README.md` §2 首条——⚠ 直接 grep 配置里的声明行会多算一条**注释掉的**候选钩子(比口径多 1),不是口径;**配置注释里也别复述那个 grep 字面量**,它会让文本计数再虚高 1(2026-10-27 实测踩过);加一条钩子就同批改 AGENTS 与门禁索引两处计数。2026-10-25 道E 连加 `bom-guard` / `setview-check` / `uinav-selftest` 三条,2026-10-26 加 `generated-fresh` 一条,2026-10-27 加 `nested-comment` 一条;2026-10-28 加 `id-check-new` 一条并同批退役 `id-check`(口径 52 → 51:编号门禁换牙——新的只查新增行、零语料,旧的八项全库校验连语料一起移入 `scripts/archive/id_gate/`,手工普查与恢复机器面见 `docs/编号规范.md` §8.5);2026-10-29 加 `skill-size` 一条(51 → 52),同日按用户裁定**退役 `id-check-new`**(52 → **51**:只查新增行的编号门禁整体退场,脚本与白名单一起移入 `scripts/archive/id_gate/`,编号形态此后无机器面,留档 `docs/门禁说明/id-check-new.md`);2026-10-30 加 `mermaid-syntax` 一条(51 → **52**:mermaid 围栏内确定性语法——坏图此前只能靠肉眼在渲染端发现,实证见专篇);**每种门禁一篇详解(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径)→ `docs/门禁说明/README.md` 索引**;通用机制与整体口径 → `docs/代码规范/pre-commit使用说明.md`):通用 5 + `gitlint` + `cppcheck` / `test-cppcheck` + `no-mojibake` + `coding-standard` + 文档三件套 `doc-links` / `task-table` / `mem-numbers` + `lv-conf-sync`(两份 `lv_conf.h` 特性子集一致)+ `cubemx-survival` + `bom-guard` / `setview-check` / `uinav-selftest`(2026-10-25 道E 那三条:前半句的加钩流水里有它们、逐项枚举里漏了,补上后本行各项相加才等于 51;2026-10-30 又加 `mermaid-syntax` 后此句的"等于"目标数为 52)+ 主机侧单测 **22 根专属钩子**(`-unit-test` 后缀 = 有独立 `files:` 触发面、需要秒级归因的那个子集;2026-10-25 增补 adc-cal / prot-dim / vol-idle-sync / ui-data / meas / run-par 六根)——**这是口径不是缺口**:`test/host/` 实测 47 套带 `run_unit_test.py`(48 个一级目录除 `common`),其余 **25 套**(含 `test/host/ui_sink`、录波三套与屏板链路三套)没有专属钩子,但每次 CI / `scripts/ci_local.py` 都被 `test-coverage` 总闸全量真跑并守基线回退,**失败照样拦**,只是归因落在总闸输出上;**没有专属钩子 ≠ 没被跑**,22 套台账与补钩子的判据 → `docs/门禁说明/host-unit-tests.md` §6 第 4 条。**Lead 裁定 2026-10-27:不补第 23 根**——读「这套跑没跑」去看总闸输出,别数钩子(原写「23 个 / 含 ui-sink 七个」是双重错:既把 22 说成 23,又宣称 ui-sink 有钩子——配置历史里 `ui-sink-unit-test` 从未存在)+ `test-coverage`(**覆盖率总闸**:跑全部 47 套并守基线回退;缺 mscoverage 组件时按用户裁定 **FAIL**、不 skip,2026-10-24)+ `test-suite-switch` + `registration-check`(双端注册反向校验 + UI 页面描述符表接线,登记簿条目「rs485_task 白名单缺口」)+ `generated-fresh`(**生成器幂等性**:把 `tools/menu_gen/gen_menu.py`、中文字库链、`tools/arch_diagram/gen_*.py` 拷进**系统临时目录**重跑,与工作区**逐字节**必须一致——钩子只读、不写仓库也不 stash 别人在飞的改动;实证 `0f7b5a87` 改了模板文字没重跑生成物,接线前实测另有 5 张 `docs/images/` 配图已漂 → 钉成只减不增基线,**业务生成物零豁免面** → `docs/门禁说明/generated-fresh.md`)+ `nested-comment`(**块注释嵌套**:注释体内再出现 /* 会被 ARMCC 报 9-D,且**按包含者数量刷屏**、只在重编译该 TU 时才暴露;本仓诱因就是「在注释里写作用域/通配路径」,改法是写全目录或用尖括号 ;接线当日实扫 403 个 .c/.h,新发 0、存量 2 处(`test/host/common/` 两份假件头)钉只减不增基线 → `docs/门禁说明/nested-comment.md`)+ `skill-size`(**SKILL.md 不超插件写侧上限 65536 字节**:dsh-mnemon 只在写侧校验、加载侧不查,超限技能照常可读却每次「生成草案」被拒、永久卡在「生成中」;另查 `reference/` 指针悬空与 BOM → `docs/门禁说明/skill-size.md`)+ `mermaid-syntax`(**mermaid 围栏语法预检**:` ```mermaid ` 块里只查「错了必渲染失败」三条——图类型头 / `-.` 后直接跟管道(本坑:屏板链路设计说明 §1 坏图靠肉眼在渲染端发现,期间各文档门禁全绿)/ subgraph 与 sequence 块的 `end` 计数配对;零语料空基线、`docs/芯片手册/` 与 doc-links 同排除面 → `docs/门禁说明/mermaid-syntax.md`)+ `mem-budget`(RAM 92% 预算门禁,登记簿条目「缩堆迁 CCM 后半(暂缓)」)+ `font-charset`(UI 字符集差集检查,防缺字白框)+ `ui-golden`(UI 像素回归,菜单 8 状态 + 内容页 66 张黄金参考)+ `layer-deps`(**分层方向**:`Drivers/BSP/**` 不得 include `App/**` 的头;存量 3 条基线只减不增(2026-10-25 记录 reader 注入削掉 UI 记录 3 条边,6→3))+ `bsp-err`(**BSP 错误码与超时命名约定**:公开 API 不得拿 `HAL_StatusTypeDef`/`bool` 当错误通道、`*_TIMEOUT` 宏不得取负值、非 void 须写「返回值:」、**返回错误码的函数不得裸丢弃返回值**(须接住或显式 `(void)`;实测编译器与 cppcheck 都不报这类,只有这条会响);约定正文 `Drivers/BSP/bsp_err.h`,存量基线只减不增(2026-10-23 首清点 19 条 → 已还 18;`consume-result` 上线又暴露 37 条存量丢弃 → **现 38 条**))。**提交期实跑 49 根**(2026-10-30 起,前值是 48;三根慢钩子让位的裁定 2026-10-28):`cppcheck` / `test-cppcheck` / `test-coverage` 三根带 `stages: [manual]`——实测合计 ~165 s = 一次带代码提交耗时的三分之二,提交期只跑快的那些;这三根由**远端 CI** 强制(`.gitea/workflows/ci.yml` 的「手动阶段门禁」步,逐根 `--hook-stage manual`)与 `scripts/ci_local.py` 的 manual 段,本地手工复跑 `python -m pre_commit run --all-files --hook-stage manual `(一次只能一个 id) +- 任一失败即拦截,共 **52 个钩子**(**口径 = YAML 解析后的 hook 条目数**:自查命令与「声明 / 文档 / 实跑」三数同源核对见 `docs/门禁说明/README.md` §2 首条——⚠ 直接 grep 配置里的声明行会多算一条**注释掉的**候选钩子(比口径多 1),不是口径;**配置注释里也别复述那个 grep 字面量**,它会让文本计数再虚高 1(2026-10-27 实测踩过);加一条钩子就同批改 AGENTS 与门禁索引两处计数。2026-10-25 道E 连加 `bom-guard` / `setview-check` / `uinav-selftest` 三条,2026-10-26 加 `generated-fresh` 一条,2026-10-27 加 `nested-comment` 一条;2026-10-28 加 `id-check-new` 一条并同批退役 `id-check`(口径 52 → 51:编号门禁换牙——新的只查新增行、零语料,旧的八项全库校验连语料一起移入 `scripts/archive/id_gate/`,手工普查与恢复机器面见 `scripts/archive/id_gate/README.md`);2026-10-29 加 `skill-size` 一条(51 → 52),同日按用户裁定**退役 `id-check-new`**(52 → **51**:只查新增行的编号门禁整体退场,脚本与白名单一起移入 `scripts/archive/id_gate/`,编号形态此后无机器面,留档 `docs/门禁说明/id-check-new.md`);2026-10-30 加 `mermaid-syntax` 一条(51 → **52**:mermaid 围栏内确定性语法——坏图此前只能靠肉眼在渲染端发现,实证见专篇);**每种门禁一篇详解(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径)→ `docs/门禁说明/README.md` 索引**;通用机制与整体口径 → `docs/代码规范/pre-commit使用说明.md`):通用 5 + `gitlint` + `cppcheck` / `test-cppcheck` + `no-mojibake` + `coding-standard` + 文档三件套 `doc-links` / `task-table` / `mem-numbers` + `lv-conf-sync`(两份 `lv_conf.h` 特性子集一致)+ `cubemx-survival` + `bom-guard` / `setview-check` / `uinav-selftest`(2026-10-25 道E 那三条:前半句的加钩流水里有它们、逐项枚举里漏了,补上后本行各项相加才等于 51;2026-10-30 又加 `mermaid-syntax` 后此句的"等于"目标数为 52)+ 主机侧单测 **22 根专属钩子**(`-unit-test` 后缀 = 有独立 `files:` 触发面、需要秒级归因的那个子集;2026-10-25 增补 adc-cal / prot-dim / vol-idle-sync / ui-data / meas / run-par 六根)——**这是口径不是缺口**:`test/host/` 实测 47 套带 `run_unit_test.py`(48 个一级目录除 `common`),其余 **25 套**(含 `test/host/ui_sink`、录波三套与屏板链路三套)没有专属钩子,但每次 CI / `scripts/ci_local.py` 都被 `test-coverage` 总闸全量真跑并守基线回退,**失败照样拦**,只是归因落在总闸输出上;**没有专属钩子 ≠ 没被跑**,22 套台账与补钩子的判据 → `docs/门禁说明/host-unit-tests.md` §6 第 4 条。**Lead 裁定 2026-10-27:不补第 23 根**——读「这套跑没跑」去看总闸输出,别数钩子(原写「23 个 / 含 ui-sink 七个」是双重错:既把 22 说成 23,又宣称 ui-sink 有钩子——配置历史里 `ui-sink-unit-test` 从未存在)+ `test-coverage`(**覆盖率总闸**:跑全部 47 套并守基线回退;缺 mscoverage 组件时按用户裁定 **FAIL**、不 skip,2026-10-24)+ `test-suite-switch` + `registration-check`(双端注册反向校验 + UI 页面描述符表接线,登记簿条目「rs485_task 白名单缺口」)+ `generated-fresh`(**生成器幂等性**:把 `tools/menu_gen/gen_menu.py`、中文字库链、`tools/arch_diagram/gen_*.py` 拷进**系统临时目录**重跑,与工作区**逐字节**必须一致——钩子只读、不写仓库也不 stash 别人在飞的改动;实证 `0f7b5a87` 改了模板文字没重跑生成物,接线前实测另有 5 张 `docs/images/` 配图已漂 → 钉成只减不增基线,**业务生成物零豁免面** → `docs/门禁说明/generated-fresh.md`)+ `nested-comment`(**块注释嵌套**:注释体内再出现 /* 会被 ARMCC 报 9-D,且**按包含者数量刷屏**、只在重编译该 TU 时才暴露;本仓诱因就是「在注释里写作用域/通配路径」,改法是写全目录或用尖括号 ;接线当日实扫 403 个 .c/.h,新发 0、存量 2 处(`test/host/common/` 两份假件头)钉只减不增基线 → `docs/门禁说明/nested-comment.md`)+ `skill-size`(**SKILL.md 不超插件写侧上限 65536 字节**:dsh-mnemon 只在写侧校验、加载侧不查,超限技能照常可读却每次「生成草案」被拒、永久卡在「生成中」;另查 `reference/` 指针悬空与 BOM → `docs/门禁说明/skill-size.md`)+ `mermaid-syntax`(**mermaid 围栏语法预检**:` ```mermaid ` 块里只查「错了必渲染失败」三条——图类型头 / `-.` 后直接跟管道(本坑:屏板链路设计说明 §1 坏图靠肉眼在渲染端发现,期间各文档门禁全绿)/ subgraph 与 sequence 块的 `end` 计数配对;零语料空基线、`docs/芯片手册/` 与 doc-links 同排除面 → `docs/门禁说明/mermaid-syntax.md`)+ `mem-budget`(RAM 92% 预算门禁,登记簿条目「缩堆迁 CCM 后半(暂缓)」)+ `font-charset`(UI 字符集差集检查,防缺字白框)+ `ui-golden`(UI 像素回归,菜单 8 状态 + 内容页 66 张黄金参考)+ `layer-deps`(**分层方向**:`Drivers/BSP/**` 不得 include `App/**` 的头;存量 3 条基线只减不增(2026-10-25 记录 reader 注入削掉 UI 记录 3 条边,6→3))+ `bsp-err`(**BSP 错误码与超时命名约定**:公开 API 不得拿 `HAL_StatusTypeDef`/`bool` 当错误通道、`*_TIMEOUT` 宏不得取负值、非 void 须写「返回值:」、**返回错误码的函数不得裸丢弃返回值**(须接住或显式 `(void)`;实测编译器与 cppcheck 都不报这类,只有这条会响);约定正文 `Drivers/BSP/bsp_err.h`,存量基线只减不增(2026-10-23 首清点 19 条 → 已还 18;`consume-result` 上线又暴露 37 条存量丢弃 → **现 38 条**))。**提交期实跑 49 根**(2026-10-30 起,前值是 48;三根慢钩子让位的裁定 2026-10-28):`cppcheck` / `test-cppcheck` / `test-coverage` 三根带 `stages: [manual]`——实测合计 ~165 s = 一次带代码提交耗时的三分之二,提交期只跑快的那些;这三根由**远端 CI** 强制(`.gitea/workflows/ci.yml` 的「手动阶段门禁」步,逐根 `--hook-stage manual`)与 `scripts/ci_local.py` 的 manual 段,本地手工复跑 `python -m pre_commit run --all-files --hook-stage manual `(一次只能一个 id) - **范围 = 项目代码**:第三方(`Lib/`、`Middlewares/`、CMSIS、HAL、`lftpd`、`dhara`、`MDK-ARM`)排除;`cppcheck`/`coding-standard` 另排除 `test/`,规范检查再排除 CubeMX 生成的 `Src/`/`Inc/`。**`simulator/` 已纳入全部钩子**(2026-10-11)——生成物只靠 `.gitignore` 挡,**不在 `exclude` 里写目录名**(教训见 `docs/代码规范/pre-commit使用说明.md` §5.5) - ⚠ **pre-commit 4.x 已移除 `always: true`**(实测对 `local` 钩子只告警 `Unexpected key(s)` 并跳过)→ 想"总是跑"的钩子**必须让 `files:` 覆盖到所有会触发它的文件**,没有兜底开关 - **改写型钩子(`trailing-whitespace` + `end-of-file-fixer`)豁免 CubeMX/Keil 生成文件**(配置里 YAML 锚点 `&cubemx-generated`);⚠ **只读检查不受影响**:`cppcheck` / 乱码 / `cubemx-survival` / `task-table` / `mem-numbers` 仍覆盖 `Src/`、`Inc/` @@ -178,7 +178,7 @@ | 存储栈(FatFs / dhara / lftpd / 两条 FatFs 陷阱) | `docs/架构设计/STM32F4-Base存储架构说明.md` | | RAM / 栈预算 / 容量台账 | `docs/内存管理/RAM使用分析与优化方案.md`、`内存内容分配策略.md` | | **每个提交门禁一篇详解**(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径) | `docs/门禁说明/README.md`(52 个钩子 → 30 篇索引,其中 2 篇是退役留档 + 1 指针) | -| **还想给东西发编号?**(**2026-11-02 用户裁定:人读文档清退存量编号**,写语义短语;任务/批次短号与残留分层叫法先清,机器键例外见 §0;后续批次继续清退) | `docs/编号规范.md`(§0 新口径、§1 默认答案、§4.1 存量族、§8.5 手工普查) | +| **还想给东西发编号?**(**一律不发**,写语义短语;人读文档里的存量编号也在清退,机器键例外见那一节;清理判据与存量族表都在这里) | `docs/文档规范.md` §7.1 | | 提交门禁通用机制(阶段 / stash 陷阱 / 触发面 / 增量拦截三段式) | `docs/代码规范/pre-commit使用说明.md` §2 | | 代码规范 V1.0 / cppcheck 口径 | `docs/代码规范/嵌入式C语言代码规范_V1.0.md`、`cppcheck使用说明.md` | | 自动化测试 / 实机测试 / 板级套件 | `docs/测试说明/流程与规范/自动化测试流程.md`、`实机测试实施指南.md`、`board-test-suite` skill | diff --git a/App/algo/README.md b/App/algo/README.md index 44f11b6b..812a518e 100644 --- a/App/algo/README.md +++ b/App/algo/README.md @@ -241,7 +241,7 @@ ADC 引脚电压 V)+ `adc_health_rail_watch()` ×9(「采样通道自检」 3. 加 `test/host/<模块>/` 主机单测(照 `test/host/meas` 或 `test/host/soe_store` 抄目录形态与 `run_unit_test.py`)。**要不要补 `.pre-commit-config.yaml` 专属钩子按 Lead 裁定 2026-10-27:默认不补**, 由 `test-coverage` 总闸全量真跑;确有秒级归因需求再单独申请。用例标题写「它在验证什么」这类语义 - 短语,**不要发字母紧跟数字的新编号**(`docs/编号规范.md` §4.1「已停发」栏:停发不等于可以新发)。 + 短语,**不要发字母紧跟数字的新编号**(`docs/文档规范.md` §7.1:停发不等于可以新发)。 4. 消费者写在 `App/task/`,本层只出"数";跨转换器禁令见 §3 开头四条红线。 5. 在本 README §1 清单加一行,并在 `docs/算法/采集与算法层设计说明.md` 里写清该模块的契约与理由。 6. **单测产出的互验字节(要被别人的脚本读的那些):跑测之后立刻刷新副本并记下 sha256**。三套录波单测把合成段落 diff --git a/docs/产品需求/产品需求设计文档.md b/docs/产品需求/产品需求设计文档.md index 6744c885..b0c013b5 100644 --- a/docs/产品需求/产品需求设计文档.md +++ b/docs/产品需求/产品需求设计文档.md @@ -1641,7 +1641,7 @@ docs/任务规划/UI补齐.md §5);原「当前执行 6 项」(记录 5 > 唯二例外是 复刻明细 §1.7 标为"不适用"的两条(归一化值上送、主站 IP 白名单),那是**协议语义决定**, > 不是范围裁剪。 > -> **命名**:本节条目一律用**语义短语**(编号规范 P-8 语义优先),不发字母+数字号—— +> **命名**:本节条目一律用**语义短语**,不发字母+数字号(判据见 `docs/文档规范.md` §7.1)—— > 避免与其它文档的 `S`/`A`/`P` 编号族撞名。 ### 9.1 复刻缺口总表 @@ -1820,7 +1820,7 @@ docs/任务规划/UI补齐.md §5);原「当前执行 6 项」(记录 5 | IEC 60870-5-104 上行 | [`docs/子系统设计/IEC104上行设计说明.md`](../../docs/子系统设计/IEC104上行设计说明.md) | | 数据可信(标定 / 快照 / 运行参数) | [`docs/任务规划/数据可信.md`](../任务规划/数据可信.md) | | 页面补齐规划 | [`docs/UI设计/页面补齐规划.md`](../../docs/UI设计/页面补齐规划.md) | -| 编号规范 | [`docs/编号规范.md`](../../docs/编号规范.md) | +| 条目命名与编号规则 | [`docs/文档规范.md`](../../docs/文档规范.md) §7.1 | | 部署环境 | [`docs/环境与部署/项目部署环境要求.md`](../../docs/环境与部署/项目部署环境要求.md) | | 硬件网表 | [`docs/硬件平台/V0.1_网表详细分析报告.md`](../../docs/硬件平台/V0.1_网表详细分析报告.md) | | 待办登记簿 | [`docs/任务规划/README.md`](../任务规划/README.md) | diff --git a/docs/产品需求/参考产品复刻明细.md b/docs/产品需求/参考产品复刻明细.md index 819ac40c..6fbd151c 100644 --- a/docs/产品需求/参考产品复刻明细.md +++ b/docs/产品需求/参考产品复刻明细.md @@ -731,7 +731,7 @@ tTimer_NoUI 无压无流判据(CN_ ## 11. 屏板链路复刻任务规划 -> **口径**:条目一律用**语义短语**(编号规范 P-8),执行序即表序。 +> **口径**:条目一律用**语义短语**(`docs/文档规范.md` §7.1 一律不发编号),执行序即表序。 > 改动范围只含本产品固件与 `DTU-RemoteLCD` 客户端;**屏板固件不在本仓库**, > 其行为以需求档 §5.16 为契约做黑盒验收。 > diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md index 6f65b61e..eeac085b 100644 --- a/docs/任务规划/README.md +++ b/docs/任务规划/README.md @@ -22,7 +22,7 @@ ## 0. 条目与引用规则 - **新条目使用语义短语**,一行直接说清是什么事,不再新增字母加数字编号。 -- 旧编号只用于追溯历史,不复用、不重新发号;编号族与冻结规则见 `docs/编号规范.md`。 +- 旧编号只用于追溯历史,不复用、不重新发号;规则见 `docs/文档规范.md` §7.1。 - 引用条目时写清所在文档和语义名,例如:`docs/任务规划/登记簿.md` 的 「net 层跨上下文收口」。不要只写一个短号让读者猜。 - 任务状态只维护在任务所属文件;本文件不另建一套状态表。 diff --git a/docs/文档规范.md b/docs/文档规范.md index 60985d1a..27bcc282 100644 --- a/docs/文档规范.md +++ b/docs/文档规范.md @@ -394,6 +394,54 @@ | 图 | 拓扑类用 Mermaid 代码块;技术配图走 SVG 生成器(见 [`架构设计/图形绘制流程.md`](架构设计/图形绘制流程.md)) | | 状态标记 | ✅ 已完成 / ⚠️ 注意事项 / ❌ 禁止 / 📌 要点(克制使用,不滥用 emoji) | +### 7.1 条目与编号:一律不发 + +**规则只有一句:新条目一律不配「字母+数字」编号,写语义短语。** 判「能不能发号」不看形态, +答案恒为否——`2026-10-29` 用户裁定「啥号都不发」,`2026-11-02` 又收一句:人读文档里的存量编号也清退。 +理由是同形多义:号看不懂只能去查表,短语看不懂还能靠上下文猜。 + +| 场景 | 怎么做 | +|---|---| +| 想给新需求 / 新踩坑 / 新用例 / 新待办配号 | 不发,直接写清是什么事,登记表那一行的行名就是标识。例:`双转换器无共同采样触发`、`FTP 鉴权` | +| 文档内的步骤 / 阶段 / 设计原则条目 | 写「步骤 3」「阶段 7」「DMA 边界安全」,不写 `S3` / `TM-…` / `DP-…` | +| 指某篇文档的某节 | 写「`docs/网络/网络自愈架构设计.md` §4.10」。文档名与 `§` 必须紧邻,否则门禁判不了目标(见「链接规范」一节) | +| 碰到查不到定义的号 | 删号留事实,**不要补一个定义** | +| 新东西确实要被脚本按字面量匹配 | **先问用户**(Ask first)。批下来才允许破例 | + +三条硬规矩(管既有号的引用):**号不承载语义**(严重度、优先级、模块名都不写进号里,事实一变号就开始撒谎); +**号不回收、不复用**(销项 = 删登记行 + 清掉所有引用,历史上"销掉的号被重新取走"撞过两次); +**引用必须带语义**(号旁边要有人话,别让读者被迫查表才看懂一句话)。 + +**存量族(只读)**——下表是仓库里仅剩还带编号的族,既有号继续被脚本按字面量匹配、继续被引用, +**但族里新增内容不配号**,写语义行名: + +| 族 | 形态 | 属主登记处 | +|---|---|---| +| `TRAP-*` | `TRAP-<域>-` | `docs/问题记录/*_Trap_Records.md` | +| `FR-*` | 需求 | `docs/产品需求/产品需求设计文档.md` §5 | +| `CODE-RULE-` | 代码规范条款 | `scripts/check_coding_standard.py` | +| `MENU-STATE-` | UI 状态机键 | `simulator/tests/check_menu_rows.py` | + +**已停发、只读的旧号**:登记簿 `N-x`/`S-x`/`T-x`、专项 `A-x`、网络设计条目 `F-<模块>-`、 +保护功能号 `L-`、台架阶段裸形(字母 T 紧跟一位数字)、审计 `E-xx` 与 `P0-x`~`P3-x`、 +复审残号 `S1~S14`、「数据可信」任务卡号(中文前缀「卡」+ 数字)、测试验证层级号 `L0`~`L3`。 +它们不回收、不复用;旧号 → 现行短语的换算表与逐批流水见 `scripts/archive/id_gate/编号治理历史.md`, +个别族的别名在 `scripts/archive/id_gate/id_aliases.json`(标 `retired-to-phrase` / `void`)。 + +**这些不是编号,别顺手清**:元器件位号与网名(`U5`/`C12`/`R3`/`PB12`)、数学与协议记号(`N-1`、正序 / +负序分量 `S1`/`S2`、`SHA-256`、`RS-485`、`ADC1_IN14`)、版本号(`V0.1`/`V0.2`)、协议号(`IEC 104`、`2404`)、 +活表代号(网络自愈 §5.2 的 `E0~E19`,无连字符)、Socket 状态组合 `U1~U15`、文件路径与原始日志。 +判据只有一条:**带连字符、且能在属主登记表查到定义**才叫编号;查不到的就是普通文本。 + +**清理动作**:绝不全局查找替换——同一裸形字面量可能同时是任务号、引脚名、MAC 地址或图节点 ID; +先判族、再限定 scope,每处断言命中数;改名走 `scripts/rename_ids.py`,别手工扫。 +冻结的历史证据(`docs/测试说明/测试数据/`、历史串口日志、仍设变更记录的 5 篇台账)不回改。 + +**没有机器门禁兜底**:两道编号门禁(全库八项校验、只查新增行)已分别于 2026-10-28 / 2026-10-29 退役, +脚本移入 `scripts/archive/id_gate/`,判据只剩本节 + 评审。要手工扫一批改动或恢复机器面, +命令与成本见那个目录的 `README.md`;两道门禁查过什么、为什么退,见 `docs/门禁说明/id-check.md` +与 `docs/门禁说明/id-check-new.md`。 + --- ## 8. 常见错误速查 diff --git a/docs/测试说明/单元测试/开机账本单元测试说明.md b/docs/测试说明/单元测试/开机账本单元测试说明.md index 6a75b0b7..c5a233b7 100644 --- a/docs/测试说明/单元测试/开机账本单元测试说明.md +++ b/docs/测试说明/单元测试/开机账本单元测试说明.md @@ -70,9 +70,9 @@ | `TC-BOOTSTAT-030c` | init 后连读 100 次,三类 I2C 调用计数**纹丝不动** | "任意上下文可读"不是口头承诺 | > ⚠ 这些号是**主机侧用例号**,不是板端用例号,也不是需求号;族口径沿用 -> `docs/编号规范.md` 的 TC 族(既有号只读),所以**本文就是定义位**: +> `docs/文档规范.md` §7.1 的 TC 族口径(既有号只读),所以**本文就是定义位**: > 新增/删除用例必须同步改本表——`id-check` 已于 2026-10-28 退役,悬空与孤儿**不再有机器警报**,只靠评审; -> 新增用例本身不再配号(`docs/编号规范.md` §4.1 一律停发),用语义化测试函数名。 +> 新增用例本身不再配号(`docs/文档规范.md` §7.1 一律停发),用语义化测试函数名。 --- diff --git a/docs/测试说明/单元测试/时间同步单元测试说明.md b/docs/测试说明/单元测试/时间同步单元测试说明.md index 9045022b..d405c1e2 100644 --- a/docs/测试说明/单元测试/时间同步单元测试说明.md +++ b/docs/测试说明/单元测试/时间同步单元测试说明.md @@ -107,7 +107,7 @@ test/host/time_sync/time_sync_test.c ## 2. 测试用例 > **编号停发口径**:本文档不再使用 `TC-TIMESYNC-NNN`(新条目一律语义短语, -> [`../../编号规范.md`](../../编号规范.md) §0);旧编号族已随退役整批作废,不复用。 +> [`../../文档规范.md`](../../文档规范.md) §7.1);旧编号族已随退役整批作废,不复用。 > 断言用**语义标签**命名。桩状态在每用例前由 `fakes_reset()` 复位。 ### 2.1 `time_sync_delay_fed` — 分片喂心跳延时(`tc_delay_fed`) diff --git a/docs/测试说明/流程与规范/测试文档模板规范.md b/docs/测试说明/流程与规范/测试文档模板规范.md index a79bc1a8..2b4b1c44 100644 --- a/docs/测试说明/流程与规范/测试文档模板规范.md +++ b/docs/测试说明/流程与规范/测试文档模板规范.md @@ -152,7 +152,7 @@ TC-{MOD}-{NNN} ``` -> ⚠ **本族的号已于 2026-10-27 停发**(用户裁定「批次三,不坐」→ `docs/编号规范.md` §4.1):**新用例不再配 +> ⚠ **本族的号已于 2026-10-27 停发**(用户裁定「批次三,不坐」→ `docs/文档规范.md` §7.1):**新用例不再配 > TC 号**,标识 = 语义化测试函数名 + 本文档用例表的行名(§6.4 同口径)。下面的形态约定是**读现存号**用的, > 不是起新号的模板。现存号保留、不清、不复用——测试追溯门禁按字面量读它。 diff --git a/docs/编号规范.md b/docs/编号规范.md deleted file mode 100644 index f5fd8b6b..00000000 --- a/docs/编号规范.md +++ /dev/null @@ -1,253 +0,0 @@ -# 编号规范:默认**不**用编号 - -> **一句话:语义标识是唯一形态,编号一律停发。** 2026-10-29 用户裁定:**任何族都不再新增编号**, -> 连 §4.1 那五个「有脚本按字面量匹配」的存量族也一样——既有号只读引用,族里新增内容写语义行名(§3.3)。 -> §4.1.1 另列更早停发、存量待清的族(清点见 `编号治理历史.md` §9.1)。 -> -> 这条不是洁癖,是用户 2026-10-27 的明确要求:**「不要用字母加数字的编号,简直太难以理解了,语义标识是最好的」**, -> 2026-10-29 又收一句:**「啥号都不发」**。 -> 依据也很硬:规划 / 待办 / 审计 / 差距 / 阶段这些给人看的东西,历史上全发过号,也全都变成了没人认得的代号。 -> 2026-10-26 起两批清理把编号字面量从 **10,956 压到 8,230 处**,2026-10-27 复测为 **7,828 处**(`编号治理历史.md` §8.1 有口径说明); -> 而清掉的号里绝大多数从来没被任何脚本读过一次。沿革与教训留在 `编号治理历史.md` §8.3 与 git log,正文不复述。 -> -> **本文就是唯一事实源**:两道编号门禁已分别于 2026-10-28(全库八项校验)与 2026-10-29(只查新增行) -> 退役,脚本、两张前缀白名单与族语料都在 `scripts/archive/id_gate/`,**不再进提交门禁**。 -> 形态判据只剩本文 §1 的默认答案(一律不发)+ §4.1 存量族表 + 人工评审;留档 `docs/门禁说明/id-check-new.md` -> 与 `docs/门禁说明/id-check.md`,手工普查命令与恢复机器面的成本见 §8.5。归档脚本随时能重扫一批改动的形态(`--range A..B`)。 - ---- - -## 0. 2026-11-02 用户裁定:人读文档清退存量编号 - -> **新口径:人读文档里不再出现字母+数字编号,一律写语义短语。** 此前「停发但不清理存量」的做法 -> 从本节起作废——用户明确要求把编号删掉,因为它们同形多义、读者只能靠查表才能看懂。 -> -> 本批先清退两类: -> - 任务/批次类短号(如 `B0`~`B10`、`批 2`); -> - 残留的分层叫法(如 `L0`/`L0.5`/`L1`/`L2`/`L3`/`L2.5`)。 -> -> 后续批次继续清退审计、报告、差距、阶段、复审等编号族;判据仍是「人读的文档写短语,机器读的键才留号」。 -> -> **例外(不要误删)**: -> - 脚本按字面量读取的机器键:`TC-*`(测试用例追溯)、`CODE-RULE-*`(代码规范门禁)、 -> `MENU-STATE-*`(UI 像素回归)、`TRAP-*`(陷阱台账)、`FR-*`(需求追溯); -> - 硬件位号/网名/引脚名(`U5.B10`、`PB12`、`A4:94:B6:...` 等)、协议号(`IEC 104`、`RS-485`、`2404`)、 -> 版本号(`V0.1`/`V0.2`)、文件路径与原始日志; -> - 冻结的历史证据(`docs/测试说明/测试数据/`、历史串口日志、各文档的变更记录/历史快照行)不回改,避免破坏取证。 -> -> 清理时**绝不全局查找替换**:同一裸形字面量可能同时是任务号、引脚名、MAC 地址或图节点 ID; -> 必须先判族、再限定 scope,每处断言命中数。 - - -> 存量清点与逐号换算表)2026-10-28 已整体移入 `scripts/archive/id_gate/编号治理历史.md`,下文简称 -> **`编号治理历史.md`**;它的节号沿用旧编号、故意不重排(外部文档与脚本引的是 `§4.1` / `§8.5` 这类号, -> 重排等于制造一批假链接)。要查历史判据、批次流水、「数据可信」任务卡号换算表,去那篇; -> **改现在的做法只看本文**。 - -## 1. 默认答案:不发号 - -**2026-10-29 用户裁定:新条目一律不配编号。** 这里原本是三句自问(「有脚本按字面量匹配就允许发」), -现在这条路也关掉了——判「能不能发号」不再看形态,答案恒为否。剩下的只是既有号怎么用: - -| 场景 | 怎么做 | -|---|---| -| 想给新需求 / 新踩坑 / 新用例 / 新待办配个号 | 不发,写语义行名(§3.3);登记表那一行的行名就是标识 | -| 新东西确实要被脚本按字面量匹配(比如新的回归脚本键) | **先问用户**(Ask first)。批下来才算例外,顺序见 §4.1 末条 | -| 现有文档或登记表里已经能指代这件事 | 引用它,别再发第二个号指同一件事 | -| 碰到查不到定义的号 | 删号留事实,不是补一个定义(§10) | - -三条硬规矩(管既有号的引用与处置): - -- **号不承载语义**:严重度、优先级、模块名、轮次都不写进号里。事实一变,号就开始撒谎。 -- **号不回收、不复用**:销项 = 删登记行 + 清掉所有引用 + 别名表标 `void`(§5.5)。历史上"销掉的号被 - 重新取走"撞过两次。 -- **引用必须带语义**:号旁边要有人话,裸号不许独担信息(读者不该被迫查表才看懂一句话)。 - -## 3. 三种指代方式,按这个顺序挑 - -| 优先 | 方式 | 用在 | -|---|---|---| -| ① 最好 | **语义短语** | 规划 / 待办 / 缺陷 / 风险 / 决策 / 差距 / 文档内步骤与阶段——**默认形态** | -| ② 其次 | **文档名 + 章节号** | 指某篇文档的某节(`docs/网络/网络自愈架构设计.md` §4.10,紧邻写法) | -| ③ 最后 | **编号** | 只指 §4.1 五个存量族的**既有号**(只读),且必须能反查到定义;新条目不在此列 | - -### 3.1 判定口诀 -**机器读 → 发号;人读 → 写短语。** 拿不准就写短语:短语看不懂还能靠上下文猜,号看不懂只能去查表。 - -### 3.2 编号 vs 章节引用 -章节引用不是编号,但同样要**紧邻文档名**——只写「`§` + 小节号」而不写文档名,会被 doc-links 当成本文自引用而静默放过, -这是它的已知盲区,别踩。 - -### 3.3 语义标识(默认形态,怎么写) - -- 一行短语就是标识:≤20 汉字、说清"是什么事"、**同一登记表内不撞名**(同义异写算撞名)。 -- 好的例子:`双转换器无共同采样触发`、`FTP 鉴权`、`写回缓存空闲 flush`、`队列往返基线待重验`。 - 坏的例子:`优化项 3`、`遗留问题`、`重要缺陷`——换个上下文就指代不明,等于又造了个号。 -- 登记处就是那张表:表首格写短语,**不要再配一个字母号**;跨文档引用写成 - `` `docs/任务规划/登记簿.md` 「双转换器无共同采样触发」 ``,同篇后续直接用短语。 -- 文档内的实施步骤 / 测试阶段 / 设计原则条目写中文:「步骤 3」「阶段 7」「DMA 边界安全」, - **不写 `S3` / `TM-…` / `DP-…` 这种号**。 - ---- - -## 4. 编号空间 - -### 4.1 存量族(**穷举**——2026-10-29 起连这五个族也不再发新号) - -下表**恰好 5 行**,是仓库里仅剩还带编号的族:既有号继续被脚本按字面量匹配、继续被引用,**但族里新增 -内容不再配号**(写语义行名)。「有脚本按字面量匹配它」这个旧判据自 2026-10-29 起作废——这五族的号是 -历史遗留的机器把手,不是发号许可。`TC-*` 早两天(2026-10-27)已按同一逻辑停发,清点与来龙去脉在 -`编号治理历史.md` §9.1 批次三。 - -| 族 | 形态 | 属主登记处 | 既有号被谁读 / 新写怎么办 | -|---|---|---|---| -| `TRAP-*` | `TRAP-<域>-` | `docs/问题记录/*_Trap_Records.md` | 代码注释按号反查踩坑证词;**新踩坑**在域文件里写语义行名,不再顺延号段 | -| `FR-*` | 需求 | `docs/产品需求/产品需求设计文档.md` §5 | 需求↔测试追溯的既有键;**新需求**用 §5 表格的行名(语义短语)指代,追溯按既有号跑存量 | -| `CODE-RULE-` | 代码规范条款 | `scripts/check_coding_standard.py` | 门禁按条款号报错并统计存量;**新条款先问用户**——脚本要按号统计,破例得由用户批 | -| `MENU-STATE-` | UI 状态机键 | `simulator/tests/check_menu_rows.py` | 像素回归脚本按它取状态行;**新状态同样先问用户** | -| `P-` | 编号治理的设计原则 | `scripts/archive/id_gate/编号治理历史.md` §2(2026-10-28 随沿革归档,本文不再列条目) | **只读存量**:原则已归档,新写条目按 §3.3 写语义短语 | - -> ⚠ **停发只有一层意思:不去清存量号,但发号口关死。2026-10-29 起这句话适用于全部族,不只 `TC-*`。** -> 维持原状的是**存量号**,关掉的是**发号口**。四条对照,防止往任何一边读过头: -> -> - ❌「§4.1 里的族没被点名停发,所以还能发」——**错**。五族一样不发,新条目写语义行名(§3.3); -> 指认**既有**需求 / 踩坑 / 用例仍可引用现存号(旧号只读,不是新配的许可)。 -> - ❌「停发 = 这族要废了,顺手清掉、把号腾出来复用」——**也错**。现存号是脚本与追溯机制认的把手 -> (`scripts/check_test_traceability.py` 2026-10-29 实测**只手工跑**:不在任何钩子、`scripts/ci_local.py` -> 与远端 CI 里),清它等于换机制(`编号治理历史.md` §9.1);号不回收、不复用是 §1 的硬规矩。 -> - ❌「`id_registry.json` 里 TC 族带着游标,所以那边允许我发」——**不成立**。37 个 TC 类族 2026-10-27 全部 -> 登记 `frozen: true`,34 个 `TC-HOST-*` 子族的游标钉在当日各套件存量最高号(5 个低于存量的抬到水位: -> `TC-PROTELEM-013→015`、`TC-SYSLOG-108→137`、`TC-ADCHEALTH-011→023`、`TC-ADCCAL-017→023`、 -> `TC-I104SRV-041→053`;**游标必须是字符串形态**,整型比较会静默不生效)。那是那次裁定的**登记留痕**: -> 两道编号门禁退役后没有任何东西再读这份登记——**别把「不报错」读成「允许发号」**。 -> - **已知空白面(当年登记时就写着)**:主族 `TC`(没有专属子族的模块码,如 `TC-ADCIN-` 段)的 `cursor` -> 为 `null`——一个游标表达不了每个模块码的水位,写全族最高号反而放行低号。机器面在的时候它就不响, -> 现在连壳都没有:**给这类模块码补号,即使在文档表格里一并补了定义行,一样违反裁定**,评审专门盯。 -> 要钉死它(按模块码克隆子族)与「真要清退」同属追溯机制改造,按 `编号治理历史.md` §7.3 单独开卡。 -> - **唯一的例外入口**:先由用户裁定 → 再回到 §4.1 把该族写清「哪个脚本按字面量匹配它」 → 才谈得上 -> 发号。顺序倒过来就是 `编号治理历史.md` §1.2 那四类事故的由来。 - -**已停发、存量待清**(§4.1 那五族 2026-10-29 起同样停发,区别只在存量保留、不去清;本表这些族连存量引用也要清掉,一律**不得再新增引用**;下表除 `TC-*` 外,`id_registry.json` 里剩的登记只是归档普查的 -语料残留,**不再当"登记处"读**——那份登记自 2026-10-28 起没有机器读者。清点见 `编号治理历史.md` §9.1。 -`TC-*` 是这一栏的**特例**:登记与现存号都要留着,现存号仍被追溯脚本按字面量读,不是待清对象 -(见 `编号治理历史.md` §9.1 批次三): - -| 族 | 状态 | 依据 | -|---|---|---| -| `TC-*` | **保留现存号、即日停发**:`id_registry.json` 里 37 个 TC 类族登记 `frozen: true`、34 个 `TC-HOST-*` 子族游标钉在 2026-10-27 存量水位(**该登记 2026-10-29 起无机器读者,只是裁定留痕**);现存号只减不增,新用例改用语义化测试函数名 + 文档表格行名(主族 `TC` 的空白面见上方框) | 用户裁定 2026-10-27「批次三,不坐」;本族是 §4.1 判据唯一真被脚本按字面量读的族,清它等于换追溯机制,详见 `编号治理历史.md` §9.1 批次三 | - -| 族 | 形态 | 存量 | 为什么该清 | -|---|---|---|---| -| `L-` | 保护功能号 | **批次二已整族转功能名,即日停发**:活引用 0,只剩一处**原始串口日志**(冻结证据、永久保留)与本文/技能文档的形态举例;属主文档表首格写功能名,不再配号 | 用户 2026-10-27 定调「语义标识是最好的」+ 本轮指令「把能清的族清掉一批」;发号口此前由"悬空引用"校验关着,**2026-10-29 起只由本表与评审关**。**数值游标不冻结**:L1/L2/…各段最高号不同,单一数字游标反而放行低号 | -| `F--` | 网络设计条目 | **批次一已转「`编号治理历史.md` §7 条目名」,即日停发**:代码与测试侧 0 处;属主文档 `编号治理历史.md` §7 编号列 13 条仅作历史对照(定义行不算引用) | 同上;引用旧号命中别名表 `retired-to-phrase` = **只读**,不构成发号许可 | -| `N-*` | 登记簿 `N-` | 4 处 / 3 个字面量 | 登记簿已于 2026-10-26 全面改语义短语,残留的是漏网的旧引用 | -| `TM-*` | 阶段/里程碑 `TM--` | 1 处 | 阶段号本就属 §3.3 明令不许写号的那类 | -| `T-TEST` | 台架阶段 **裸形**(字母 T 紧跟一位数字) | 活引用 0(批次一清零;余下是本文自述与技能文档的形态举例) | 裸形最危险(同字母多义),且改「台架阶段一」即可 | -| `F-*` | 网络设计条目 `F--` | 动手前 38 处 / 12 个 → **2026-10-27 批次一收口**:正文 9 处(含一个从来没有定义行的 DRV 段孤儿号,删号)+ 主机侧单测注释 1 处改「条目名」,仅属主文档 `编号治理历史.md` §7 历史对照表留 12 条编号 | 代码注释按号回指设计条目,但没有任何脚本匹配它 | - -- **新增族:2026-10-29 起一律不许**,先问用户。真批下来,顺序固定:先改本文 §4.1(写清哪个脚本按字面量 - 匹配它)→ 再写属主文档 → 届时有机器面才动 `scripts/archive/id_gate/id_registry.json` → 最后才允许在别处 - 引用。反过来做必然造出悬空号。 -- 模块码是既定缩写,事实源 = registry 的族 pattern 与属主文档标题行,**别自创**(`编号治理历史.md` §6)。 - -### 4.1.1 已停发的族(别再指,更别再"复用"这些号) - -| 停发族 | 现在怎么写 | 旧号去哪查 | -|---|---|---| -| 登记簿 `N-x` / `S-x` / `T-x`、专项 `A-x`、已删报告的 UI 簇 `U1~U5`(2026-10-26 方案 B) | 语义短语——**登记簿表首格本身就是短语**,如「双转换器无共同采样触发」「CI 远端闭环未验证」 | `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase` | -| 网络设计条目 `F-NET/F-DRV/F-MS-`(12 个,2026-10-27 批次一) | 「`编号治理历史.md` §7 + 条目名」短语,如 `(`编号治理历史.md` §7「全局读即清搁浅事件」)`;条目名的权威清单 = `docs/网络/网络自愈架构设计.md` `编号治理历史.md` §7「条目名」列;那个 DRV 段孤儿号按本节末句**删号留事实**、未补定义 | `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase`(13 条)+属主文档 `编号治理历史.md` §7 编号列仅作历史对照 | -| 「数据可信」任务卡号(中文前缀「卡」+ 数字,形态见 `编号治理历史.md` §9.3;2026-10-27 批次五) | §5 表的**标识列直接写任务名**(「端子/子板变比确认」「两点标定与精度验收」),代码注释与文档写语义短语(「标定折算落地」「未标定闭锁」「遥测快照发布」…);**逐号换算表见本文 `编号治理历史.md` §9.3** | ⚠ **这一族从来没有机器面**:两道门禁的语料族 pattern 全是拉丁形态,中文前缀本就不在其中,何况两道都已退役 → 只有本表 + `编号治理历史.md` §9.3 + 评审三条兜;`id_aliases.json` 刻意不登记(没有机器读者,登记等于多一张没人核的表) | -| 测试验证层级号(`L0`、`L0.5`、`L1~L3` 这一族,**注意与 UI 设计令牌层 L0、硬件位号 L1~L3、采集链旧层名等同形族无关**;2026-10-28 批次六) | 文档与 CI 步骤名写语义名(静态门禁 / 主机侧纯逻辑单测 / 板端测试套件 / 主机侧回归 / 人工目检);ASCII 短码(static / preflight / commitmsg / size / host-unit / coverage)**只进**日志标签、命令行旗标、CI job id、日志文件名 | ⚠ **同形族警示**:逐号换算表与判族表见 `scripts/archive/id_gate/编号治理历史.md` §10 与 §10.1(撞族六个,动手前先判族);本族虽是拉丁形态但**门禁咬不到**——两道编号门禁已退役(全库校验 2026-10-28、新增行检查 2026-10-29),停发只靠本表 + 归档换算表 + 评审 | -| `E-xx` 审计发现、`P0-x`~`P3-x` 审计条目、报告六族 `D/R/F/N/U/S`、复审残号 `S1~S14`/`A-x`/`B1~B10`/`T-x`、模拟器差距 `H-x`/`L-x`、`TM-*` 阶段号、`DP-*`、`gen`/`round`/会话临时号 | 写条目本身("原子快照取数"、"队头阻塞"、"台架日志代次 288"、"第 3 轮台架") | 别名表标 `void`;**部分死号故意不进别名表**,好让门禁继续咬残留引用 | -| 规范曾规划却从未启用的前缀族(`DEF`/`WI`/`DR`/`OQ`/`RSK`/`GAP`/`SC`/`GEN`/`MS`/`UL`/`LAT`/`CS` 等) | 同上,写事实 | 无定义,本就不该存在 | - -> 想知道某个号还活着吗:查 `id_aliases.json`(命中 `void` / `retired-to-phrase` 就是死号),或手工跑 -> `scripts/archive/id_gate/check_ids.py --top 0`——**报告制,不影响任何退出码**。**看到查不到的号, -> 正确动作是删号留事实,不是补一个定义。** - -### 4.3 冻结前缀(历史快照,正文不回改) -族还在 `scripts/archive/id_gate/id_registry.json` 里、属主登记处已删的那批:登记留着只为让归档普查 -不报"未登记前缀",游标一律冻结,**不得新增、不得复用**。⚠ 2026-10-29 起这份登记**没有机器读者**, -它是档案不是闸门——别指望写一个冻结族的号会有人来拦。 - -### 4.4 这些**不是**编号——别顺手清 -元器件位号 `U1`/`C12`/`R3`/`L5`/`D7`(硬件语料按目录整体排除)、数学与协议记号(`N-1`、测频的正序与 -负序分量 `S1`/`S2`、`SHA-256`、`RS-485`、`ADC1_IN14`、手册页码)、活表代号 `E0~E19`(网络自愈 §5.2, -**无连字符**,与死号 `E-nn` 只差一个连字符)、Socket 状态组合 `U1~U15`(网络自愈 §1.1)、档位词 `P0~P3`。 -判据只有一条:**带连字符、且能在属主登记表查到定义**才叫编号;查不到的就是普通文本,不是「漏登记的号」。 - -> 两条口径来自当年的语料审计,今天判"是不是编号"照它想:① **元器件位号整目录排除**—— -> `tools/netlist_semantics/` 是硬件知识库(字母 T 紧跟数字在那里是网络变压器位号),与 `docs/硬件平台/` -> 同口径(归档普查把它写在 `id_registry.json` 的 `excluded_paths`);② **唯一已知误判**: -> `docs/算法/傅氏算法详解.md` 里的数学记号 `N-1`(「一个周波 N 个点」的求和上界)形似 `N-x` 族, -> 属可判定的普通文本,**不清**——清了反而破坏公式。 - -## 5. 分配、引用、销项 - -### 5.1 新增编号:默认答案是没有 - -一律不发(§1、§4.1)。新条目写语义短语(§3.3),登记处的行名就是标识;引用既有号必须能反查到定义、 -旁边必须带人话(§1 三条硬规矩)。**唯一入口是用户裁定**:某样新东西确实要被脚本按字面量匹配时先问, -批下来再按 §4.1 末条的顺序落文档。 -`scripts/archive/id_gate/id_registry.json` 的族与游标登记**只在恢复机器面时才动**(§8.5):没有脚本读它, -写进去也拦不住任何人——**「registry 里查得到」从来不是发号许可**,许可只来自用户裁定。 - -### 5.3 代码注释 -**优先写短语**(`FTP 鉴权`、`监听生命周期模块化`),别写字母号;确需引用活号时必须带属主文档名。 -**规划 / 待办类编号禁止出现在代码里**——代码的寿命比任何一张待办表都长,待办表改了行,注释就成了 -永久的假引用(本仓实测:196 处这样的死引用,全是这么攒出来的)。 - -### 5.5 销项与归档 -删登记行 + **同步清掉全仓引用**(清引用是销项的一部分,不是"以后再说")+ 别名表标 `void`。 -冻结的历史(`[示例]` / `[计划]` 行、仍保留变更记录表的文档)不回改。**2026-10-28 起新文档一律不再设 -「变更记录」节**(`docs/文档规范.md` §5.1——例外清单以那一节为准,本文不复制份数,抄一份就会漂一次)。 -所以"冻结历史行"只对清单里的文档与 `scripts/archive/id_gate/` 下的归档文档生效,不是「以后还能往变更 -记录里写」的理由。**唯一例外**(用户裁定 2026-10-28):这类行里**已停发 / 作废族的示例编号**可改成形态 -描述(写成「字母紧跟数字」这类说法)——改的是示例的写法,不是历史事实;**保留现存号**族的游标数字与 -硬件位号举例不在例外内,形态化等于毁证据。原先那句「门禁对它们已豁免」随门禁一起失效: -现在没有任何门禁会去看这些行。 - -### 5.7 语义标识的登记与别名 -短语就是登记处的行名,不需要别名表;**只有"号转短语"**时才在别名表留一条 `retired-to-phrase`, -`note` 写清短语,方便把残留引用找干净。 - ---- - -## 8. 机器面:2026-10-29 起一道也没有 - -**现行没有编号门禁**:2026-10-29 用户裁定把最后那道只查新增行的 `id-check-new` 也摘了(钩子口径 -52 → 51,脚本与白名单移入 `scripts/archive/id_gate/check_ids_new.py`,留档 `docs/门禁说明/id-check-new.md`, -理由与手工跑法都在那篇)。判据回到本文 §1 的默认答案(一律不发)、§4.1 存量族表与人工评审。 - -全库八项校验(未登记前缀 / 形态不合规 / 悬空引用 / 重复定义 / 冻结族越游标 / 未紧邻文档名 / 孤儿告警 / -可判定比例 + 两根护栏)2026-10-28 退役:它查过什么、为什么退、当年清点数字 → `docs/门禁说明/id-check.md` -与 `scripts/archive/id_gate/编号治理历史.md`。**本文不抄第二份口径**——那份口径已经数错过一次了。 - -### 8.5 手工普查与恢复机器面 - -**没有门禁不等于没有工具**,两份脚本都还在,随时能跑(它们退成了工具,不是消失了): - -```text -scripts/archive/id_gate/check_ids_new.py --range A..B # 只看一段提交的新增行里有没有自造形态 -scripts/archive/id_gate/check_ids.py --top 0 # 全库存量普查(报告制,不影响退出码) -``` - -- **恢复机器面的成本**:把脚本放回 `scripts/`、在 `.pre-commit-config.yaml` 重挂一条钩子、口径 +1, - 并同批改 `AGENTS.md` 与 `docs/门禁说明/README.md` 两处计数——三处一起做,只挂钩子会在别人提交里露馅。 -- **为什么走到"一道也没有"**:2026-10-28 退全库八项校验(99 族语料养不起,成本落在每次碰文档的提交上), - 2026-10-29 退最后那道新增行拦截(用户裁定:它咬形态不咬语义,白名单本身成了维护面)。两道各自拦下过 - 什么、退役当日那次误拦(录波段文件名 `WAVE00.BIN`)→ `docs/门禁说明/id-check-new.md` 与 - `docs/门禁说明/id-check.md`;四步流水与当时的探针数字 → `scripts/archive/id_gate/编号治理历史.md`。 - ---- - -## 10. 速查 -- 看到一个不认识的号 → 先查 `id_aliases.json` 与属主登记表;查不到就**删号留事实**,不要补定义。 -- 想给任何新条目发号(含需求 `FR-*`、踩坑 `TRAP-*`、用例 `TC-*`、待办与风险)→ 不许,写语义行名(§3.3 / §4.1)。 -- 想知道「还有多少号可清」→ 看 `编号治理历史.md` §9 的存量表与三批计划。 -- 想给文档内步骤或测试阶段发号 → 不许,写「步骤 3」「阶段 7」(§3.3)。 -- 想新增前缀族 → 先问用户(Ask first);「有脚本要按字面量匹配它」这个旧判据自 2026-10-29 起不再构成许可(§1)。 -- 要改号 → `scripts/rename_ids.py` + `编号治理历史.md` §7.3 五步。 -- 编号形态拿不准 → 本文 §1 的默认答案 + §4.1 那张表;**没有任何机器会替你兜**。两道门禁的历史与退役理由 → - `docs/门禁说明/id-check.md`、`docs/门禁说明/id-check-new.md`。 -- 想让机器帮你扫一批改动,或要恢复机器面 → §8.5。 diff --git a/docs/网络/网络自愈架构设计.md b/docs/网络/网络自愈架构设计.md index 45cc0e23..bb971255 100644 --- a/docs/网络/网络自愈架构设计.md +++ b/docs/网络/网络自愈架构设计.md @@ -30,7 +30,7 @@ > ⚠ **字母 `E` 有两套编号,靠连字符区分**: > - `E0`~`E19`(**无**连字符)= 本文的**自愈实验**编号,逐条见 §5.2; > - 带连字符的 `E-` = **历史审计发现**编号(属主文档已于 2026-10-15 删除, -> 编号冻结于 `docs/编号规范.md` §4.3)—— +> 编号冻结,不得新增、不得复用(族表见 `docs/文档规范.md` §7.1)—— > §5.2 末行引用它是为了记录该发现的**收口台架**,**不是**实验编号 > (证据:`test/host/e02_probe.py`(已随 :8888 退役于 2026-11-04 删除,正文见 git 历史) > 的文档串自述它是该审计发现的 timeSync 触发形态探针); @@ -665,7 +665,7 @@ DISCONNECT 会被 `(void)` 丢掉。但 RECV_OK 是条件位(下轮补回) ## 7. 编号发现速查(12 条,历史对照表) -> ⚠ **本节的条目号已于 2026-10-27 停发(编号规范 §9 批次一),正文/注释改用下表「条目名」列指代**; +> ⚠ **本节的条目号已于 2026-10-27 停发(批次一),正文/注释改用下表「条目名」列指代**; > 下表保留编号列仅作历史对照(删表会让历史行的引用报「未登记前缀」假错), > 全仓不得再新增对这些号的引用——代码注释与关联文档已改写为「条目名 + §7 落点」的语义形式(2026-10-27 批次一收口: > 本文件残留 9 处正文引用(其中孤儿号 `F-DRV-9` 就地删号留事实)+ 1 处主机侧单测注释已全部转语义)。 @@ -751,7 +751,7 @@ DISCONNECT 会被 `(void)` 丢掉。但 RECV_OK 是条件位(下轮补回) | D7 | 同族残留**不在监听生命周期根治范围**,各自单列:U1(CONNECTING 滞留)、U11、U12、U14、U15,以及审计项 IEC 104 上行~SOE 记录 | 与监听生命周期不同因,混做会让回归面失控 | > `D5` 是"分阶段实施顺序"的决策,实施完成后不再构成任何设计含义 → 已删除;**编号不回收** -> (沿用 `docs/编号规范.md` §5.5 的游标不回退约定)。 +> (沿用编号不回收、游标不回退的既定约定,见 `docs/文档规范.md` §7.1)。 ## 11. 模块化边界(`net_listener.c` / `net_events.c`) diff --git a/docs/门禁说明/host-unit-tests.md b/docs/门禁说明/host-unit-tests.md index 2b2dd9df..181201ff 100644 --- a/docs/门禁说明/host-unit-tests.md +++ b/docs/门禁说明/host-unit-tests.md @@ -34,7 +34,7 @@ | `ui-data-unit-test` | UI 数据快照层 `Drivers/BSP/UI/ui_data.c` 与各页写入方 | 共同机制:`run_unit_test.py` 在宿主编译器上编译被测 `.c` + 该目录的 `stub/` 替身,跑断言并汇总 -用例数(各模块的 `TC-HOST-<模块码>` 号段见 `docs/编号规范.md`)。 +用例数(各模块的 `TC-HOST-<模块码>` 号段见 `docs/文档规范.md` §7.1)。 各套件的来历与牙齿(迁移自原手册;2026-10-11 至 10-15 分批挂闸): @@ -128,12 +128,12 @@ ## 7. 豁免与基线 - 没有基线:新增或改动的模块必须自身通过。 -- 用例号段:`TC-HOST-<模块码>` 以 `test/host/<目录>/*` 为属主登记处(`docs/编号规范.md` §4.1); +- 用例号段:`TC-HOST-<模块码>` 以 `test/host/<目录>/*` 为属主登记处(族表见 `docs/文档规范.md` §7.1); **该号段 2026-10-27 起停发新号**(用户裁定「批次三,不坐」):新增用例**不配号**,写语义化测试函数名, 现存号只读、不清、不复用。追溯器只双向比对已有集合,**不会**因为新用例没号而报错——别把它当"要带号"。 **当时的机器口径**(2026-10-27 落地,如今只剩留痕):`scripts/archive/id_gate/id_registry.json` 37 个 TC 类族登记 `frozen: true`、34 个子族游标冻结在当日存量最高号, 当年在号段上再加新号 = `id-check` 校验 5 错误级;无专属子族的模块码落在主族 `TC`(游标仍为空)。**两道编号门禁已退役(2026-10-28 / 29),这些校验都不再跑**,那一面如今只由规范与评审兜住 - → `docs/编号规范.md` §4.1 末框与 `scripts/archive/id_gate/编号治理历史.md` §9.1 末段。 + → `docs/文档规范.md` §7.1(一律不发编号)与 `scripts/archive/id_gate/编号治理历史.md` §9.1 末段。 ## 8. 改这套门禁本身(新增一个模块的宿主单测) diff --git a/docs/门禁说明/id-check-new.md b/docs/门禁说明/id-check-new.md index da984c48..b482145d 100644 --- a/docs/门禁说明/id-check-new.md +++ b/docs/门禁说明/id-check-new.md @@ -3,9 +3,9 @@ > ⚠ **本文是退役留档,不要照着它去改门禁。** > 2026-10-29 用户裁定:这道门禁整体去掉——钩子从 `.pre-commit-config.yaml` 摘除(YAML 解析口径 > 52 → 51),脚本移入 `scripts/archive/id_gate/check_ids_new.py`(仍可手工跑,`--self-test` 保留)。 -> **此后编号形态没有任何机器面**:判据只剩 `docs/编号规范.md` §1 的默认答案(一律停发)、§4.1 存量族 -> (穷举)与人工评审。前辈 `id-check`(全库八项校验)已于 2026-10-28 退役 → `docs/门禁说明/id-check.md`; -> 两步合起来的路线 → `docs/编号规范.md` §8.5。 +> **此后编号形态没有任何机器面**:判据只剩 `docs/文档规范.md` §7.1 的默认答案(一律停发)、 +> 那张存量族表(穷举)与人工评审。前辈 `id-check`(全库八项校验)已于 2026-10-28 退役 → `docs/门禁说明/id-check.md`; +> 两步合起来的手工普查命令 → `scripts/archive/id_gate/README.md`。 > 下面 §1~§6 是退役前的原样描述,只在手工复查「这批改动 / 这段历史里有没有野生编号」时用得上。 ## 1. 它当初在查什么 @@ -46,7 +46,7 @@ 一条;不加就误拦,加了就把该前缀后头的所有数字永久放宽。2026-10-29 当天就撞过一次:文档里写 录波段文件名 `WAVE00.BIN` 被拦,先改写成 `WAVE.BIN` 绕行、再登记 `WAVE` 前缀(`KNOWN_BARE` 最后一次改动)。这类"合法新词撞形态门"是常态,不是意外。 -3. **默认形态早就是语义短语**(`docs/编号规范.md` §1 与 §3.3;登记簿新条目一律写语义短语, +3. **默认形态早就是语义短语**(`docs/文档规范.md` §7.1;登记簿新条目一律写语义短语, `docs/任务规划/README.md` §0),新造号在评审里本来就看得见,机器面的边际收益低于误拦成本。 4. 与 2026-10-28 摘掉全库审计是**同一条判断的延续**:编号体系不再产生价值。留着这道门只让"要不要 再登记一个前缀"变成反复出现的小额开销。 @@ -67,7 +67,7 @@ ## 5. 此后靠什么守着 -- `docs/编号规范.md` §1「默认答案:不发号」+ §4.1 存量族(穷举)+ §3.3 禁发范围——**新增族不再需要 +- `docs/文档规范.md` §7.1「一律不发编号」+ 存量族表(穷举)+ 禁发范围——**新增族不再需要 登记机器白名单**,那个"唯一口子"随门禁一起消失;答不出"哪个脚本要按字面量匹配它"就别建族。 - 评审与销项纪律:`docs/任务规划/README.md` §0(已随销项消失的号永久作废、不得复用)。 - ⚠ 要认下丢了什么:**"销项删行后号被重新取走"这类事故当初正是靠机械牙发现的**(2026-10-14 撞号 diff --git a/docs/门禁说明/id-check.md b/docs/门禁说明/id-check.md index 8cbfc548..027277d2 100644 --- a/docs/门禁说明/id-check.md +++ b/docs/门禁说明/id-check.md @@ -4,14 +4,14 @@ > 2026-10-28 用户裁定:编号体系本身不再产生价值,全库语料审计的维护成本高过收益 > → 钩子摘除(52 → 51),脚本与两份语料整体移入 `scripts/archive/id_gate/`; > **接班件 `id-check-new` 也已于 2026-10-29 退役**(只查新增行那道,用户裁定)→ `docs/门禁说明/id-check-new.md`。 -> 两道编号门禁自此全部退场:**编号形态没有机器面**,判据回到 `docs/编号规范.md` §1 三句自问 + §4.1 -> 族总表 + 人工评审;归档脚本 `scripts/archive/id_gate/check_ids_new.py` 可随时手工普查形态。 -> 退役路线与判据替换 → `docs/编号规范.md` §8.5。下面保留退役前的原样描述与实测基线, +> 两道编号门禁自此全部退场:**编号形态没有机器面**,判据回到 `docs/文档规范.md` §7.1(一律不发编号, +> 写语义短语)+ 人工评审;归档脚本 `scripts/archive/id_gate/check_ids_new.py` 可随时手工普查形态。 +> 退役路线与手工普查命令 → `scripts/archive/id_gate/README.md`。下面保留退役前的原样描述与实测基线, > 只在手工复查「存量编号现状」时还用得上。 > 一句话:它管**"号"这个东西不许野生**——每个编号必须属于一个已登记的族、形态合法、 > 有定义处、有人引用、引用它的时候说清是哪篇文档的号。 -> 规范正文 = `docs/编号规范.md`(§1 默认答案(一律停发)、§4.1 存量族〔穷举〕、§8 门禁与实测基线),本门禁是那八项的机械执行。 +> 规范正文 = `docs/文档规范.md` §7.1(一律不发编号 / 存量族表 / 已停发族),本门禁是那八项的机械执行。 - 配置:`entry: python scripts/archive/id_gate/check_ids.py --strict`,`pass_filenames: false`, `files:` 覆盖 `.md/.c/.h/.py/.yaml/.json/.txt` 与配置文件本身。 @@ -45,7 +45,7 @@ - **`owner_docs` ≠ 定义集**(2026-10-25 起):族可以"有登记处"却"没有定义位"。判可判定只看 `owner_docs` 是否解析出真实文件;而悬空(校验 3)/ 撞号(校验 4)/ 裸形(校验 2)/ 紧邻(校验 6) 一律只看 `_def_owners`。两者仅在一种情形下不同:**`snapshot_only` 族的登记处挂在规范正文** - (`docs/编号规范.md` §4.3 说的冻结前缀:登记处只剩冻结存档,甚至只存在于规范正文)。规范正文里混着大量写法示例, + (当时那篇规范的「冻结前缀」一节:登记处只剩冻结存档,甚至只存在于规范正文)。规范正文里混着大量写法示例, 若拿它当定义集会立刻误伤——实测裸形 `S1` 被判成 `S-1` 漏连字符 238 条、表里 `S-3` 与登记簿 S-3 被判重复定义。所以这类族的 `_def_owners` 为空,等价于"属主已删、只有存档"。 代价要认清:这类族的号**不会再被校验 3 兜住**,新增引用只能靠别名表或人工核。 @@ -56,7 +56,7 @@ - **排除**:`Lib/`、`Middlewares/`、HAL/CMSIS、`docs/芯片手册/`、`docs/硬件平台/`。 最后一个是关键:硬件文档里的**元器件位号 `U1`/`C12`/`R3`/`L5`/`D7`** 与我们的编号字面 同形,不整体排除就会大量误报(脚本里另有一套位号识别,但仍**没有解除这两个目录的语料排除**)。 -- 已声明的"同号不同义"族对(`docs/编号规范.md` §4.3):实跑 876 个字面量走 `collides_with` +- 已声明的"同号不同义"族对(族登记在归档规范正文里):实跑 876 个字面量走 `collides_with` 白名单,**不计入校验 4**。 ## 4. 报错怎么读 @@ -97,7 +97,7 @@ `scripts/rename_maps/` 里必然写着旧的非法形态),否则第一次提交就被自家审计表当"新账"拦下。 7. 校验 8 的两根护栏**自 2026-10-28 起只报告、不拦提交**:此前"只许涨不许跌"好处是防退化,代价是 **顺手写一个未登记族的号就会红**,哪怕与本次改动无关——代价最终由每一笔提交付,故转报告制(§7.6 末)。 -8. 它不懂"这个号该不该存在"。新增一族编号是否合理,仍是 `docs/编号规范.md` 的人工判断。 +8. 它不懂"这个号该不该存在"。新增一族编号是否合理,仍是人工判断(判据见 `docs/文档规范.md` §7.1:一律不发)。 9. **变更记录行豁免**(2026-10-26 加):首格是日期的表格行不参与判定——政策禁止回改历史, 拦它等于逼人改历史或 `--no-verify`。代价:新写进变更记录行的旧形态编号照不出来。 11. **未跟踪文件不在扫描面**(2026-10-28 实测):文件清单来自 `git ls-files`, @@ -110,7 +110,7 @@ `binary_skipped`,口径与 noise_literals/裸形盲区一致。**反向盲区也在案**:真编号若只存在于 二进制工件里,本门禁看不见——需要它可判定时就该以文本形态入库。 -- **裸形多义是显式承认的盲区**(`docs/编号规范.md` §1 与 §4.4):同一个裸形字母在本仓可能同时是风险号、 +- **裸形多义是显式承认的盲区**(`docs/文档规范.md` §7.1 的「这些不是编号」一段):同一个裸形字母在本仓可能同时是风险号、 档位、层号、元器件位号。所以裸形族**只在属主登记处文档内**判"越游标",文档外降级处理。本目录 `bsp-err.md` §6 记的那件事正是这个洞的产物。 - 本钩子**顺带收编** `scripts/check_test_traceability.py`(TC 用例双向追溯),它不是独立钩子; @@ -134,11 +134,11 @@ - **可判定比例为什么上涨**:这些族的属主登记处已删 → 字面量原本**进分母、不进分子**。删掉这类"判不了" 的引用,分母缩小,比例自然上升。⚠ **这不等于"编号卫生变好了"**——真证据是**编号字面量绝对数下降** (清理前 10,956 → 现在 8,230)**且**校验 2/3/6 的存量同时下降。只报比例不报绝对数,就是自欺。 -- **族不是越多越好**:`docs/编号规范.md` §4.1 现在只列「有属主登记处、且全仓真有引用」的族;原 `scripts/archive/id_gate/编号治理历史.md` §4.2 那 15 个 +- **族不是越多越好**:存量族表现在只剩「有属主登记处、且全仓真有引用」的几族(`docs/文档规范.md` §7.1);原 `scripts/archive/id_gate/编号治理历史.md` §4.2 那 15 个 「改名后才启用」的目标前缀已作废——**空族会骗人**:读者看到 `DR-001` 就会去找一张根本不存在的登记表。 -- 要加一族:先改 `docs/编号规范.md` §4.1,再改 `id_registry.json`,两处同一批提交(`docs/编号规范.md` §5.1 第 1 步)。 +- 要加一族:先问用户(`docs/文档规范.md` §7.1:一律不发),批下来再改族表与 `id_registry.json`,两处同一批提交。 - **本批顺带补了「变更记录行」豁免**(`CHANGELOG_ROW`:表格首格是日期、或「(规划稿)」): - `rename_ids.py` / `doc-links` / 追溯器早就是这条口径,唯独本门禁缺——于是把 `docs/编号规范.md` §5.5「历史不回改」 + `rename_ids.py` / `doc-links` / 追溯器早就是这条口径,唯独本门禁缺——于是把「冻结历史不回改」这条口径 锁死的行当活账拦提交,实测 **36 处错误级 + 20 处告警全来自历史行**。豁免后这些行的编号 **不再被判定**(新增时也判不到,这是这条豁免的代价,写进 §6 盲区);被跳过的字面量数打印在 扫描首行(`变更记录行 N 处`),不让它变成看不见的面分母缩水。 @@ -180,7 +180,7 @@ - 不变的是**牙**:校验 1~6 的台账外新账照旧拦提交(`--strict`),这是本次减负的边界。 - 减负依据(实测):单次运行仅 **1.8 s**,但**近 80 笔提交里 61 笔**改了语料 / 门禁 / 规范; 语料共 **99 族**(78 族已冻结、8 族快照、21 族未冻结),registry 87.6 KB + 别名表 187 KB。 -- 后续路线(替换语料审计 → 退役语料)见 `docs/编号规范.md` §8.5。 +- 后续路线(替换语料审计 → 退役语料)见 `scripts/archive/id_gate/README.md`。 ## 7.7 「不可判定绝对数」到底是什么:构成实测 + 每批自证没吃余量的做法(2026-10-27) @@ -207,7 +207,7 @@ 要指代就写全号并紧邻属主文档名(写法口径见 `docs/文档规范.md` §3.5,判它的是校验 6)。 3. ⚠ **反向错误更贵**:为了「少占余量」而把编号改写成语义短语/散文——那正是 §7.6 与这根护栏的动机要防的 稀释(比值会被清号动作稀释,绝对数不会)。2026-10-27 凌晨 Lead 给三条道下过这样一条错指令,已撤回; - 当时的口径是:按 `docs/编号规范.md` §1 先问三句,属允许族就用号(该判据 2026-10-29 作废,全族一律停发),**需要新母号时由 Lead 改 `id_registry.json` 游标**。 + 当时的口径是:先问三句,属允许族就用号(该判据 2026-10-29 作废,全族一律停发),**需要新母号时由 Lead 改 `id_registry.json` 游标**。 **每批自证没吃余量(可复制的做法,五项式)**: diff --git a/docs/问题记录/ADC_Trap_Records.md b/docs/问题记录/ADC_Trap_Records.md index 70e8e9a4..ba54edcd 100644 --- a/docs/问题记录/ADC_Trap_Records.md +++ b/docs/问题记录/ADC_Trap_Records.md @@ -4,7 +4,7 @@ ADC1 采样链路(TIM3 1 kHz 节拍 → ADC1 九通道扫描 → DMA2_Stream4 语义映射)的实证陷阱:现象、判读陷阱、定案根因、修复与回归判据。**动 ADC 采样、通道映射或 诊断代码之前先读本文。** -> 编号口径:本域既有条目按 `TRAP-ADC-` 自 01 起连续编号,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/编号规范.md` §4.1 一律停发),新踩坑在本文写语义行名。编号不复用、不重排。 +> 编号口径:本域既有条目按 `TRAP-ADC-` 自 01 起连续编号,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/文档规范.md` §7.1 一律停发),新踩坑在本文写语义行名。编号不复用、不重排。 > 状态图例:✅ 已修复定案 · ⏳ 待修。 > 设计侧口径(采样节拍、寄存器配置、铁律)不在本文,见 > `docs/子系统设计/ADC采样节拍设计说明.md`;本文只记「踩过的坑」与「怎么判断踩到了」。 diff --git a/docs/问题记录/CH395F_Trap_Records.md b/docs/问题记录/CH395F_Trap_Records.md index 270d40c8..65d57d64 100644 --- a/docs/问题记录/CH395F_Trap_Records.md +++ b/docs/问题记录/CH395F_Trap_Records.md @@ -2,7 +2,7 @@ CH395F 以太网驱动与 NET 层的实证陷阱:现象、定案根因、修复、回归判据。改驱动/NET 层前先读本文。 -> 编号口径:本域既有条目 `TRAP-NET-` 连续 01~21,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/编号规范.md` §4.1 一律停发),新踩坑在本文写语义行名。编号沿革(2026-10-13 全库重排): +> 编号口径:本域既有条目 `TRAP-NET-` 连续 01~21,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/文档规范.md` §7.1 一律停发),新踩坑在本文写语义行名。编号沿革(2026-10-13 全库重排): > 旧 01~11 不变;旧 14→12、15→13、16→14、17→12(并入)、18→15、20→16、22→17、23→18、24→19、 > 25→20、26→21;旧 12/13/19/21 已移出/并入/删除,无条目。旧形 `Trap NN` 为违规裸形已全库迁移; > 旧号只存在于历史提交与旧日志。编号不复用、不重排。 diff --git a/scripts/README.md b/scripts/README.md index f1794b3d..ab289c00 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -13,8 +13,8 @@ | `check_mojibake.py` | `Forbid U+FFFD mojibake` | 扫描 `U+FFFD` 乱码(`EF BF BD` 字节) | | `check_doc_links.py` | `doc-links` | **文档链接存在性** + 命名规范 + **`§N.M` 章节引用**(口径见 `docs/文档规范.md` §3.5)。钩子已带 `--sections-strict`(自引用失效也拦);`--section-todo` 列出机器判不了目标的 `§`(带改写建议)。每次跑打印「可判定比例」行,防覆盖率回落 | | `section_aliases.json` | (被 `check_doc_links.py` 读) | 文档**昵称别名表**:「内存方案」→ `docs/内存管理/RAM使用分析与优化方案.md`。只登记无歧义昵称;登记一次即把该昵称的引用纳入硬门禁 | -| `check_ids.py` | ~~`id-check`~(已退役) | **编号门禁(已退役,2026-10-28)**:`docs/编号规范.md` §8 的八项校验(未登记前缀 / 形态 / 悬空 / 重复定义 / 越游标 / 未紧邻文档名 / 孤儿 / 可判定比例)。**已关闸为增量拦截**:钩子带 `--strict`,只拦 `scripts/archive/id_gate/id_known_backlog.json` 台账之外的新错误级问题(存量按指纹豁免、台账只减不增);可判定比例跌破基线任何模式都失败。详表(含限制与盲区)→ `docs/门禁说明/id-check.md` | -| `id_registry.json` | (被 `check_ids.py` 读) | 前缀族**注册表**:属主登记处 / 形态正则 / 冻结 / 游标,逐项来自 `docs/编号规范.md` §4;`decidable_ratio_baseline` = 校验 8 的基线(只许涨)。与 `section_aliases.json` 同一套"别名表 + 可判定比例"范式 | +| `check_ids.py` | ~~`id-check`~(已退役) | **编号门禁(已退役,2026-10-28)**:原规范 §8 的八项校验(未登记前缀 / 形态 / 悬空 / 重复定义 / 越游标 / 未紧邻文档名 / 孤儿 / 可判定比例)。**已关闸为增量拦截**:钩子带 `--strict`,只拦 `scripts/archive/id_gate/id_known_backlog.json` 台账之外的新错误级问题(存量按指纹豁免、台账只减不增);可判定比例跌破基线任何模式都失败。详表(含限制与盲区)→ `docs/门禁说明/id-check.md` | +| `id_registry.json` | (被 `check_ids.py` 读) | 前缀族**注册表**:属主登记处 / 形态正则 / 冻结 / 游标,逐项来自当年的编号规范正文(现行规则 → `docs/文档规范.md` §7.1);`decidable_ratio_baseline` = 校验 8 的基线(只许涨)。与 `section_aliases.json` 同一套"别名表 + 可判定比例"范式 | | `id_aliases.json` | (被 `check_ids.py` 读) | 编号**别名/作废表**:旧字面量 → 现行字面量或 `status: void`(如已销项的旧号仍被引用 → `status: void`、模块码 `PHY→NET`) | | `check_test_traceability.py` | (原被 `id-check` 顺带调用;后者已退役) | **TC 用例双向追溯**:文档 ↔ 代码两侧的 TC 编号集合比对;2026-10-20 起范围扩到 `test/host/` 与 7 篇「单元测试说明.md」(`--board-only` 回退旧板级口径)。此前该脚本**未挂任何钩子** | | `gen_task_table.py` | `task-table` | FreeRTOS 任务表以 `Src/freertos.c` 为**唯一事实源**生成/校验 | diff --git a/scripts/archive/id_gate/README.md b/scripts/archive/id_gate/README.md index 6e5217ad..5b49beae 100644 --- a/scripts/archive/id_gate/README.md +++ b/scripts/archive/id_gate/README.md @@ -20,10 +20,10 @@ ## 现在用什么 - **没有现行门禁**:接班的 `id-check-new`(只查新增行、零语料)也在 2026-10-29 被用户裁定退役, - 脚本进本目录。编号形态此后无机器面,判据 = `docs/编号规范.md` §1 的默认答案(2026-10-29 起一律停发)+ §4.1 存量族表 + 评审; + 脚本进本目录。编号形态此后无机器面,现行判据 = `docs/文档规范.md` §7.1(2026-10-29 起一律停发)+ 评审; 留档 `docs/门禁说明/id-check-new.md`(拦下过什么、为什么退、手工怎么再跑)。 -- **手工普查与恢复机器面**:`docs/编号规范.md` §8.5(退役流水在 `编号治理历史.md`)。 -- **规范正文**(仍然有效,只是不再全库机械校验):`docs/编号规范.md` §1 默认答案、§4.1 存量族表。 +- **退役流水与手工普查记录**:`编号治理历史.md`(原编号规范的全部正文已于 2026-11-06 删除, + 仍生效的两条规则与存量族表并进了 `docs/文档规范.md` §7.1)。 ## 怎么手工跑一次 @@ -40,4 +40,4 @@ - 这两份语料**不再维护**:不要为了让报告变绿去改 `id_registry.json` / `id_aliases.json`。 - `scripts/rename_ids.py` 仍会往归档的 `id_aliases.json` 写条目(改名工具没退役)—— 那是它自己的账,与本目录的"冻结快照"性质不同,改名前先想清楚是否还要记这笔。 -- 真要恢复全库校验,先读 `docs/编号规范.md` §8.5 再决定,别直接把它塞回钩子。 +- 真要恢复全库校验,先读 `编号治理历史.md` 再决定,别直接把它塞回钩子。 diff --git a/scripts/archive/id_gate/check_ids.py b/scripts/archive/id_gate/check_ids.py index 3640c406..9d31e39d 100644 --- a/scripts/archive/id_gate/check_ids.py +++ b/scripts/archive/id_gate/check_ids.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ -check_ids.py — 编号门禁(docs/编号规范.md §8 的 8 项校验)——**已退役(2026-10-28)**。 +check_ids.py — 编号门禁(编号规范.md §8 的 8 项校验)——**已退役(2026-10-28)**。 ⚠ 退役说明(先读这段,别把它当活门禁用): 本脚本与两份语料(id_registry.json / id_aliases.json)已整体移入 scripts/archive/id_gate/, @@ -9,7 +9,7 @@ check_ids.py — 编号门禁(docs/编号规范.md §8 的 8 项校验)— (钩子 id-check-new:只查新增行、零语料)已于 2026-10-29 一并退役,也进了本目录—— **编号形态此后没有机器面**。本脚本保留下来只做一件事: 想复查「存量编号现状」时手工跑一遍出报告。 - 手工普查与恢复机器面 → docs/编号规范.md §8.5;两道门禁的留档 → docs/门禁说明/id-check.md + 手工普查与恢复机器面 → 编号规范.md §8.5;两道门禁的留档 → docs/门禁说明/id-check.md 与 docs/门禁说明/id-check-new.md。 下面这份 docstring 是退役前的原样,未改,作为历史口径保留。 @@ -37,7 +37,7 @@ check_ids.py — 编号门禁(docs/编号规范.md §8 的 8 项校验)— 构建产物。裸形盲区显式登记在 id_registry.json 的 `unmanaged_bare`,不是「检查通过」。 上线节奏(§8):默认 **warn-only**(退出码 0);`--strict` 才让校验 1~6 拦提交。 -第 8 项(两根护栏)自 2026-10-28 起**只报告、不拦提交**(用户裁定);退役路线见 docs/编号规范.md §8.5。 +第 8 项(两根护栏)自 2026-10-28 起**只报告、不拦提交**(用户裁定);退役路线见 编号规范.md §8.5。 用法(仓库根): & '.venv\\Scripts\\python.exe' scripts/check_ids.py # warn-only 全库 @@ -167,7 +167,7 @@ class Checker(object): f["_full"] = re.compile("^(?:%s)$" % fam["pattern"]) f["_owners"] = self._expand_owners(fam) # 定义集属主 ≠ 登记处属主。冻结历史快照族(snapshot_only)的登记处只能挂在 - # 规范正文(docs/编号规范.md §4.5 那种存档表)时,那张表**是存档不是定义**: + # 规范正文(编号规范.md §4.5 那种存档表)时,那张表**是存档不是定义**: # 规范里还混着大量写法示例(`N-99`、`S1`、`N-31`),若进定义集会同时打穿 # 裸形判定(`S1` 被判成 `S-1` 的漏连字符,实测 238 条)与撞号判定(§4.5 的 # `S-3` 与登记簿 S-3 被判重复定义)。因此只对快照族做这个剔除。 @@ -338,7 +338,7 @@ class Checker(object): else: self.add(1, "error", rel, lineno, literal, "未登记前缀:%s(§4.1 / §4.2 总表里没有这一族)" % literal, - "归到既有类别;确属新类别先改 docs/编号规范.md §4,再进 registry") + "归到既有类别;确属新类别先改 编号规范.md §4,再进 registry") self.stats["undecidable"] += 1 continue @@ -492,7 +492,7 @@ class Checker(object): self.add(5, "error", rel, lineno, literal, "冻结前缀越游标:%s > %s(%s;§4.3 / §8 校验 5)" % (literal, fam["cursor"], fam["title"]), - "该族已封闭,新条目改语义标识(§3.3);确需新号先改 docs/编号规范.md §4") + "该族已封闭,新条目改语义标识(§3.3);确需新号先改 编号规范.md §4") def _check_dangling(self, rel, lineno, literal, fam): if not fam.get("check_dangling") or not fam["_def_owners"] or rel in fam["_def_owners"]: @@ -631,7 +631,7 @@ class Checker(object): by_code = defaultdict(list) for f in self.findings: by_code[f.code].append(f) - print("=== 编号门禁 check_ids.py(docs/编号规范.md §8)===") + print("=== 编号门禁 check_ids.py(编号规范.md §8)===") print("扫描 %d 个文件;编号字面量 %d 处(豁免 [示例]/[计划] 行 %d 处、变更记录行 %d 处、" "非编号噪声 %d 处、裸形盲区 %d 处、命中别名表 %d 处)" % (self.stats["files"], self.stats["refs_total"], self.stats["skip_example"], @@ -724,7 +724,7 @@ def load_backlog(): def backlog_doc(entries, errs, ratio): return { "schema": 1, - "note": ("编号债务台账(docs/编号规范.md §8.4):--strict 只对**台账之外**的新错误级问题拦提交。" + "note": ("编号债务台账(编号规范.md §8.4):--strict 只对**台账之外**的新错误级问题拦提交。" "台账只许减不许增——还清的用 --prune-backlog 收掉;确需新增一条必须写 reason 字段" "说明这笔债为什么该存在,默认禁止顺手加行(否则一周后台账就变成第二个 backlog)。" "指纹 = 文件 + 校验号 + 字面量,不含行号(行号会漂,用它台账天天假新增)。"), @@ -737,7 +737,7 @@ def backlog_doc(entries, errs, ratio): def main(): ap = argparse.ArgumentParser( - description="编号门禁:docs/编号规范.md §8 的 8 项校验(默认 warn-only)") + description="编号门禁:编号规范.md §8 的 8 项校验(默认 warn-only)") ap.add_argument("--strict", action="store_true", help="增量拦截:台账(scripts/id_known_backlog.json)之外的新错误级问题 → 拦提交") ap.add_argument("--write-backlog", action="store_true", @@ -847,20 +847,20 @@ def main(): # 两根护栏自 2026-10-28 起转「报告制」(用户裁定):只打印,不影响退出码。 # 理由:它们逼着每一笔提交维护 99 族语料(近 80 笔提交有 61 笔被编号体系牵连), - # 而真正防回潮的是校验 1~6 的台账外新账。退役路线见 docs/编号规范.md §8.5。 + # 而真正防回潮的是校验 1~6 的台账外新账。退役路线见 编号规范.md §8.5。 base = reg.get("decidable_ratio_baseline") if base is not None and ratio + RATIO_TOL < base and not args.update_baseline: print("\n[报告] 校验 8:可判定比例 %.2f%% 低于记录基线 %.2f%%(容差 %.1fpp)" % (ratio, base, RATIO_TOL)) print(" 只报告、不拦提交。想把当前值记成新基线跑 --update-baseline;" - "口径见 docs/编号规范.md §8.5") + "口径见 编号规范.md §8.5") # 绝对数护栏同样转报告制(2026-10-28):越线只打印,不影响退出码。 und_now = ck.stats["refs_total"] - ck.stats["decidable"] ceil_now = reg.get("undecidable_total_ceiling") if ceil_now is not None and und_now > ceil_now and not args.update_baseline: print("\n[报告] 校验 8:不可判定引用绝对数 %d 高于记录上限 %d(只报告、不拦提交)" % (und_now, ceil_now)) - print(" 清理方向不变:号只该越清越少;口径见 docs/编号规范.md §8.5") + print(" 清理方向不变:号只该越清越少;口径见 编号规范.md §8.5") if err_total: if args.strict: led = load_backlog() diff --git a/scripts/archive/id_gate/check_ids_new.py b/scripts/archive/id_gate/check_ids_new.py index db8164bd..a59f17b5 100644 --- a/scripts/archive/id_gate/check_ids_new.py +++ b/scripts/archive/id_gate/check_ids_new.py @@ -3,7 +3,7 @@ """check_ids_new.py — 编号门禁·新增行(**已退役 2026-10-29,用户裁定**;本脚本降为手工报告工具) 退役口径:钩子已从 .pre-commit-config.yaml 摘除(YAML 解析条目 52 → 51),编号形态此后 -**没有机器面**——靠 docs/编号规范.md §1 的默认答案(一律停发)+ 评审。留档说明 → docs/门禁说明/id-check-new.md。 +**没有机器面**——靠 编号规范.md §1 的默认答案(一律停发)+ 评审。留档说明 → docs/门禁说明/id-check-new.md。 本脚本与 check_ids.py(2026-10-28 退役的全库八项校验)同处一档:手工复查「这批改动 / 这段历史 里有没有野生编号」时才跑,跑不跑都不影响提交。 @@ -251,7 +251,7 @@ def main(argv=None): print(" %s:%d %s" % (rel, lineno, tok)) if args.verbose: print(" %s" % text) - print(" → 语义标识是默认形态:改写成短语(docs/编号规范.md §1);") + print(" → 语义标识是默认形态:改写成短语(编号规范.md §1);") print(" 确属设备名/协议名/位号,就改形态(写语义短语)——本门禁已于 2026-10-29 退役,") print(" 不再是提交钩子;要再拿它当尺子就手工跑 scripts/archive/id_gate/check_ids_new.py。") return 1 diff --git a/scripts/archive/id_gate/id_aliases.json b/scripts/archive/id_gate/id_aliases.json index c00fcbcc..be980917 100644 --- a/scripts/archive/id_gate/id_aliases.json +++ b/scripts/archive/id_gate/id_aliases.json @@ -1,6 +1,6 @@ { "schema": 1, - "generated_from": "docs/编号规范.md §7 迁移映射 + §4.3 冻结前缀;本表只登记**仓库里已实际出现**的旧字面量 → 现行字面量,不做尚未落地的批量改写(§7.2 阶段 1 一律保留存量)", + "generated_from": "编号规范.md §7 迁移映射 + §4.3 冻结前缀;本表只登记**仓库里已实际出现**的旧字面量 → 现行字面量,不做尚未落地的批量改写(§7.2 阶段 1 一律保留存量)", "note": "旧号引用不因本表而改写:本表只让门禁把「旧号引用」判成可解析(校验 3 悬空引用 / 校验 4 重复定义)。批量改写属 §9 阶段 1,须逐批 dry-run + 三重复核(§7.3)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。", "aliases": { "N-3": { @@ -163,7 +163,7 @@ "N-32": { "to": null, "status": "void", - "note": "监听生命周期模块化条目已销项,但被 docs/网络/ 三篇与多处代码注释引用(docs/编号规范.md §1.2 列为悬空引用实锤)→ §7.2 待处置:改指 docs/网络/网络自愈架构设计.md §9.3 或就地展开" + "note": "监听生命周期模块化条目已销项,但被 docs/网络/ 三篇与多处代码注释引用(编号规范.md §1.2 列为悬空引用实锤)→ §7.2 待处置:改指 docs/网络/网络自愈架构设计.md §9.3 或就地展开" }, "N-33": { "to": null, @@ -3276,7 +3276,7 @@ "N-21": { "to": null, "status": "void", - "note": "本号两义,均已死:① 登记簿 N-21 = 报告 N-12/N-13(dhara 移植层两条硬约束),2026-10-15 销项删行 → docs/架构设计/STM32F4-Base存储架构说明.md §5.3;② 报告 N-21(时钟/对时,已闭环)→ docs/编号规范.md §4.5。存量引用几乎都是①" + "note": "本号两义,均已死:① 登记簿 N-21 = 报告 N-12/N-13(dhara 移植层两条硬约束),2026-10-15 销项删行 → docs/架构设计/STM32F4-Base存储架构说明.md §5.3;② 报告 N-21(时钟/对时,已闭环)→ 编号规范.md §4.5。存量引用几乎都是①" }, "N-24": { "to": null, @@ -3291,7 +3291,7 @@ "S-1": { "to": null, "status": "void", - "note": "本号两义,均已死:① 登记簿 S-1(defaultTask 栈余量 3664B/4096 ≈10%,2026-10-04 登记),2026-10-10 削链销项 → 复测见 docs/内存管理/RAM使用分析与优化方案.md §4 阶段 0「不抬栈」小节;② 报告 S-1(分层反向依赖 BSP include App 的头)→ docs/门禁说明/layer-deps.md 与 docs/编号规范.md §4.5。存量引用几乎都是①" + "note": "本号两义,均已死:① 登记簿 S-1(defaultTask 栈余量 3664B/4096 ≈10%,2026-10-04 登记),2026-10-10 削链销项 → 复测见 docs/内存管理/RAM使用分析与优化方案.md §4 阶段 0「不抬栈」小节;② 报告 S-1(分层反向依赖 BSP include App 的头)→ docs/门禁说明/layer-deps.md 与 编号规范.md §4.5。存量引用几乎都是①" }, "S-2": { "to": null, @@ -3316,72 +3316,72 @@ "N-14": { "to": null, "status": "void", - "note": "审查报告并轨号(报告 N-14),2026-10-25 随其条目 N-22 销项一并作废(映射记录见 docs/编号规范.md §4;修复本体沿革见 N-22 别名注)。旧号勿复用" + "note": "审查报告并轨号(报告 N-14),2026-10-25 随其条目 N-22 销项一并作废(映射记录见 编号规范.md §4;修复本体沿革见 N-22 别名注)。旧号勿复用" }, "F-NET-2": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「静默回收无人认领」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「静默回收无人认领」。" }, "F-NET-3": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「冗余监听 API 面」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「冗余监听 API 面」。" }, "F-NET-4": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「iec104 过期门控」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「iec104 过期门控」。" }, "F-NET-7": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「全局读即清搁浅事件」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「全局读即清搁浅事件」。" }, "F-NET-15": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「沉降门放大器」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「沉降门放大器」。" }, "F-NET-17": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「风暴态三机制」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「风暴态三机制」。" }, "F-DRV-1": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「七处独立回读」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「七处独立回读」。" }, "F-DRV-4": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「close 序列两套变体」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「close 序列两套变体」。" }, "F-DRV-8": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「命令完成阻塞原语」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「命令完成阻塞原语」。" }, "F-DRV-13": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「链路事件无人消费」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「链路事件无人消费」。" }, "F-MS-8": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「有损镜像决策窗口」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「有损镜像决策窗口」。" }, "F-MS-9": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「去抖冷却自偿成本」。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。条目名「去抖冷却自偿成本」。" }, "F-DRV-9": { "to": null, "status": "retired-to-phrase", - "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,docs/编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。该号在 §7 从来没有定义行(孤儿引用)→ 按 §4.1.1「删号留事实」就地删除引用,**不得补定义**。" + "note": "2026-10-27 批次一(网络设计 F-* 条目号转语义,编号规范.md §9.1):现行指代 = docs/网络/网络自愈架构设计.md §7「条目名」列短语;§7 编号列仅作历史对照(定义行不算引用),旧号此后不得再指。映射 scripts/rename_maps/batch7-f-net-semantic.json。该号在 §7 从来没有定义行(孤儿引用)→ 按 §4.1.1「删号留事实」就地删除引用,**不得补定义**。" } }, "id_aliases": {} diff --git a/scripts/archive/id_gate/id_known_backlog.json b/scripts/archive/id_gate/id_known_backlog.json index 84a4cfe4..712d2317 100644 --- a/scripts/archive/id_gate/id_known_backlog.json +++ b/scripts/archive/id_gate/id_known_backlog.json @@ -1,6 +1,6 @@ { "schema": 1, - "note": "编号债务台账(docs/编号规范.md §8.4):--strict 只对**台账之外**的新错误级问题拦提交。台账只许减不许增——还清的用 --prune-backlog 收掉;确需新增一条必须写 reason 字段说明这笔债为什么该存在,默认禁止顺手加行(否则一周后台账就变成第二个 backlog)。指纹 = 文件 + 校验号 + 字面量,不含行号(行号会漂,用它台账天天假新增)。", + "note": "编号债务台账(编号规范.md §8.4):--strict 只对**台账之外**的新错误级问题拦提交。台账只许减不许增——还清的用 --prune-backlog 收掉;确需新增一条必须写 reason 字段说明这笔债为什么该存在,默认禁止顺手加行(否则一周后台账就变成第二个 backlog)。指纹 = 文件 + 校验号 + 字面量,不含行号(行号会漂,用它台账天天假新增)。", "generated_by": "scripts/check_ids.py --write-backlog", "total_error_findings": 0, "decidable_ratio_at_generation": 87.62, diff --git a/scripts/archive/id_gate/id_registry.json b/scripts/archive/id_gate/id_registry.json index 3d19c8de..49a82a99 100644 --- a/scripts/archive/id_gate/id_registry.json +++ b/scripts/archive/id_gate/id_registry.json @@ -1,9 +1,9 @@ { "schema": 1, - "generated_from": "docs/编号规范.md §4 编号空间总表(§4.1 在册 / §4.2 目标 / §4.3 冻结 / §4.4 划界)+ §6 模块码表 + §7 迁移映射。游标取「规范记载值」与「全库实测最大号」的较大者,实测偏差一律写进 cursor_note,不凭印象编。", + "generated_from": "编号规范.md §4 编号空间总表(§4.1 在册 / §4.2 目标 / §4.3 冻结 / §4.4 划界)+ §6 模块码表 + §7 迁移映射。游标取「规范记载值」与「全库实测最大号」的较大者,实测偏差一律写进 cursor_note,不凭印象编。", "decidable_ratio_baseline": 86.0, "spec_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "bare_check_letters": [ "S", @@ -176,7 +176,7 @@ "圈号编号(①②③…):与正常列举无法机械区分,不入判定;§7.1 的 RC-01~05 迁移批次落地后再收。", "TC 用例的「文档侧/代码侧」双向一一对应由 check_test_traceability.py 判(本门禁只判形态与定义存在性),两脚本同挂 id-check 钩子。" ], - "tc_freeze_2026_10_27": "批次三裁定(用户 2026-10-27「批次三,不做」):TC 族保留现存号但**即日停发**,不是暂缓、也不是可以清号。34 个按套件划分的 TC 子族已置 frozen=true,游标冻结在裁定日该套件存量最高号(字符串形态——整型比较会静默不生效);其中 5 个游标低于存量已抬到水位:TC-HOST-PROTELEM: TC-PROTELEM-013→TC-PROTELEM-015;TC-HOST-SYSLOG: TC-SYSLOG-108→TC-SYSLOG-137;TC-HOST-ADCHEALTH: TC-ADCHEALTH-011→TC-ADCHEALTH-023;TC-HOST-ADCCAL: TC-ADCCAL-017→TC-ADCCAL-023;TC-HOST-I104SRV: TC-I104SRV-041→TC-I104SRV-053。通用 TC 族同样置 frozen=true 但 cursor 仍为 null:单一游标表达不了每个模块码的水位,它的停发由三条兜住——per-suite 游标(校验 5 咬越游标新号)+ 校验 3(新号没进属主登记处=悬空,错误级)+ docs/编号规范.md §9.1 冻结水位(只减不增)。新用例一律用语义化测试函数名 + 文档表格行名,不再配 TC- 号(含只在文档表格里补定义行的情形)。", + "tc_freeze_2026_10_27": "批次三裁定(用户 2026-10-27「批次三,不做」):TC 族保留现存号但**即日停发**,不是暂缓、也不是可以清号。34 个按套件划分的 TC 子族已置 frozen=true,游标冻结在裁定日该套件存量最高号(字符串形态——整型比较会静默不生效);其中 5 个游标低于存量已抬到水位:TC-HOST-PROTELEM: TC-PROTELEM-013→TC-PROTELEM-015;TC-HOST-SYSLOG: TC-SYSLOG-108→TC-SYSLOG-137;TC-HOST-ADCHEALTH: TC-ADCHEALTH-011→TC-ADCHEALTH-023;TC-HOST-ADCCAL: TC-ADCCAL-017→TC-ADCCAL-023;TC-HOST-I104SRV: TC-I104SRV-041→TC-I104SRV-053。通用 TC 族同样置 frozen=true 但 cursor 仍为 null:单一游标表达不了每个模块码的水位,它的停发由三条兜住——per-suite 游标(校验 5 咬越游标新号)+ 校验 3(新号没进属主登记处=悬空,错误级)+ 编号规范.md §9.1 冻结水位(只减不增)。新用例一律用语义化测试函数名 + 文档表格行名,不再配 TC- 号(含只在文档表格里补定义行的情形)。", "families": [ { "name": "FR", @@ -220,7 +220,7 @@ "frozen": false, "cursor": "N-34", "check_dangling": true, - "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", + "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", "adjacent_cues": [ "登记簿" ], @@ -239,7 +239,7 @@ "frozen": true, "cursor": "S-5", "check_dangling": true, - "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", + "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", "adjacent_cues": [ "登记簿" ], @@ -259,7 +259,7 @@ "frozen": true, "cursor": "T-7", "check_dangling": true, - "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", + "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", "adjacent_cues": [ "登记簿", "专项" @@ -552,10 +552,10 @@ { "name": "PRINCIPLE", "class": "PRINCIPLE", - "title": "编号设计原则 P-1~P-8(§2,定义就在 docs/编号规范.md)", + "title": "编号设计原则 P-1~P-8(§2,定义就在 编号规范.md)", "pattern": "\\bP-[0-9]\\b", "owner_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "scope": "global", "frozen": false, @@ -570,10 +570,10 @@ { "name": "PAT", "class": "PAT", - "title": "缺陷模式九类(§4.2.1,定义就在 docs/编号规范.md)", + "title": "缺陷模式九类(§4.2.1,定义就在 编号规范.md)", "pattern": "\\bPAT-[0-9]{2}\\b", "owner_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "scope": "global", "frozen": true, @@ -689,7 +689,7 @@ "保护", "分层" ], - "retired": "2026-10-27 批次二转功能名并停发(docs/编号规范.md §4.1 已停发栏);新号由 §8 校验 3 拦截,不冻结数值游标(各段最高号不同)" + "retired": "2026-10-27 批次二转功能名并停发(编号规范.md §4.1 已停发栏);新号由 §8 校验 3 拦截,不冻结数值游标(各段最高号不同)" }, { "name": "B-WAVE", @@ -914,7 +914,7 @@ "title": "《项目审查与优化建议报告》自有编号 N-xx(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)", "pattern": "\\bN-[0-9]{1,3}[a-z]?\\b", "owner_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "scope": "doc-scoped", "frozen": true, @@ -930,7 +930,7 @@ "cursor_note": "⚠ 与登记簿 N-x 同名不同义(§4.3 / AGENTS.md 模块约定)→ 引用必须紧邻「报告」或报告文档名", "snapshot_only": true, "snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走", - "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" + "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" }, { "name": "D-RPT", @@ -938,7 +938,7 @@ "title": "报告自有编号 D-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)", "pattern": "\\bD-[0-9]\\b", "owner_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "scope": "doc-scoped", "frozen": true, @@ -953,7 +953,7 @@ "collides_with": "D", "snapshot_only": true, "snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走", - "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" + "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" }, { "name": "S-RPT", @@ -961,7 +961,7 @@ "title": "报告自有编号 S-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)", "pattern": "\\bS-[0-9]\\b", "owner_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "scope": "doc-scoped", "frozen": true, @@ -975,7 +975,7 @@ "collides_with": "N", "snapshot_only": true, "snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走", - "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" + "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" }, { "name": "R-RPT", @@ -983,7 +983,7 @@ "title": "报告自有编号 R-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结;内存优化项)", "pattern": "\\bR-[0-9]{1,2}\\b", "owner_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "scope": "global", "frozen": true, @@ -997,7 +997,7 @@ "cursor_note": "实测现存至 R-9(2026-10-15 落地);§1.2 记「R1=风险、R-2=内存优化项」同字母歧义", "snapshot_only": true, "snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走", - "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" + "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" }, { "name": "F-RPT", @@ -1005,7 +1005,7 @@ "title": "报告自有编号 F-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)", "pattern": "\\bF-[0-9]{1,2}\\b", "owner_docs": [ - "docs/编号规范.md" + "编号规范.md" ], "scope": "global", "frozen": true, @@ -1018,7 +1018,7 @@ ], "snapshot_only": true, "snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走", - "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" + "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇" }, { "name": "A-AUDIT", @@ -1080,7 +1080,7 @@ "cursor_owner_only": true, "check_dangling": true, "dangling_outside_owner": "warn", - "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", + "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", "adjacent_cues": [ "复审", "专项" @@ -1099,7 +1099,7 @@ "frozen": true, "cursor": "A-7", "check_dangling": true, - "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", + "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", "adjacent_cues": [ "复审", "专项" @@ -1123,7 +1123,7 @@ "专项" ], "collides_with": "N", - "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", + "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", "retired": "2026-10-26 方案 B 转语义短语" }, { @@ -1237,8 +1237,8 @@ "cursor_owner_only": true, "check_dangling": false, "dangling_note": "与 UI 状态机 U1~U15、位号 U17 三方同形(§4.4 位号目录已排除)→ 只拦越游标", - "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", - "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇", + "cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀", + "owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇", "retired": "2026-10-26 方案 B 转语义短语" }, { @@ -2205,7 +2205,7 @@ ] }, "retired_to_phrase_2026_10_26": { - "note": "用户裁定方案 B:规划/待办类编号(登记簿 N-x/S-x/T-x、专项 A-x、已删报告 UI 簇 U1~U5)一律转语义短语。族保留登记、游标冻结;引用侧同批改写约 418 处、字面量净减 443(8,946 → 8,503):活号 237 + 已销项死引用 196 + U 簇非位号约 45。短语表见 docs/编号规范.md §4.1.1。", + "note": "用户裁定方案 B:规划/待办类编号(登记簿 N-x/S-x/T-x、专项 A-x、已删报告 UI 簇 U1~U5)一律转语义短语。族保留登记、游标冻结;引用侧同批改写约 418 处、字面量净减 443(8,946 → 8,503):活号 237 + 已销项死引用 196 + U 簇非位号约 45。短语表见 编号规范.md §4.1.1。", "families": [ "N", "S-LDG", @@ -2216,7 +2216,7 @@ "U-RPT" ] }, - "baseline_note": "2026-10-26 方案 B 曾把比例基线由 86.6% 下调到 85.9%(转短语消掉的全是「本可判定」引用,比值被稀释而不可判定绝对数未增;理由见 docs/门禁说明/id-check.md §7.6 与 docs/编号规范.md §8.1);同批新增第二根护栏 undecidable_total_ceiling 后,本文档又瘦身了一半,删掉的多是不可判定的历史号引用,两根护栏已按 --update-baseline 重打为比例 86.0% / 绝对数 1166(都只朝好的方向动)。2026-10-28 起两根护栏只报告、不拦提交(用户裁定,退役路线见 docs/编号规范.md §8.5)。", + "baseline_note": "2026-10-26 方案 B 曾把比例基线由 86.6% 下调到 85.9%(转短语消掉的全是「本可判定」引用,比值被稀释而不可判定绝对数未增;理由见 docs/门禁说明/id-check.md §7.6 与 编号规范.md §8.1);同批新增第二根护栏 undecidable_total_ceiling 后,本文档又瘦身了一半,删掉的多是不可判定的历史号引用,两根护栏已按 --update-baseline 重打为比例 86.0% / 绝对数 1166(都只朝好的方向动)。2026-10-28 起两根护栏只报告、不拦提交(用户裁定,退役路线见 编号规范.md §8.5)。", "undecidable_total_ceiling": 1166, - "undecidable_ceiling_note": "不可判定引用绝对数上限(refs_total - decidable),只许减不许增;--update-baseline 同步下调且拒绝上调。加它的原因:比值会被清号动作稀释,绝对数不会。2026-10-28 起转报告制:越线只打印,不影响退出码(见 docs/编号规范.md §8.5)。" + "undecidable_ceiling_note": "不可判定引用绝对数上限(refs_total - decidable),只许减不许增;--update-baseline 同步下调且拒绝上调。加它的原因:比值会被清号动作稀释,绝对数不会。2026-10-28 起转报告制:越线只打印,不影响退出码(见 编号规范.md §8.5)。" } diff --git a/scripts/archive/id_gate/编号治理历史.md b/scripts/archive/id_gate/编号治理历史.md index 1a15ccc6..7ea932e7 100644 --- a/scripts/archive/id_gate/编号治理历史.md +++ b/scripts/archive/id_gate/编号治理历史.md @@ -1,7 +1,7 @@ # 编号治理历史(2026-10-28 归档) -> 这是 `docs/编号规范.md` 在瘦身前(36 节 / 58 KB)的**过程记录**部分,逐字搬迁、未改写。 -> **不是现行口径**:现在的做法只看 `docs/编号规范.md`(约 120 行); +> 这是 `编号规范.md` 在瘦身前(36 节 / 58 KB)的**过程记录**部分,逐字搬迁、未改写。 +> **不是现行口径**:现在的做法只看 `编号规范.md`(约 120 行); > 门禁也已换代(全库语料审计 → 只查新增行),见 `docs/门禁说明/id-check-new.md`。 > 留它的唯一理由:批次清点、换算表、改号规程这些东西,将来要复查时还找得到原文。 @@ -90,13 +90,13 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 | **护栏 1**(报告值,不拦提交):可判定比例下限 `decidable_ratio_baseline` | **86.0%**(2026-10-28 实跑 87.15%;容差 0.1pp) | | **护栏 2**(报告值,不拦提交):不可判定引用绝对数上限 `undecidable_total_ceiling` | **1,166 处**(2026-10-28 实跑 **1,033** 处;构成拆解见 `docs/门禁说明/id-check.md` §7.7) | | 校验 1/2/3/4/5/6 错误级 | **0**;债务台账 0 条指纹 → `--strict` 实为**全量拦截** | -| 告警 | 悬空 2(`App/algo/freq.c` 的正序 / 负序记号,属 `docs/编号规范.md` §4.4 误判面)+ 孤儿 50(陷阱条目这类本就允许无人引用) | +| 告警 | 悬空 2(`App/algo/freq.c` 的正序 / 负序记号,属 原编号规范 §4.4 误判面)+ 孤儿 50(陷阱条目这类本就允许无人引用) | > ⚠ **读这些数字的口径**:跨批次**不可直接相减**。方案 B 把"本可判定的引用"换成散文,分子分母同缩, > 比例反而从 86.7% 掉到 85.98%,而**不可判定绝对数一处没涨**——护栏 2 就是这么来的。 > **2026-10-28 起两根护栏都只报告、不拦提交**(用户裁定:语料维护的成本已经高过它买到的一致性—— > 近 80 笔提交里 61 笔被编号体系牵连)。数字照样打,但不再决定一笔提交能不能过; -> 硬拦的只剩校验 1~6 的台账外新账。判断"编号有没有变坏"仍看绝对数与字面量总数。退役路线见 `docs/编号规范.md` §8.5。 +> 硬拦的只剩校验 1~6 的台账外新账。判断"编号有没有变坏"仍看绝对数与字面量总数。退役路线见 原编号规范 §8.5。 ### 8.3 改号与清号批次(只留要点) 2026-10-21 五批统一改名(陷阱号归范、主机侧单测认代码为属主登记处、追溯器三档口径对齐); @@ -122,7 +122,7 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 **冻结的变更记录行 40 处**与**一处原始串口日志**(真机抓包证据,改它等于篡改现场,永久保留) | | 三 | 测试用例族 561 站点 | **用户裁定不做**:该族保留,但**即日停发**(游标冻结,新用例不再配号) | | 五 | 「数据可信」任务卡号 14 个(中文前缀「卡」+ 数字),随注入验证卡销项整族清退 | 全仓 288 站点 / 56 文件改语义短语(代码与测试 191 / 文档 56 / 门禁配置与本文 41),活引用收口 **0**;门禁字面量与不可判定绝对数**零变化**(本族从不在计数内)——换算表与机器面空白见 §9.3(批次四记在上面的复测段,未进本表) | -| 六 | 2026-10-28 复测:在册旧号**活引用归零**,账面**不动基线** | 按 「retired-to-phrase」 与 「void」 两类别名当探针全库复扫(排除门禁自身语料与硬件位号目录):剩余命中面**全部**落在变更记录行(`docs/编号规范.md` §4.3 不回改)、元器件位号与 Socket 状态组合(`docs/编号规范.md` §4.4 判非编号,清它等于改硬件资料)、以及属主文档的历史对照列;真编号活引用为 **0**。本笔不重打 §8.1 两根护栏基线(那些数随在飞改动漂移,属各自批次的收口),当日实测三项与命中清单写入 `ci-artifacts/id-metrics-batch-six.txt`(不进语料的口径台账),正文只留结论:剩余命中面另含讲编号的文档里的形态自述,本笔自身两行正文带来个位数增量、远低于护栏上限,两根本基线**均未下调**、零编号增删 | +| 六 | 2026-10-28 复测:在册旧号**活引用归零**,账面**不动基线** | 按 「retired-to-phrase」 与 「void」 两类别名当探针全库复扫(排除门禁自身语料与硬件位号目录):剩余命中面**全部**落在变更记录行(原编号规范 §4.3 不回改)、元器件位号与 Socket 状态组合(原编号规范 §4.4 判非编号,清它等于改硬件资料)、以及属主文档的历史对照列;真编号活引用为 **0**。本笔不重打 §8.1 两根护栏基线(那些数随在飞改动漂移,属各自批次的收口),当日实测三项与命中清单写入 `ci-artifacts/id-metrics-batch-six.txt`(不进语料的口径台账),正文只留结论:剩余命中面另含讲编号的文档里的形态自述,本笔自身两行正文带来个位数增量、远低于护栏上限,两根本基线**均未下调**、零编号增删 | 编号字面量 **8,787 → 7,828**;不可判定绝对数 **1,161 → 982**(上限 1,166,余量从 5 格宽到 184 格)。 比值 86.79% → 87.46% 属**纯稀释**(删的都是可判定引用,分子分母同缩),**基线不下调**,见本节末裁定。 @@ -157,16 +157,16 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 | 已清零 | `T-TEST`(台架阶段裸形) | 活引用 **0**;命中全部落在本文与 `.dsh/skills/` 的形态举例里 | | 已清零 | `L-PROT` 保护功能号 | 活引用 **0**;剩原始串口日志 1 处(冻结证据、永久保留)+ 技能文档形态举例 | | 已清零 | `FEAT` 网络条目号 | 活引用 **0**;属主文档 §7 编号列 13 条是历史对照,不是引用 | -| **非编号误判**(`docs/编号规范.md` §4.4,不清) | 版本记号 CMSIS-RTOS 的那个(字母 V 紧跟数字 2)**66 站点 / 31 文件**、幅值记号与 MAC 字节对的 A 形、活表代号 E 形、Socket 状态组合 U 形、测频正/负序记号 S 形、傅氏求和上界 N 形 | 合计约 **1,100** 站点被宽松正则顺伤 | -| **冻结历史波次号**(`docs/编号规范.md` §4.3 正文不回改) | 字母 B/C/D/W/M/R/G/O + S-REVIEW/E-EXP/A-AUDIT/D-DOC 等 16 个已冻结族 | 合计约 1,500 站点;**无连字符 → 按 `docs/编号规范.md` §4.4 判据本就不是编号** | +| **非编号误判**(原编号规范 §4.4,不清) | 版本记号 CMSIS-RTOS 的那个(字母 V 紧跟数字 2)**66 站点 / 31 文件**、幅值记号与 MAC 字节对的 A 形、活表代号 E 形、Socket 状态组合 U 形、测频正/负序记号 S 形、傅氏求和上界 N 形 | 合计约 **1,100** 站点被宽松正则顺伤 | +| **冻结历史波次号**(原编号规范 §4.3 正文不回改) | 字母 B/C/D/W/M/R/G/O + S-REVIEW/E-EXP/A-AUDIT/D-DOC 等 16 个已冻结族 | 合计约 1,500 站点;**无连字符 → 按 原编号规范 §4.4 判据本就不是编号** | 合计:**44 个族仍有命中站点**,其中真编号活引用只剩上面「保留」四行;批次一/二涉及的四个族活引用均已归零。 **批次四做了三件事**(本轮指令:「把能清的族清掉一批」): -1. **关掉已清退族的发号口**:`L-` 与 `F--` 从 `docs/编号规范.md` §4.1『允许继续发号』**整行移出**(7 行 → 5 行),在『已停发、存量待清』各补一行硬口径——留着那两行,扫表的人照样照着发号(同 `TC-*` 那次的教训)。**机器面已探针复核**:`_check_dangling` 对「L 段号形态的新号」与「F 条目号形态的新号」各写一个,全部命中 `docs/编号规范.md` §8 校验 3 **错误级**(台账 0 指纹 → 等于拦提交),所以不需要再冻结数值游标(各段最高号不同,单一数字游标反而放行低号)。 +1. **关掉已清退族的发号口**:`L-` 与 `F--` 从 原编号规范 §4.1『允许继续发号』**整行移出**(7 行 → 5 行),在『已停发、存量待清』各补一行硬口径——留着那两行,扫表的人照样照着发号(同 `TC-*` 那次的教训)。**机器面已探针复核**:`_check_dangling` 对「L 段号形态的新号」与「F 条目号形态的新号」各写一个,全部命中 原编号规范 §8 校验 3 **错误级**(台账 0 指纹 → 等于拦提交),所以不需要再冻结数值游标(各段最高号不同,单一数字游标反而放行低号)。 2. **本文自述形态化**:把本文里 4 处「字母 T 紧跟数字」与 2 处 DRV 段孤儿号的**字面量写法**改成形态描述(lesson 不丢),使这四个族的门禁命中数真正归零,而不是停在「只有规范自己在引用」。 -3. **登记机器面还空着的那一面**:`scripts/archive/id_gate/id_registry.json` 给 `L-PROT`/`FEAT` 补 `retired` 字段;给 `T-TEST` 补 `cursor_note` 写明——它的 pattern 最高只到数字 3,**即使 `frozen: true` 校验 5 也碰不到任何新写法**(探针实测写 4 不响),所以该族停发今天只有 `docs/编号规范.md` §3.3 禁令 + 评审两道兜底,**别把「存量已清零」读成「机器已关闭」**。 +3. **登记机器面还空着的那一面**:`scripts/archive/id_gate/id_registry.json` 给 `L-PROT`/`FEAT` 补 `retired` 字段;给 `T-TEST` 补 `cursor_note` 写明——它的 pattern 最高只到数字 3,**即使 `frozen: true` 校验 5 也碰不到任何新写法**(探针实测写 4 不响),所以该族停发今天只有 原编号规范 §3.3 禁令 + 评审两道兜底,**别把「存量已清零」读成「机器已关闭」**。 > ⚠ 本轮执行期间另有一道并行改动落地:`docs/测试说明/测试数据/boot_log_data/README.md`(登记簿旧号「启动日志固化流程」)与 `docs/测试说明/测试数据/m2_data/README.md`(审计发现 E 族一处死号)已由该道改为语义短语——**本笔不重复改这两处、也不替它收口**;复测两处死号引用均为 0。 @@ -189,7 +189,7 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 **批次三 · 用户裁定 2026-10-27「不做」:`TC-*`(561 个站点 / 472 个字面量 / 77 个文件)保留现状**。 裁定记录(原话:「**批次三,不坐**」,即批次三不做)。留着的理由与今天的定调并不矛盾,而是它的前提: -`TC-*` 是本规范 `docs/编号规范.md` §4.1 那条判据**唯一真正满足它的族**——`check_test_traceability.py` 与 40 套 `run_unit_test.py` +`TC-*` 是本规范 原编号规范 §4.1 那条判据**唯一真正满足它的族**——`check_test_traceability.py` 与 40 套 `run_unit_test.py` **按字面量读它**,C 断言标签、测试函数名、文档用例表三处同一号,是「代码 ↔ 文档」双向核对的机器把手。 清它的代价不是改文本,而是**换掉追溯机制**:候选方案「用例名即标识」(`test_xxx_yyy()` ↔ 文档表格行名, 脚本按名字比对)要把追溯门禁重写并重打基线,收益是字母号一次少掉一半以上,代价是**期间测试与文档的 @@ -199,20 +199,20 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 「不做」之后跟着三条硬口径(否则裁定会被当成默许继续扩族): ① **本族即日停发**:现存号只减不增,**新用例一律用语义化测试函数名 + 文档表格行名,不再配 `TC-` 号** - (机器口径已同批落地:见本节末「机器口径已落地」与 `docs/编号规范.md` §4.1 框内第三条); - 同一笔把 `TC-*` 从 `docs/编号规范.md` §4.1『允许继续发号』表里**整行移出**(只在『已停发』栏留一行)——留在那张表里, + (机器口径已同批落地:见本节末「机器口径已落地」与 原编号规范 §4.1 框内第三条); + 同一笔把 `TC-*` 从 原编号规范 §4.1『允许继续发号』表里**整行移出**(只在『已停发』栏留一行)——留在那张表里, 脚注写得再重,扫表的人照样照着发号; -② **停发 ≠ 待清**:现存号与 registry 登记一律保留、不清、不复用(机器追溯把手 + `docs/编号规范.md` §1「不回收、不复用」); +② **停发 ≠ 待清**:现存号与 registry 登记一律保留、不清、不复用(机器追溯把手 + 原编号规范 §1「不回收、不复用」); 引用既有用例仍可用旧号,新用例不配新号; ③ 若将来真要清,按 `scripts/rename_ids.py` + §7.3 五步**单独开卡**,前提是先让追溯器同时认两种形态 -(新旧并行核对通过,再谈切换),**不许先改文档再改代码**(会凭空造出悬空号,`docs/编号规范.md` §8 校验 3 会当场拦)。 +(新旧并行核对通过,再谈切换),**不许先改文档再改代码**(会凭空造出悬空号,原编号规范 §8 校验 3 会当场拦)。 **这条裁定的机器口径已落地(2026-10-27 同日补;上一版这里写「停发今天只有规范效力」,那是当日的实测记录,不是笔误,留作历史)**: `scripts/archive/id_gate/id_registry.json` 的 **37 个 TC 类族已全部 `frozen: true`**,其中 **34 个 `TC-HOST-*` 子族带游标**,冻结在 裁定日该套件存量最高号;5 个游标低于存量的已抬到水位(`TC-PROTELEM-013→015`、`TC-SYSLOG-108→137`、 `TC-ADCHEALTH-011→023`、`TC-ADCCAL-017→023`、`TC-I104SRV-041→053`),裁定理由记在 registry 顶层 `tc_freeze_2026_10_27`。落地的直接诱因是本族在裁定当天还在长大:另一道在飞的 `time_sync` 改动新增了 -`TC-TIMESYNC-0xx`(撞的是 `docs/编号规范.md` §8 校验 3 悬空引用而非校验 5——那个模块码没有专属子族,正落在主族 `TC` 的空白面上)。 +`TC-TIMESYNC-0xx`(撞的是 原编号规范 §8 校验 3 悬空引用而非校验 5——那个模块码没有专属子族,正落在主族 `TC` 的空白面上)。 **冻结水位(只减不增)**:TC 类族按门禁 refs 口径(字面量 × 文件去重,属主登记处与本文写法示例不计)—— 动手前基线 **561 站点 / 472 个字面量 / 77 个文件**;本笔落地时工作区实测 **590 / 497 / 81**(站点 / 字面量 / 文件)。 @@ -233,46 +233,46 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 ### 9.2 别再做什么 「编号说明」这件事本身应该继续变薄:每多一个族,就多一处需要有人记得它的地方;每多发一个号,就多一个 -将来没人敢删的字符串。要新增族之前,请把 `docs/编号规范.md` §4.1 的「允许继续发号」那 5 行当作反对你的第一手证据。 +将来没人敢删的字符串。要新增族之前,请把 原编号规范 §4.1 的「允许继续发号」那 5 行当作反对你的第一手证据。 ### 9.3 批次五换算表:「数据可信」任务卡号(2026-10-27 整族清退) 用户指令(2026-10-27):「**数据可信.md 已经完成的内容请进行销项删除,去除相关编号**」。两件事同做: -1. **销项**:`docs/任务规划/数据可信.md` `docs/编号规范.md` §5 里 2026-10-27 台架闭环的「已知电压注入验证」行**删行**。 +1. **销项**:`docs/任务规划/数据可信.md` 原编号规范 §5 里 2026-10-27 台架闭环的「已知电压注入验证」行**删行**。 上一笔曾特意标 ✅ 保留,理由是该行被 `App/task/adc_task.c` 的 v3.3 修订行按卡号当口径出处引用; 引用侧改成语义短语后该理由不再成立 → **例外撤销**。判据与实测记录的属主 = `docs/硬件平台/ADC通道映射说明.md` §8.1(六项判据全 PASS、斜率 6544.2 码/V、偏差 −0.14 %), 执行侧 = `docs/测试说明/专项验证/ADC前端注入验证流程.md`(含两项残留口径与残差表)。 2. **整族清退**:「卡」+ 数字 1~11 那 11 行早在 2026-10-25 就删完了,代码注释里剩下的这种形态今天 - **查无此行**——按 `docs/编号规范.md` §4.1.1 末句,正确动作是**删号留事实**(换成语义短语),不是回去补一个定义。 + **查无此行**——按 原编号规范 §4.1.1 末句,正确动作是**删号留事实**(换成语义短语),不是回去补一个定义。 | 旧号形态 | 语义短语 | 现行口径出处 | |---|---|---| | 「卡」+ 数字 0 | 已知电压注入验证 | `docs/硬件平台/ADC通道映射说明.md` §8.1(✅ 2026-10-27,已销项删行) | -| 「卡」+ 数字 0b | 端子/子板变比确认 | `docs/任务规划/数据可信.md` `docs/编号规范.md` §5;缺口面 = `docs/硬件平台/ADC通道映射说明.md` §7.1 链路分段表 ④ 行 | +| 「卡」+ 数字 0b | 端子/子板变比确认 | `docs/任务规划/数据可信.md` 原编号规范 §5;缺口面 = `docs/硬件平台/ADC通道映射说明.md` §7.1 链路分段表 ④ 行 | | 「卡」+ 数字 1 | 量程口径冻结 | `docs/任务规划/数据可信.md` §2.1 | -| 「卡」+ 数字 2 | 标定折算落地 | `docs/任务规划/数据可信.md` `docs/编号规范.md` §4.1 | -| 「卡」+ 数字 3 | 有符号零点类型(CFG_VAL_INT) | `docs/任务规划/数据可信.md` `docs/编号规范.md` §4.4 | -| 「卡」+ 数字 4 | 标定落盘与整定入口 | `docs/任务规划/数据可信.md` `docs/编号规范.md` §4.4 | -| 「卡」+ 数字 5 | 未标定即闭锁 | `docs/任务规划/数据可信.md` `docs/编号规范.md` §4.3 | +| 「卡」+ 数字 2 | 标定折算落地 | `docs/任务规划/数据可信.md` 原编号规范 §4.1 | +| 「卡」+ 数字 3 | 有符号零点类型(CFG_VAL_INT) | `docs/任务规划/数据可信.md` 原编号规范 §4.4 | +| 「卡」+ 数字 4 | 标定落盘与整定入口 | `docs/任务规划/数据可信.md` 原编号规范 §4.4 | +| 「卡」+ 数字 5 | 未标定即闭锁 | `docs/任务规划/数据可信.md` 原编号规范 §4.3 | | 「卡」+ 数字 6 | 下游常数按工程量重定 | `docs/任务规划/数据可信.md` §2.3 | -| 「卡」+ 数字 7 | 量纲回归用例 | `docs/任务规划/数据可信.md` `docs/编号规范.md` §3 退出判据第 ⑥ 条;用例在 `test/host/prot_dim` | +| 「卡」+ 数字 7 | 量纲回归用例 | `docs/任务规划/数据可信.md` 原编号规范 §3 退出判据第 ⑥ 条;用例在 `test/host/prot_dim` | | 「卡」+ 数字 8 | 遥测快照发布 | `docs/任务规划/数据可信.md` §4.5 | | 「卡」+ 数字 9 | 104 改读快照 | `docs/任务规划/数据可信.md` §4.5 | | 「卡」+ 数字 10 | 运行参数段 | `App/algo/run_par.h` 头注释 + `docs/子系统设计/IEC104上行设计说明.md` | | 「卡」+ 数字 11 | 频率点绑定 | `docs/子系统设计/IEC104上行设计说明.md` 的 `0x401D` 行 | -| 「卡」+ 数字 12 | 两点标定 | `docs/任务规划/数据可信.md` `docs/编号规范.md` §5(未开始,等标准源) | +| 「卡」+ 数字 12 | 两点标定 | `docs/任务规划/数据可信.md` 原编号规范 §5(未开始,等标准源) | **本表把形态写成「卡」+ 数字、不复述字面量**:本文是门禁语料,复述形态会把"讲规则的文档"变成 自己的引用站点(§9.1 批次四第 2 条同一条教训);要查旧号,看左列形态 + 属主文档的历史行。 - **旧号永久作废、不得重新取走**:这一族**没有机器识别面**(中文前缀不进语料),停发今天只有 - `docs/编号规范.md` §4.1.1 本行 + 本表 + 评审兜住。要机械化,得先给"中文前缀 + 数字"设计候选形态——那与 §9.1 末尾 + 原编号规范 §4.1.1 本行 + 本表 + 评审兜住。要机械化,得先给"中文前缀 + 数字"设计候选形态——那与 §9.1 末尾 「族级加字面量上限」同属追溯机制改造,**按 §7.3 单独开卡**,别夹在清退批里顺手做。 - **同形态不同属主**:`docs/任务规划/UI补齐.md` 的条目现在写「第 N 项」,历史上被别处写成同一形态的 4 处(其实指已入库的 `[comm]` 段前置项)已随本批改成不带号的语义形态。同一裸形态跨两个属主文档, - 正是 `docs/编号规范.md` §4.1「别拿同形当同族」的实证——清号必须**按属主文档逐处判语义**,不许全局查找替换。 + 正是 原编号规范 §4.1「别拿同形当同族」的实证——清号必须**按属主文档逐处判语义**,不许全局查找替换。 - **不在本批的**:里程碑号(字母 M + 数字)与并行道号(道A/道D/道G)一律保持原样,是否清退等用户 单独裁定,**不要顺手做**。 @@ -343,7 +343,7 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 ——全仓无别名登记、无第二个引用点,指向已不可还原;看门狗设计说明「原 L2 基线 3/10」按上下文 (38 次上板启动复现)读作主机侧回归的早期基线,改写为「主机侧回归的早期基线 3/10」。 4. **登记簿条目 `L5 队列往返基线待重验` 改名**为「队列往返基线待重验」:这里的 `L5` 曾**长在语义 - 短语里**(`id_aliases.json` 当年就是这么登记的),属"短语里混着号"的坏例子——`docs/编号规范.md` + 短语里**(`id_aliases.json` 当年就是这么登记的),属"短语里混着号"的坏例子——`编号规范.md` §1 的好例子清单里正是它。引用侧 5 处同批改(登记簿 §1/§7、实机测试实施指南 §7.3 标题与步骤表、 编号规范好例子清单);归档里那条历史 note 原文不动,它是当时决定的记录。 @@ -355,14 +355,14 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语 | 日期 | 变更 | 说明 | |---|---|---| | 2026-10-28 | **编号门禁第三步收口:全库语料审计退役(钩子 52 → 51)** | 用户裁定跳过观察期直接做。`check_ids.py` 与两份语料(`id_registry.json` 87.6 KB / `id_aliases.json` 187 KB)+ 债务台账整体移入 `scripts/archive/id_gate/`(附归档 README,含"为什么退役 / 现在用什么 / 怎么手工跑");`id-check` 钩子摘除,现役编号门禁只剩 `id-check-new`(只查新增行)。连带改:`rename_ids.py` 的别名表路径指向归档、新门禁排除面加 `scripts/archive/`、`doc-links` 跳过 `.mnemon/` 与 `ci-artifacts/`(本地状态与草稿,非项目文档)、`id-check.md` 加退役横幅、`门禁说明/README` 与 `AGENTS` 的钩子数三数对齐(声明 51 / commit 阶段 50 + gitlint 1)。归档脚本从新路径实跑:811 文件 / 8,051 字面量、`--strict` rc=0。 | -| 2026-10-28 | **编号门禁第二步落地:新增行拦截(零语料)** | 脚本(今在 `scripts/archive/id_gate/check_ids_new.py`)+ 钩子 `id-check-new`:只看新增行,破折形态未知前缀 FAIL、已停发族只 WARN、单字母+数字放行(元件位号同形,见该门禁 §6 盲区)。白名单是**前缀级**两张表(活族 11 条 / 器件与协议约 90 条),不是字面量账本——后者会退化成 `id_aliases.json` 的老路。调参依据:最近 80 笔真实提交回放,未知形态 15 种(12 种是设备与协议名、3 种是停发族),调好后误报 0;自检 5 正例 + 29 反例。与 `id-check` **双跑**一个观察期后再按 `docs/编号规范.md` §8.5 ③ 退役旧语料。 | -| 2026-10-28 | **编号门禁减负第一步:两根护栏转报告制** | 用户裁定「编号门禁每次浪费很多时间」→ 先摘掉语料审计的强制面。护栏 1(可判定比例基线)与护栏 2(不可判定绝对数上限)自此**只打印、不拦提交**;实测把基线调到 99.9%、上限调到 1 处,退出码仍为 0。硬拦只剩校验 1~6 的台账外新账(同一实测:新文件里写一个自造前缀 + 数字,校验 1 与增量拦截照旧 FAIL)。退役路线 ①②③ 写进 `docs/编号规范.md` §8.5;减负依据 = 近 80 笔提交有 61 笔被编号体系牵连、语料共 99 族(78 族已冻结)。 | -| 2026-10-28 | **变更记录行里已停发/作废族的示例编号改形态描述;并用门禁自身计数器把「这一笔能不能压下不可判定绝对数」钉死为零** | 用户指令:把变更记录行里已停发族的那几枚示例编号改成语义形态描述,并确认它让不可判定引用绝对数净减、不是只算自己这一笔。**实测裁定:净减 = 0**。门禁把「表格首格是日期」的行整行豁免于编号判定(registry 侧的变更记录豁免,本笔前全库已豁免 198 处站点),本表的示例编号从来不进引用总数分母,改它必然不动绝对数——改前改后同一个计数器均为 **1003**(上限 1166;可判定 87.43%,三项都是 2026-10-28 本回合实测)。唯一移动的是那行豁免计数本身(本文件少 1 处站点),把它当清退成果就是把自记账成全局减量,正是本笔要排除的错法。本文对该计数器的全部贡献 **6** 处,逐文件集合差实测:全是「非编号」判定栏里既定的噪声名与裸形盲区(哈希算法名、总线名、严重度档位、硬件位号),不是编号,不清。本笔动的 3 处只是写法:作废的网络条目孤儿号(F 前缀 + 模块码段 + 数字序号三段)与已删报告的 UI 簇(字母 U 紧跟一位数字,区间两端即该簇首尾两枚);事实本体仍在别名表、registry 游标备注与 git 历史,一处没丢。刻意不动:硬件位号形态的举例(判非编号)、保留现存号族的冻结游标数字(冻结水位的证据本体)、其它文档与注册表里的同名字段(各自写域)。`docs/编号规范.md` §5.5 同步写死该例外的硬口径。零代码、零编号增删、两根护栏基线均未调整。 | -| 2026-10-27 | **批次五:「数据可信」任务卡号整族清退 + 注入验证卡销项删行** | 用户指令「数据可信.md 已经完成的内容请进行销项删除,去除相关编号」。实测 **288 站点 / 56 文件**(代码与测试 191 / 文档 56 / 门禁配置与本文 41)全改语义短语;`docs/编号规范.md` §5 表首列由「序」改「标识(任务名)」、14 个旧号进 §9.3 换算表;顺带按属主文档判语义清掉同形态的悬空引用 4 处(「UI 补齐」波次的 `[comm]` 段前置项)。门禁面:编号字面量与不可判定绝对数**零变化**(中文前缀不在语料),收口复跑 `check_ids.py --strict` 与 `check_doc_links.py --all --sections-strict` | -| 2026-10-27 | **批次四:`L-PROT` / `FEAT` 发号口关闭(`docs/编号规范.md` §4.1 七行→五行)+ 本文自述形态化 + 登记 `T-TEST` 机器面空白** | 用户指令「语义标识已定为默认形态,看看还有哪些编号族仍被引用、各自还剩多少,把能清的族清掉一批」。按门禁 `Checker` 实测三口径重打 §9 存量表:**真编号活引用只剩 `TC-*`(保留、水位 497/81 未涨)、`TRAP-*`、`CODE-RULE-*`、`MENU-STATE-*` 四族**,批次一/二涉及的 `N-*`/`TM-*`/`T-TEST`/`L-PROT`/`FEAT` 活引用均已归零。本笔:① `docs/编号规范.md` §4.1 把 `L-`、`F--` 从『允许继续发号』整行移出并在『已停发』栏各写一行(含探针证据:新形态号 → 校验 3 错误级);② 本文 6 处形态自述改「字母+数字」描述,使四个族门禁命中归零、lesson 不丢;③ registry 给 `L-PROT`/`FEAT` 补 `retired`、给 `T-TEST` 补 cursor_note(pattern 上限即 3 → 冻结游标是空操作,停发今天只有规范效力);④ 分类登记 `docs/编号规范.md` §4.4 误判面(版本记号 / 活表代号 / 状态组合 / 位号)与 `docs/编号规范.md` §4.3 冻结波次号两类**不清**的理由。未改门禁判定逻辑、未动冻结历史与原始串口日志、未新增任何号。 | +| 2026-10-28 | **编号门禁第二步落地:新增行拦截(零语料)** | 脚本(今在 `scripts/archive/id_gate/check_ids_new.py`)+ 钩子 `id-check-new`:只看新增行,破折形态未知前缀 FAIL、已停发族只 WARN、单字母+数字放行(元件位号同形,见该门禁 §6 盲区)。白名单是**前缀级**两张表(活族 11 条 / 器件与协议约 90 条),不是字面量账本——后者会退化成 `id_aliases.json` 的老路。调参依据:最近 80 笔真实提交回放,未知形态 15 种(12 种是设备与协议名、3 种是停发族),调好后误报 0;自检 5 正例 + 29 反例。与 `id-check` **双跑**一个观察期后再按 原编号规范 §8.5 ③ 退役旧语料。 | +| 2026-10-28 | **编号门禁减负第一步:两根护栏转报告制** | 用户裁定「编号门禁每次浪费很多时间」→ 先摘掉语料审计的强制面。护栏 1(可判定比例基线)与护栏 2(不可判定绝对数上限)自此**只打印、不拦提交**;实测把基线调到 99.9%、上限调到 1 处,退出码仍为 0。硬拦只剩校验 1~6 的台账外新账(同一实测:新文件里写一个自造前缀 + 数字,校验 1 与增量拦截照旧 FAIL)。退役路线 ①②③ 写进 原编号规范 §8.5;减负依据 = 近 80 笔提交有 61 笔被编号体系牵连、语料共 99 族(78 族已冻结)。 | +| 2026-10-28 | **变更记录行里已停发/作废族的示例编号改形态描述;并用门禁自身计数器把「这一笔能不能压下不可判定绝对数」钉死为零** | 用户指令:把变更记录行里已停发族的那几枚示例编号改成语义形态描述,并确认它让不可判定引用绝对数净减、不是只算自己这一笔。**实测裁定:净减 = 0**。门禁把「表格首格是日期」的行整行豁免于编号判定(registry 侧的变更记录豁免,本笔前全库已豁免 198 处站点),本表的示例编号从来不进引用总数分母,改它必然不动绝对数——改前改后同一个计数器均为 **1003**(上限 1166;可判定 87.43%,三项都是 2026-10-28 本回合实测)。唯一移动的是那行豁免计数本身(本文件少 1 处站点),把它当清退成果就是把自记账成全局减量,正是本笔要排除的错法。本文对该计数器的全部贡献 **6** 处,逐文件集合差实测:全是「非编号」判定栏里既定的噪声名与裸形盲区(哈希算法名、总线名、严重度档位、硬件位号),不是编号,不清。本笔动的 3 处只是写法:作废的网络条目孤儿号(F 前缀 + 模块码段 + 数字序号三段)与已删报告的 UI 簇(字母 U 紧跟一位数字,区间两端即该簇首尾两枚);事实本体仍在别名表、registry 游标备注与 git 历史,一处没丢。刻意不动:硬件位号形态的举例(判非编号)、保留现存号族的冻结游标数字(冻结水位的证据本体)、其它文档与注册表里的同名字段(各自写域)。原编号规范 §5.5 同步写死该例外的硬口径。零代码、零编号增删、两根护栏基线均未调整。 | +| 2026-10-27 | **批次五:「数据可信」任务卡号整族清退 + 注入验证卡销项删行** | 用户指令「数据可信.md 已经完成的内容请进行销项删除,去除相关编号」。实测 **288 站点 / 56 文件**(代码与测试 191 / 文档 56 / 门禁配置与本文 41)全改语义短语;原编号规范 §5 表首列由「序」改「标识(任务名)」、14 个旧号进 §9.3 换算表;顺带按属主文档判语义清掉同形态的悬空引用 4 处(「UI 补齐」波次的 `[comm]` 段前置项)。门禁面:编号字面量与不可判定绝对数**零变化**(中文前缀不在语料),收口复跑 `check_ids.py --strict` 与 `check_doc_links.py --all --sections-strict` | +| 2026-10-27 | **批次四:`L-PROT` / `FEAT` 发号口关闭(原编号规范 §4.1 七行→五行)+ 本文自述形态化 + 登记 `T-TEST` 机器面空白** | 用户指令「语义标识已定为默认形态,看看还有哪些编号族仍被引用、各自还剩多少,把能清的族清掉一批」。按门禁 `Checker` 实测三口径重打 §9 存量表:**真编号活引用只剩 `TC-*`(保留、水位 497/81 未涨)、`TRAP-*`、`CODE-RULE-*`、`MENU-STATE-*` 四族**,批次一/二涉及的 `N-*`/`TM-*`/`T-TEST`/`L-PROT`/`FEAT` 活引用均已归零。本笔:① 原编号规范 §4.1 把 `L-`、`F--` 从『允许继续发号』整行移出并在『已停发』栏各写一行(含探针证据:新形态号 → 校验 3 错误级);② 本文 6 处形态自述改「字母+数字」描述,使四个族门禁命中归零、lesson 不丢;③ registry 给 `L-PROT`/`FEAT` 补 `retired`、给 `T-TEST` 补 cursor_note(pattern 上限即 3 → 冻结游标是空操作,停发今天只有规范效力);④ 分类登记 原编号规范 §4.4 误判面(版本记号 / 活表代号 / 状态组合 / 位号)与 原编号规范 §4.3 冻结波次号两类**不清**的理由。未改门禁判定逻辑、未动冻结历史与原始串口日志、未新增任何号。 | | 2026-10-27 | **批次一 `F-*` 收口:网络设计 12 个条目号转「条目名」语义短语,§7 表加「条目名」列为权威对照** | 用户指令「把网络设计里的 `F-*` 条目号换成语义短语,别改坏硬件资料的 T1/T2/T3 位号和 Mermaid 节点名」。走 `scripts/rename_ids.py`(映射 `scripts/rename_maps/batch7-f-net-semantic.json`,`--no-alias` 后手工写别名),10 处定点改写=属主文档正文 9 处(含 1 处孤儿号删号留事实)+ `test/host/net_socket/net_socket_test.c` 注释 1 处;孤儿号(F 前缀 + 模块码段 + 数字序号的三段形态;§7 从无定义行)删号留事实、不补定义;13 个旧号标 `retired-to-phrase`。刻意不动:§7 编号列(历史对照)、`BSD_Socket_API_使用指南.md` 变更记录行、`docs/硬件平台/` 位号、Mermaid 节点名。`scripts/archive/id_gate/id_registry.json` FEAT `cursor_note` 改记停发口径(三模块各有最高号 → 不冻结游标的理由写在里面)。零代码语义变更。 | -| 2026-10-27 | **停发机械化落地:34 个 `TC-HOST-*` 子族游标冻结,`docs/编号规范.md` §8 校验 5 开始咬新配的 TC 号** | 上一笔把缺口登记为「停发今天只有规范效力」并写明机械化怎么做;本笔照它落地、把话兑现:`scripts/archive/id_gate/id_registry.json` 37 个 TC 类族全部 `frozen: true`,34 个子族的 `cursor` 冻结在裁定日存量最高号(字符串形态——整型比较静默不生效;5 个低于存量的已抬:`TC-PROTELEM-013→015`、`TC-SYSLOG-108→137`、`TC-ADCHEALTH-011→023`、`TC-ADCCAL-017→023`、`TC-I104SRV-041→053`),理由记在顶层 `tc_freeze_2026_10_27`。探针(Checker `_check_frozen`):在 `TC-PROTSET-` 段存量最高号之上再加一号 → 命中 1 条校验 5,写存量最高号本身 → 零误伤;`check_ids.py --only 5` = 0 处;plain 与 `--strict` 的错误级 findings 与本笔前逐条相同(**12 条 `TC-TIMESYNC-0xx` 悬空引用属另一道在飞的 time_sync 改动,不在本笔写域,也没替它改**);台账 0 条、可判定 87.67%、不可判定 979 / 上限 1,166,不动 §8.1。**没有把主族 `TC` 说成已冻结**:它 `cursor` 仍为 `null`,`docs/编号规范.md` §4.1 框内第三条与 §9.1 末段把这块空白及其兜底(校验 3 + 冻结水位 564/474/79 只减不增 + 评审)写明,并规定「给这些模块补号即使在文档里补了定义行也算违令」。§9.1 末段由「效力边界」改写为「机器口径已落地」,当日实测留作历史不抹。零代码、零编号增删。 | -| 2026-10-27 | **停发口径收口:`TC-*` 从『允许继续发号』表整行移出,并登记「机器面还没冻结」这个缺口** | 裁定上一笔已入档,但效力写在了会被扫表读过的地方:`TC-*` 仍占着「允许继续发号」表第一行、用途列还写着「要进 C 断言标签」,那句"注意它已停发"只是表前的脚注;而那张表连表头行都在早先瘦身时丢了(GFM 里表格不能紧跟段落,整张塌成正文)。本笔:① 移出该行、补回表头与空行,『允许继续发号』写成**恰好 7 行**;② 表下加防误读框,把「不做了」的两条误读各钉一次——「维持原状所以还能发」与「停发所以顺手清掉/复用号」,并写明唯一重启入口 = 先裁定再回本节改表;③ 实测登记效力边界:registry 37 个 TC 类族仍有 35 个 `frozen: false` 带活游标,`docs/编号规范.md` §8 第 5 项碰不到它们(且 `cursor` 为空时该校验直接跳过),所以停发今天只有规范效力,机械化单独开卡走 §7.3;④ `docs/编号规范.md` §5.1 补「不在 7 行内第 ① 步就走不通」、§9.1 两条硬口径扩成三条(新增「停发 ≠ 待清」)并补效力边界段、§9.2 计数 8 → 7。同步:`AGENTS.md` 索引行、`docs/测试说明/流程与规范/测试文档模板规范.md` §6.3、`docs/门禁说明/host-unit-tests.md` §7 号段行(那里原文写着「新增用例要带号」,是最直接的误读源头)。零代码、零编号增删。 | -| 2026-10-27 | **批次三裁定「不做」:`TC-*` 保留现状但即日停发** | 用户原话「批次三,不坐」(即不做)。裁定写进 §9.1 批次三(含理由与两条硬口径)、`docs/编号规范.md` §4.1『已停发』栏加一行、§9 结果表同步。停发的硬口径:游标冻结、现存号只减不增、**新用例一律用语义化测试函数名 + 文档表格行名,不再配 `TC-` 号**;真要清则先让追溯器同时认新旧两种形态、核对通过后单独开卡,不许先改文档再改代码(会造悬空号)。留着的判据依据:`TC-*` 是 `docs/编号规范.md` §4.1 那条判据(有脚本按字面量匹配)唯一真满足的族,字母号的痛在「人读」侧,解法是不再造给人读的号,而不是拆掉机器面的把手。 | -| 2026-10-27 | **语义标识定为唯一默认形态;编号收窄为「机器按字面量匹配」的例外,并首次给出现量清点与三批计划** | 用户原话:「不要用字母加数字的编号,简直太难以理解了,语义标识是最好的」。本笔:① 标题下的一句话从「允许用号的族只有 8 个」改成「语义标识是唯一默认、编号是例外」,并把 `docs/编号规范.md` §4.1 拆成『允许继续发号』8 族与『已停发、存量待清』4 族(`N-*` / `TM-*` / 台架阶段裸形 / `F-*`)——原表自称穷举,实际漏登记了这三类在用族,属真缺陷。② 新增 §9 存量清点(用门禁自身接口实测:26 族仍有引用、565 个字面量、1,108 个引用站点)与三批计划:批次一 62 站点不碰门禁即可清、批次二保护功能号 184 站点转功能名、批次三 `TC-*` 561 站点需先换追溯机制(等用户裁定)。③ §8.1 基线按 2026-10-27 复测重打:784 文件 / 7,828 字面量、护栏 2 实跑 1,161 / 上限 1,166。 | -| 2026-10-26 | **编号治理收口:清死号 → 停发活号 → 本文重写为短版(用户三次裁定)** | 全仓字母+数字编号 10,956 → 8,230 处。① **清死号**:属主登记处已删或从未启用的号一律就地删号留事实、禁补号(文本实删约 1,557 处)。② **停发活号**:登记簿 `N-x`/`S-x`/`T-x`、专项(A 前缀 + 数字)、已删报告的 UI 簇(字母 U 紧跟一位数字,区间两端即该簇首尾两枚)共 20 个号转成语义短语(约 418 处)——登记簿表首格就是短语,旧号进 `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase`;已销项的死号**故意不进别名表**,让门禁继续咬残留引用。③ **本文瘦身**:619 行 → 229 行,删掉八原则长表、迁移映射表、模块码表与门禁细节(那些各有事实源:registry / 别名表 / `docs/门禁说明/id-check.md`),改成「先问三句再决定要不要发号」+ `docs/编号规范.md` §4.1 允许用号的族**穷举 = 8 个**。④ **门禁配套**:`check_ids.py` 加变更记录行豁免与第二根护栏 `undecidable_total_ceiling`(比值会被清号动作稀释,绝对数不会),债务台账还清到 0 条 → `--strict` 实为全量拦截,比例基线重打为 86.0%。**本表按用户 2026-10-26 的明确指示只保留最近一条**,更早沿革看 `git log` 与 `docs/门禁说明/id-check.md` §7.5(含其后的方案 B 一节);这是**本文档的例外**,不改变 `docs/编号规范.md` §5.5对其他文档「冻结历史不回改」的约束。 | +| 2026-10-27 | **停发机械化落地:34 个 `TC-HOST-*` 子族游标冻结,原编号规范 §8 校验 5 开始咬新配的 TC 号** | 上一笔把缺口登记为「停发今天只有规范效力」并写明机械化怎么做;本笔照它落地、把话兑现:`scripts/archive/id_gate/id_registry.json` 37 个 TC 类族全部 `frozen: true`,34 个子族的 `cursor` 冻结在裁定日存量最高号(字符串形态——整型比较静默不生效;5 个低于存量的已抬:`TC-PROTELEM-013→015`、`TC-SYSLOG-108→137`、`TC-ADCHEALTH-011→023`、`TC-ADCCAL-017→023`、`TC-I104SRV-041→053`),理由记在顶层 `tc_freeze_2026_10_27`。探针(Checker `_check_frozen`):在 `TC-PROTSET-` 段存量最高号之上再加一号 → 命中 1 条校验 5,写存量最高号本身 → 零误伤;`check_ids.py --only 5` = 0 处;plain 与 `--strict` 的错误级 findings 与本笔前逐条相同(**12 条 `TC-TIMESYNC-0xx` 悬空引用属另一道在飞的 time_sync 改动,不在本笔写域,也没替它改**);台账 0 条、可判定 87.67%、不可判定 979 / 上限 1,166,不动 §8.1。**没有把主族 `TC` 说成已冻结**:它 `cursor` 仍为 `null`,原编号规范 §4.1 框内第三条与 §9.1 末段把这块空白及其兜底(校验 3 + 冻结水位 564/474/79 只减不增 + 评审)写明,并规定「给这些模块补号即使在文档里补了定义行也算违令」。§9.1 末段由「效力边界」改写为「机器口径已落地」,当日实测留作历史不抹。零代码、零编号增删。 | +| 2026-10-27 | **停发口径收口:`TC-*` 从『允许继续发号』表整行移出,并登记「机器面还没冻结」这个缺口** | 裁定上一笔已入档,但效力写在了会被扫表读过的地方:`TC-*` 仍占着「允许继续发号」表第一行、用途列还写着「要进 C 断言标签」,那句"注意它已停发"只是表前的脚注;而那张表连表头行都在早先瘦身时丢了(GFM 里表格不能紧跟段落,整张塌成正文)。本笔:① 移出该行、补回表头与空行,『允许继续发号』写成**恰好 7 行**;② 表下加防误读框,把「不做了」的两条误读各钉一次——「维持原状所以还能发」与「停发所以顺手清掉/复用号」,并写明唯一重启入口 = 先裁定再回本节改表;③ 实测登记效力边界:registry 37 个 TC 类族仍有 35 个 `frozen: false` 带活游标,原编号规范 §8 第 5 项碰不到它们(且 `cursor` 为空时该校验直接跳过),所以停发今天只有规范效力,机械化单独开卡走 §7.3;④ 原编号规范 §5.1 补「不在 7 行内第 ① 步就走不通」、§9.1 两条硬口径扩成三条(新增「停发 ≠ 待清」)并补效力边界段、§9.2 计数 8 → 7。同步:`AGENTS.md` 索引行、`docs/测试说明/流程与规范/测试文档模板规范.md` §6.3、`docs/门禁说明/host-unit-tests.md` §7 号段行(那里原文写着「新增用例要带号」,是最直接的误读源头)。零代码、零编号增删。 | +| 2026-10-27 | **批次三裁定「不做」:`TC-*` 保留现状但即日停发** | 用户原话「批次三,不坐」(即不做)。裁定写进 §9.1 批次三(含理由与两条硬口径)、原编号规范 §4.1『已停发』栏加一行、§9 结果表同步。停发的硬口径:游标冻结、现存号只减不增、**新用例一律用语义化测试函数名 + 文档表格行名,不再配 `TC-` 号**;真要清则先让追溯器同时认新旧两种形态、核对通过后单独开卡,不许先改文档再改代码(会造悬空号)。留着的判据依据:`TC-*` 是 原编号规范 §4.1 那条判据(有脚本按字面量匹配)唯一真满足的族,字母号的痛在「人读」侧,解法是不再造给人读的号,而不是拆掉机器面的把手。 | +| 2026-10-27 | **语义标识定为唯一默认形态;编号收窄为「机器按字面量匹配」的例外,并首次给出现量清点与三批计划** | 用户原话:「不要用字母加数字的编号,简直太难以理解了,语义标识是最好的」。本笔:① 标题下的一句话从「允许用号的族只有 8 个」改成「语义标识是唯一默认、编号是例外」,并把 原编号规范 §4.1 拆成『允许继续发号』8 族与『已停发、存量待清』4 族(`N-*` / `TM-*` / 台架阶段裸形 / `F-*`)——原表自称穷举,实际漏登记了这三类在用族,属真缺陷。② 新增 §9 存量清点(用门禁自身接口实测:26 族仍有引用、565 个字面量、1,108 个引用站点)与三批计划:批次一 62 站点不碰门禁即可清、批次二保护功能号 184 站点转功能名、批次三 `TC-*` 561 站点需先换追溯机制(等用户裁定)。③ §8.1 基线按 2026-10-27 复测重打:784 文件 / 7,828 字面量、护栏 2 实跑 1,161 / 上限 1,166。 | +| 2026-10-26 | **编号治理收口:清死号 → 停发活号 → 本文重写为短版(用户三次裁定)** | 全仓字母+数字编号 10,956 → 8,230 处。① **清死号**:属主登记处已删或从未启用的号一律就地删号留事实、禁补号(文本实删约 1,557 处)。② **停发活号**:登记簿 `N-x`/`S-x`/`T-x`、专项(A 前缀 + 数字)、已删报告的 UI 簇(字母 U 紧跟一位数字,区间两端即该簇首尾两枚)共 20 个号转成语义短语(约 418 处)——登记簿表首格就是短语,旧号进 `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase`;已销项的死号**故意不进别名表**,让门禁继续咬残留引用。③ **本文瘦身**:619 行 → 229 行,删掉八原则长表、迁移映射表、模块码表与门禁细节(那些各有事实源:registry / 别名表 / `docs/门禁说明/id-check.md`),改成「先问三句再决定要不要发号」+ 原编号规范 §4.1 允许用号的族**穷举 = 8 个**。④ **门禁配套**:`check_ids.py` 加变更记录行豁免与第二根护栏 `undecidable_total_ceiling`(比值会被清号动作稀释,绝对数不会),债务台账还清到 0 条 → `--strict` 实为全量拦截,比例基线重打为 86.0%。**本表按用户 2026-10-26 的明确指示只保留最近一条**,更早沿革看 `git log` 与 `docs/门禁说明/id-check.md` §7.5(含其后的方案 B 一节);这是**本文档的例外**,不改变 原编号规范 §5.5对其他文档「冻结历史不回改」的约束。 | diff --git a/scripts/check_bsp_err.py b/scripts/check_bsp_err.py index 515bc682..47e5ec49 100644 --- a/scripts/check_bsp_err.py +++ b/scripts/check_bsp_err.py @@ -25,7 +25,7 @@ 术语迁移(2026-10-23):这四项原先叫 R1/R2/R3/R4,已整体改名。原因是 R1~R8 在本仓是"专项 风险"的裸形编号(scripts/id_registry.json 已登记那一族,保护规划与看门狗的风险表都在用)、 带连字符的那一族又是审查报告的可靠性 / 内存优化项编号——**同一个裸形四种意思**,而编号门禁 -因为 docs/编号规范.md §4.3 的同号不同义白名单不会报, +因为当年编号规范里「同号不同义」的白名单不会报(该规范已删除,现行规则 → docs/文档规范.md §7.1), 等于机器放行、人看不懂。旧名到新名对照:R1=err-type、R2=timeout-name、R3=return-doc、 R4=consume-result;已提交的文档与变更记录里出现的老名按"冻结历史不回改"处理,以本对照为准。 diff --git a/scripts/check_test_traceability.py b/scripts/check_test_traceability.py index e7afc3b2..90c69701 100644 --- a/scripts/check_test_traceability.py +++ b/scripts/check_test_traceability.py @@ -21,7 +21,8 @@ 作用域**只取 `*_Test_Guide.md`**:TC-CFG / TC-CLK / TC-WD 属主机侧单元 测试文档(`配置文件单元测试说明.md` 等),不参与板级追溯,天然被排除。 - **2026-10-21 B 层口径对齐**(docs/编号规范.md §8.1「口径修正记录」):主机侧单测的 + **2026-10-21 B 层口径对齐**(当时编号规范 §8.1「口径修正记录」;那篇已删除, + 现行规则 → `docs/文档规范.md` §7.1):主机侧单测的 号改认 `test/host/<模块>/*` 为属主登记处(实测这些号在代码目录外零消费者), 于是"文档没有"不再一律算断链。真差异收敛为三条: ① 文档声明了、代码没有 → DOC-ONLY; @@ -30,7 +31,7 @@ 小写子项后缀(`TC-<模块码>-003b` 这类小写尾号)按母号算(`subitem_ok`),与编号门禁同口径。 **批 6 再分两档**:硬件层人工用例(标题/章节含「(硬件层)」)记为 `BENCH`、文档已标未实现/待补/暂缓/已取消的记为 `NOTIMPL`,两者**单列示数**不进差异——但也不是「已覆盖」,只是「不该在这里期望代码」。 **2026-10-21 第二次口径修正(批 5)**:变更记录行与 `[示例]`/`[计划]` 行**不参与比对** - (冻结历史按编号规范 §8.1 不回改,旧号靠 `id_aliases.json` 解析;这条豁免另三支脚本早有,本脚本是最后缺它的一个,`DOC-ONLY` 因此 38 → 29、交集不变);被豁免的号存进 `frozen_ids`,`--verbose` 全量列出——**豁免不等于已对应**,别拿它当收敛。 + (冻结历史按当时的编号规范 §8.1 不回改,旧号靠 `id_aliases.json` 解析;这条豁免另三支脚本早有,本脚本是最后缺它的一个,`DOC-ONLY` 因此 38 → 29、交集不变);被豁免的号存进 `frozen_ids`,`--verbose` 全量列出——**豁免不等于已对应**,别拿它当收敛。 退出码: 0 = 无差异;或有差异但**默认仅告警**(与 doc-links 演进路径一致) @@ -63,7 +64,7 @@ CODE_DIR = REPO_ROOT / "test" / "board" DOC_DIR = REPO_ROOT / "docs" / "测试说明" # TC 编号:TC--。 允许字母数字(NET/GD5F/STO/RTC…)。 -# 2026-10-20 收编进 id-check 门禁时补的三条(docs/编号规范.md §8「顺带收编」): +# 2026-10-20 收编进 id-check 门禁时补的三条(该规范 §8「顺带收编」,规范已删除): # ① 规范 §4.1 的合规形态 `TC-[A-Z]{1,4}-\d{3,4}[a-z]?`(带小写后缀,TC-NET-1502b); # ② 现存的大写后缀形态(TC-AI-01A [示例],§7.1 待统一小写)也要能抓出来,否则整条漏扫; # ③ 无模块码形态(iec104 文档里缺模块码的那批用例号,§7.2 列为孤儿)纳入比对而不是静默忽略。 @@ -218,7 +219,7 @@ def main(): # --verbose 有明细):BENCH = 人工台架定义,NOTIMPL = 已显式登记未实现 doc_ids -= bench_ids | notimpl_ids doc_bases = {_base(i) for i in doc_ids} - # 真差异定义(B 层口径 2026-10-21,docs/编号规范.md §8.1): + # 真差异定义(B 层口径 2026-10-21,当时的编号规范 §8.1): # ① 文档声明了、代码里没有 → 未实现/未标注(保留,这是硬断链); # ② 代码有、文档没有,**且**母号也不在文档、**且**号旁边没写意图 → 真未登记; # ③ 代码有、文档没有,但靠"代码即登记处"过关(旁边有意图)→ 单列统计, diff --git a/scripts/rename_ids.py b/scripts/rename_ids.py index 21a150d5..3350e67d 100644 --- a/scripts/rename_ids.py +++ b/scripts/rename_ids.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -"""编号批量改名器(docs/编号规范.md §7.3 规划的 scripts/rename_ids.py)。 +"""编号批量改名器(原编号规范 §7.3 规划的 scripts/rename_ids.py;现行规则 → docs/文档规范.md §7.1)。 为什么必须有这个工具,而不是查找替换: 1. 编号是**跨文件**引用的——一次改名同时涉及属主登记处、引用方文档、代码注释、 diff --git a/scripts/rename_maps/batch1.json b/scripts/rename_maps/batch1.json index 1d2c378d..1892f851 100644 --- a/scripts/rename_maps/batch1.json +++ b/scripts/rename_maps/batch1.json @@ -2,7 +2,7 @@ "schema": 1, "batch": "批 1(2026-10-20 已 --apply)", "applied_by": "scripts/rename_ids.py", - "record": "docs/编号规范.md §8.3", + "record": "当时的编号规范 §8.3", "note": "映射表即审计轨迹:谁改的、改了什么、作用域多大,全部可复演", "batches": [ { @@ -13,7 +13,7 @@ "scripts/check_coding_standard.py", "docs/代码规范/pre-commit使用说明.md" ], - "note": "批 1:代码规范条款号单词化(S1~S19 → CODE-RULE-nn)。原裸形 S 号与登记簿 S-x、UI 像素状态 S0~S7、2026-10-02 复审专项条目 S-x 四义撞形(docs/编号规范.md §1.2)" + "note": "批 1:代码规范条款号单词化(S1~S19 → CODE-RULE-nn)。原裸形 S 号与登记簿 S-x、UI 像素状态 S0~S7、2026-10-02 复审专项条目 S-x 四义撞形(当时的编号规范 §1.2)" }, { "family": "MENU-STATE", diff --git a/scripts/rename_maps/batch2.json b/scripts/rename_maps/batch2.json index 94bbfbee..41f3c7a5 100644 --- a/scripts/rename_maps/batch2.json +++ b/scripts/rename_maps/batch2.json @@ -2,7 +2,7 @@ "schema": 1, "batch": "批 2(模块码单词化,16 个有歧义的码)", "applied_by": "scripts/rename_ids.py", - "record": "docs/编号规范.md §6 模块码表 + §8.3 迁移批次记录", + "record": "当时的编号规范 §6 模块码表 + §8.3 迁移批次记录", "note": "字面量已完全限定(TC-<旧码>-),故别名全局生效;裸形族才需要 scope", "batches": [ {"family": "TC-ADCIN", "old": "\\bTC-AI-(?P[0-9]{1,4}[a-zA-Z]?)\\b", "new": "TC-ADCIN-{n}", "global_alias": true, "files": ["*", "*/*", "*/*/*", "*/*/*/*", "*/*/*/*/*", "*/*/*/*/*/*"], "note": "批 2:模块码 AI → ADCIN(App/algo/adc_input;与 AH 只差一个字母)"}, diff --git a/scripts/rename_maps/batch3-trap.json b/scripts/rename_maps/batch3-trap.json index 2b5488ff..690910e4 100644 --- a/scripts/rename_maps/batch3-trap.json +++ b/scripts/rename_maps/batch3-trap.json @@ -2,7 +2,7 @@ "schema": 1, "batch": "批 3-Trap(2026-10-21)", "applied_by": "scripts/rename_ids.py", - "record": "docs/编号规范.md §8.3 / §7.1", + "record": "当时的编号规范 §8.3 / §7.1", "note": "陷阱号统一为 TRAP-<模块码>-:数字不变、只补模块码(§7.1)。作用域按文件切分,因为同一空格形在不同文件里指向不同族的属主文档——GD5F 的属主是 GD5F2GQ5UE_Trap_Records.md,README.txt/scripts/README.md 里的 Trap 21/19 指向 CH395F_Trap_Records.md(NET 域),SD2506 的中文形按 §4.2 归 RTC 域。刻意不改:docs/环境与部署/并行任务工作树方案.md:39 的 wip/trap22-fix 是分支名不是编号;docs/UI设计/菜单页面设计.md:501 的「§8.2 陷阱 1」是本文小节内第 1 条(另走平实语言改写);:896 是变更记录行(§8.1 冻结不改写)。", "batches": [ { diff --git a/scripts/rename_maps/batch6-net-annotate.json b/scripts/rename_maps/batch6-net-annotate.json index 205bb697..07e9bd89 100644 --- a/scripts/rename_maps/batch6-net-annotate.json +++ b/scripts/rename_maps/batch6-net-annotate.json @@ -2,7 +2,7 @@ "schema": 1, "batch": "批 6(2026-10-21 板级 NET 用例号标注)", "applied_by": "scripts/rename_ids.py", - "record": "docs/编号规范.md §8.3", + "record": "当时的编号规范 §8.3", "note": "追溯器分档后暴露的真问题:板级 NET 用例的**实现体里标的是裸形**(TC204 / TC-201 / TC1501 / TC1502b…),文档侧写的是合规号 TC-NET-204 等 → 双向追溯对不上,看上去像「文档声明了没实现」,实际是**标注形态烂**。本批只补模块码、序号一位不改(§7.1),作用域限定 5 个真载体文件;改完 @build 验证(改到 test/board 与 Drivers/BSP/CH395F 注释)。刻意不含别的模块(host 侧 TC-00x 那批属另一个模块,另批处理)。", "batches": [ { diff --git a/scripts/rename_maps/batch7-f-net-semantic.json b/scripts/rename_maps/batch7-f-net-semantic.json index 4fd6d918..28b62a37 100644 --- a/scripts/rename_maps/batch7-f-net-semantic.json +++ b/scripts/rename_maps/batch7-f-net-semantic.json @@ -2,7 +2,7 @@ "schema": 1, "batch": "批次一 F-* 收口(2026-10-27):网络设计条目号转语义短语", "applied_by": "scripts/rename_ids.py", - "record": "docs/编号规范.md §9.1(F-* 行)", + "record": "当时的编号规范 §9.1(F-* 行)", "note": "§7 表保留 12 条编号仅作历史对照;正文/代码注释改用「§7 + 条目名」。作用域刻意只列 2 个文件,不写 glob:docs/硬件平台/ 的 T1/T2/T3 位号与 docs/芯片手册/ 的时序记号同属裸形高发区,而各文档 Mermaid 图里有单字母节点名(F/EV/LN…),故 old 一律带上下文、限定完整三段形态。变更记录行(BSD_Socket_API_使用指南.md:1488)由 SKIP_LINE 豁免、不改写(§8.1 历史快照)。", "batches": [ { diff --git a/scripts/rename_maps/batch8-s-review-dead.json b/scripts/rename_maps/batch8-s-review-dead.json index be950be0..834fb5d5 100644 --- a/scripts/rename_maps/batch8-s-review-dead.json +++ b/scripts/rename_maps/batch8-s-review-dead.json @@ -2,7 +2,7 @@ "schema": 1, "batch": "批次四(2026-10-27 实测清点):复审残号 S-REVIEW + 两条无主死号的残留引用收口(删号留事实)", "applied_by": "scripts/rename_ids.py --no-alias", - "record": "docs/编号规范.md §4.1.1(复审残号 S1~S14 / E-xx → 写条目本身)、§4.5、§7.3", + "record": "当时的编号规范 §4.1.1(复审残号 S1~S14 / E-xx → 写条目本身)、§4.5、§7.3", "note": "只清「号当标识用」的标注与待办用法;别名表**故意不写**:这些裸形(S1/S4/S5/S7/S9/S11)在 .c/.h 注释、.pre-commit-config.yaml 与在飞的 docs/测试说明/流程与规范/自动化测试流程.md 里还有活引用,写进别名表等于把那些残留一起洗成「已解析」(§4.1.1:部分死号故意不进别名表,好让门禁继续咬残留引用)。刻意不碰:① 属主登记处 docs/任务规划/测试与架构专项.md(§2.1 S12 定义行 + 首行指针;删行销项属 Ask-first);② 变更记录行与「原复审项 S4,已闭环」这类显式历史标注;③ 任何 .c/.h(改注释也要重跑 @build,本批零代码);④ 工作区里别人在飞的脏文件;⑤ 实机测试实施指南.md:5「(S7、A1~A4)」——A1~A4 与本文 A 表(前置检查 A2~A6)同形、语义待属主确认,按 §7.3 第 3 条不猜。", "batches": [ { diff --git a/test/host/time_sync/time_sync_test.c b/test/host/time_sync/time_sync_test.c index 4c34376e..d82c63db 100644 --- a/test/host/time_sync/time_sync_test.c +++ b/test/host/time_sync/time_sync_test.c @@ -19,7 +19,7 @@ * 仍是本模块——第 8b 轮消抖、2026-10-02 屏障喂心跳两条台架教训都钉在 * 这里)与"循环按代次驱动 SNTP"。 * - * 断言口径(用户裁定 2026-10-27,编号规范 §9):新用例一律**语义行名**, + * 断言口径(用户裁定 2026-10-27,判据见 docs/文档规范.md 7.1 节):新用例一律**语义行名**, * 不再配 TC 号;旧 TC-TIMESYNC-* 号随用例退役永久作废、不得复用。 * * 通过:全部断言 PASS(main 返回 0)。