Files
STM32F4-Base/scripts/archive/id_gate/编号治理历史.md
T
wandering1 842d711ed6 refactor(编号): 测试验证层级去号——CI job / 门禁输出 / 命令行旗标换语义名 + ASCII 段名
用户裁定「我不想看到编号」。测试验证层级这一族的整族清退分三道并行:本笔是**代码与 CI 道**
(CI 步骤与门禁输出面),代码注释面另走、文档面由文档道走。

口径(旧 → 语义名 → ASCII 段名,段名只进日志/旗标/job id/文件名):
  L0 静态门禁 static | L0a 钩子解释器预检 preflight | L0b 提交信息门禁 commitmsg
  L0c 体积门禁 size | L0.5 主机侧纯逻辑单测 host-unit | L0.5c 覆盖率 coverage

- scripts/ci_local.py 43 站点:段标题与 [SUMMARY] 标签改 ASCII 段名(static: /
  host-unit:),函数 run_l0/run_l05 → run_static_gates/run_host_unit_tests,
  收尾「已跑:」列表用段名。旗标改 --static-only / --host-unit-only,**旧旗标
  --l0-only / --l05-only 保留为 argparse 别名**(肌肉记忆与既有脚本片段不断档,
  实测 --help 两名列出)。
- .gitea/workflows/ci.yml 42 站点:job id l0-gates → static-gates、
  l05-host-unit-tests → host-unit-tests;步骤名与 step-summary 标题改语义名;
  日志名 l0-pre-commit.log → static-pre-commit.log、l05-<模块>.log →
  host-unit-<模块>.log;::error::/::notice:: 文案同步。yaml.safe_load 核过
  两个 job id 与步骤名。
  host-unit-tests;步骤名与 step-summary 标题改语义名;日志名 l0-pre-commit.log →
  static-pre-commit.log、l05-<模块>.log → host-unit-<模块>.log;::error::/::notice::
  文案同步。yaml.safe_load 核过两个 job id 与步骤名。
- 门禁脚本 18 站点:check_registration(登记簿理由串 7)、check_test_coverage 5、
  README 8、check_generated_fresh 2、ram_baseline 2、check_size_gate 1、
  ci_find_python.ps1 2、ci_runner_bootstrap.ps1 2、.pre-commit-config.yaml 2、
  requirements.txt 1(保持纯 ASCII)。
- skills 7 站点:task-worktree(含 [SUMMARY] 样例两行)、mem-budget、ui-verify、
  task_worktree.py 的实跑标签。
- AGENTS.md 3 站点:CI 段「只跑静态门禁 + 主机侧纯逻辑单测」、自查命令段、
  「2026-10-11 静态门禁全灭」事件名。
- 归档:编号治理历史.md 新增 §10 换算表 + **撞族警示**(同形 L0/L1/L2/L3 还属 UI 设计
  令牌层 / UI 菜单层级 / 采集链 / 链路时延段 / CubeMX 三层 / 硬件位号与 FTP 应答字面量
  等六个族,其中 6 处在字符串字面量里,改了就是改行为——故全程只按行内置换、先判族)。
- docs/产品需求 §7.4 测试分层表:去号 + 顺带修掉上一批**错族替换疤**(该表 L1/L2 行曾被
  采集链层名「语义取数与有效性 / 全周傅氏相量」「保护判据」顶替,现按内容改写为板端测试
  套件 / 主机侧回归两行)。同文档 §1.5 G5 判据行同步。

门禁:ci_local --help 两面旗标并列;py_compile 7 个 .py 全过;yaml 解析通过;
check_ids_new --worktree rc=0;git diff --check 干净;17 个改动文件 FFFD=0、无 CR、
BOM 与原文件一致(含 requirements.txt 纯 ASCII)。本族无机器识别面(单字母+数字是
新增行门禁的自述盲区),口径来自自建逐行扫描器,复扫本族形态归零。
- 交接说明:文档道 teammate 在改 CI 指南时中断,剩余 9 处双写疤与 29 处 CI 标识
  (job id / 日志名 / 汇总行字面量)由 Lead 接手改完,逐处仍走断言式行内置换。
2026-10-28 17:46:52 +08:00

335 lines
44 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 编号治理历史(2026-10-28 归档)
> 这是 `docs/编号规范.md` 在瘦身前(36 节 / 58 KB)的**过程记录**部分,逐字搬迁、未改写。
> **不是现行口径**:现在的做法只看 `docs/编号规范.md`(约 120 行);
> 门禁也已换代(全库语料审计 → 只查新增行),见 `docs/门禁说明/id-check-new.md`。
> 留它的唯一理由:批次清点、换算表、改号规程这些东西,将来要复查时还找得到原文。
## 归档目录
- `§1` 这四类事故就是上面三条的由来
- `§2` 八条设计原则(一句话版)
- `§4` 目标前缀(作废)
- `§4` 已删报告的自有族
- `§6` 模块码表
- `§7` 改号与迁移
- `§7` 映射规则(作废)
- `§7` 孤儿编号处置(已完成)
- `§7` 改号操作规程(要动号就照这个走,一步都别省)
- `§8` 当前基线(2026-10-26 编号迁移批次后重打)
- `§8` 改号与清号批次(只留要点)
- `§8` 台账与 `--strict`
- `§9` 还剩什么:存量清点与批次(2026-10-27 实测)
- `§9` 三批计划(按「值不值得动门禁」排序)
- `§9` 别再做什么
- `§9` 批次五换算表:「数据可信」任务卡号(2026-10-27 整族清退)
- `§10` 批次六换算表:测试验证层级号(2026-10-28 整族清退)
---
### 1.2 这四类事故就是上面三条的由来
1. **同一字母多义**:`P1` 五义、`L1` 四义、`U1` 四义、`D7` 与元器件位号同形 → 前缀必须按**事物类别**
分配(§2)。
2. **属主文档一删,号全体成孤儿**:审计报告删除后,全仓几百处引用再也查不到定义 → 号越少,这种
"集体失效"的爆炸半径越小(§4.5)。
3. **语义塞进号里**:条目事后降级,改号则引用全断、不改则号实不符 → 号不承载语义(P-2)。
4. **销项号被复用**:登记簿删行后仓库里毫无痕迹,下一个条目顺手取走同号 → 不回收、不复用,
改用**语义标识**(短语自带唯一性)。
---
## 2. 八条设计原则(一句话版)
**P-8 语义优先**压过其余七条:**给人看的条目一律不发号**。其余七条只在"确实要发号"时生效——
P-1 前缀 = 事物类别(不是来源文档 / 审计轮次)· P-2 号不承载语义 · P-3 一个事实一个号 ·
P-4 规范形态唯一(连字符与补零不承载语义,写法只许一种)· P-5 只增不复用,新增先取游标 ·
P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语义、**引用必语义**。
---
### 4.2 目标前缀(作废)
2026-10-26 删除:那批"改名后才启用"的前缀族从未有属主登记处,留着只会把读者带到一张不存在的登记表前。
### 4.5 已删报告的自有族
《项目审查与优化建议报告》2026-10-25 已删除,它自造的六族随之失去定义,且与登记簿同字母不同义。
看到「报告 + 登记簿旧号」这类写法一律按死号处理:删号留事实——各条目原本指向的设计文档就是现在的出处。
---
## 6. 模块码表
`TC` 与 `TRAP` 共用模块码。唯一事实源是 `scripts/archive/id_gate/id_registry.json` 的族 pattern 与属主文档标题行;
**本文故意不再抄一份**——抄一份就多一处会过期的地方(历史上这张表就长期与代码不同步)。
要加模块码:先改 registry,再在属主文档出现,最后才在别处引用。
## 7. 改号与迁移
### 7.1 映射规则(作废)
"按审计报告把某族整体迁到另一族"那套映射已作废。2026-10-26 的实测结论是:**绝大多数号该删不该迁**。
### 7.2 孤儿编号处置(已完成)
代码有号、文档无号那批已按同一口径处理完:能对上属主表的补模块码,对不上的删号留事实;
**绝不为了少报孤儿而凭空补定义行**(那等于把账做平、把问题藏起来)。
### 7.3 改号操作规程(要动号就照这个走,一步都别省)
1. 走 `scripts/rename_ids.py`:映射表驱动、**显式 scope**、默认干跑、自动写别名条目;
**绝不全局查找替换**——同一裸形字面量可能同属多个族(实测 `S3` 三义),全局替换等于造新撞号。
2. 改完复核**所有识别面**:`check_ids.py` 与 `check_test_traceability.py` 的候选正则上界都要还能匹配新
形态;判据是"编号字面量总数有没有真的变小"(曾经因为正则上界太窄,改完号静默隐形 339 个)。
3. **逐号做语义复核**,不能只看 dry-run 命中数:最阴的失效是"字面改对、意思改错"。
4. 登记表 / 映射表类文件**不得当引用语料**,否则自家审计表里的旧形态会被判成新账。
5. 收尾重打台账 `--prune-backlog`(只减不增),并确认新错误级为 0。
---
### 8.1 当前基线(2026-10-26 编号迁移批次后重打)
| 项 | 数值 |
|---|---|
| 扫描文件 / 编号字面量 | 784 个 / **7,828 处**(2026-10-27 复测;两批清理前 10,956 → 8,230,此后新代码与新文档回涨 553 处,其中测试用例族占大头,见 §9.1) |
| **护栏 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(陷阱条目这类本就允许无人引用) |
> ⚠ **读这些数字的口径**:跨批次**不可直接相减**。方案 B 把"本可判定的引用"换成散文,分子分母同缩,
> 比例反而从 86.7% 掉到 85.98%,而**不可判定绝对数一处没涨**——护栏 2 就是这么来的。
> **2026-10-28 起两根护栏都只报告、不拦提交**(用户裁定:语料维护的成本已经高过它买到的一致性——
> 近 80 笔提交里 61 笔被编号体系牵连)。数字照样打,但不再决定一笔提交能不能过;
> 硬拦的只剩校验 1~6 的台账外新账。判断"编号有没有变坏"仍看绝对数与字面量总数。退役路线见 `docs/编号规范.md` §8.5。
### 8.3 改号与清号批次(只留要点)
2026-10-21 五批统一改名(陷阱号归范、主机侧单测认代码为属主登记处、追溯器三档口径对齐);
2026-10-26 两批清号(A:删死号约 1,557 处文本实删;B:登记簿系 20 个号转语义短语约 418 处)。
逐批动机与影响只在 git log 与 `scripts/rename_maps/`,**本文不维护流水账**。要记住的只有两条教训:
门禁曾经把"政策上禁止回改的变更记录行"当活账拦提交;也曾经用比值当唯一护栏而**惩罚清号动作本身**
——两处都在 2026-10-26 修掉了,别再往回改。
### 8.4 台账与 `--strict`
错误级问题按「文件 + 校验项 + 字面量 + 次数」记指纹进 `scripts/archive/id_gate/id_known_backlog.json`,`--strict` 只拦
**台账之外**的新账,台账只减不增。本批台账已还清到 **0 条**——从现在起任何一条新错误级问题都会当场
拦提交,**别指望还有豁免面**可钻。
## 9. 还剩什么:存量清点与批次(2026-10-27 实测)
**批次一与批次二已于 2026-10-27 执行完毕**,下表保留的是**动手前的清点基线**(用来解释为什么这么分批),
不是当前存量。当前状态:
| 批次 | 范围 | 结果 |
|---|---|---|
| 一 | 登记簿旧号 / 阶段号 / 台架阶段裸形 / 网络条目号 | 活文档清零;顺带清 3 处裸形;位号目录整目录排除 |
| 二 | 保护功能号 28 个 | 代码与测试 215 处 + 文档 194 处 + 配置注释 3 处 + 入口文档 2 处;活文档只剩
**冻结的变更记录行 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`(不进语料的口径台账),正文只留结论:剩余命中面另含讲编号的文档里的形态自述,本笔自身两行正文带来个位数增量、远低于护栏上限,两根本基线**均未下调**、零编号增删 |
编号字面量 **8,787 → 7,828**;不可判定绝对数 **1,161 → 982**(上限 1,166,余量从 5 格宽到 184 格)。
比值 86.79% → 87.46% 属**纯稀释**(删的都是可判定引用,分子分母同缩),**基线不下调**,见本节末裁定。
先回答「还有多少号可以清」。下面是**用门禁自己的接口跑出来的**存量(`check_ids.py` 的 Checker,按族统计
「活引用站点 / 不同字面量 / 涉及文件数」;只统计非冻结族、且排除属主登记处的定义位):
| 族 | 引用站点 | 字面量 | 文件 | 集中处 | 处置 |
|---|---:|---:|---:|---|---|
| `TC-*`(含各模块子族)〔动手前基线,非当前存量〕 | **561** | 472 | 77 | 测试用例与断言标签、`test/host/**` | **保留、即日停发**(用户裁定 2026-10-27,见 §9.1 批次三) |
| `L-PROT`(保护功能号) | **184** | 28 | 58 | 保护规划与各模块说明 | 批次二:转语义 |
| `TRAP-*` | **134** | 25 | 51 | 踩坑记录与驱动注释 | 保留(可检索锚点,用户已裁定) |
| `F-*`(网络设计条目) | **38** | 12 | 20 | 动手前 `ch395f.h`、`net_events.c`;**收口后代码侧 0 处** | 批次一:**已转语义**(§7 保留 12 条历史对照 + 新增「条目名」列) |
| `CODE-RULE-*` | **35** | 20 | 13 | 代码规范门禁 | 保留(门禁按号报错) |
| `MENU-STATE-*` | 少量 | — | — | 像素回归脚本 | 保留(脚本按它取状态行) |
| `T-TEST`(台架阶段裸形) | **19** | 4 | 12 | 串口/台架脚本与测试流程 | 批次一:转语义 |
| `N-*`(登记簿旧号残留) | **4** | 3 | 3 | 规范自身与两处脚本注释 | 批次一:清 |
| `TM-*` | **1** | 1 | 1 | 规范自身 | 批次一:清 |
合计:**26 个族仍有引用、565 个不同字面量、1,108 个引用站点**(其余 73 个登记族已零引用或冻结)。
**批次四复测(2026-10-27 14:1x 实测,工作区时点值,含别道在飞改动;口径 = 门禁 `Checker`,属主登记处定义位已排除)**:
| 处置 | 族 | 门禁 refs / 站点 / 字面量 / 文件 |
|---|---|---|
| **保留**(机器把手或用户裁定) | `TC-*` 类 39 个族 | 字面量 **497** / 文件 **81**(对 §9.1 冻结水位 497/81 **持平**,未涨) |
| 保留 | `TRAP-*` | 134 / 282 / 25 / 51 |
| 保留 | `CODE-RULE-*` | 35 / 51 / 20 / 13 |
| 保留 | `MENU-STATE-*` | 7 / 8 / 6 / 2 |
| **已清零**(仅剩「讲编号」的形态自述) | `N-*` `TM-*` | **0 / 0 / 0 / 0**(批次一后无残留) |
| 已清零 | `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 判据本就不是编号** |
合计:**44 个族仍有命中站点**,其中真编号活引用只剩上面「保留」四行;批次一/二涉及的四个族活引用均已归零。
**批次四做了三件事**(本轮指令:「把能清的族清掉一批」):
1. **关掉已清退族的发号口**:`L<n>-<nn>` 与 `F-<MOD>-<nn>` 从 `docs/编号规范.md` §4.1『允许继续发号』**整行移出**(7 行 → 5 行),在『已停发、存量待清』各补一行硬口径——留着那两行,扫表的人照样照着发号(同 `TC-*` 那次的教训)。**机器面已探针复核**:`_check_dangling` 对「L 段号形态的新号」与「F 条目号形态的新号」各写一个,全部命中 `docs/编号规范.md` §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 禁令 + 评审两道兜底,**别把「存量已清零」读成「机器已关闭」**。
> ⚠ 本轮执行期间另有一道并行改动落地:`docs/测试说明/boot_log_data/README.md`(登记簿旧号「启动日志固化流程」)与 `docs/测试说明/m2_data/README.md`(审计发现 E 族一处死号)已由该道改为语义短语——**本笔不重复改这两处、也不替它收口**;复测两处死号引用均为 0。
§8.1 的 7,828 是当日更早时点值;本轮 14:1x 复测 **791 文件 / 7,931 字面量 / 不可判定 982(上限 1,166,余量 184)/ 可判定 87.61%**——增量全部来自别道在飞的新代码与新文档,本笔净效果是**只减不增**。
### 9.1 三批计划(按「值不值得动门禁」排序)
**批次一 · 现在就能清(约 62 个站点 / 20 个字面量,不碰任何门禁)**:`N-*`、`TM-*`、`T-TEST`、`F-*`。
> `F-*` 已于 2026-10-27 收口:映射 `scripts/rename_maps/batch7-f-net-semantic.json`(10 条**带上下文**的定点改写),`docs/网络/网络自愈架构设计.md` §7 加「条目名」列作权威对照,13 个旧号进 `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase`。
> 作用域刻意只列 2 个文件、且 `old` 全部带上下文——同树里 `docs/硬件平台/` 的 **变压器位号(字母 T 紧跟数字)**(网表 ~4200 处 R/C/D/J/X/U/T 位号,本就不在门禁语料内)、`docs/芯片手册/` 的时序记号,以及各文档 Mermaid 图的**单字母节点名**(`F -->`、`EV`、`LN`…)都会被宽松正则顺伤;变更记录行(`BSD_Socket_API_使用指南.md` 的 `| 2026-10-13 |`)按 §8.1 豁免不改写。
这四族**没有任何脚本按字面量匹配**,纯人读,正是「语义标识最好」的适用面;台架阶段族还是裸形(字母 T 紧跟一位数字),
最容易与别的字母撞义。改法:号 → 短语(「台架阶段一」「网络自愈:监听生命周期」),残留引用同步清,
别名表标 `void`,台账 `--prune-backlog`。
**批次二 · 文档为主、量大(约 184 个站点 / 28 个字面量)**:`L-PROT` 保护功能号。它**曾有**明确价值
(功能复现规划逐条对齐),但用户已裁定字母号难认 ⇒ 改成功能名本身(「过流Ⅰ段」「零序过流」),
规划表首格写功能名、不再配号。要点:必须**按功能逐个改**,不能全局替换(同一号在不同文档指同一功能,
但句子结构不同);改完用追溯器复核代码侧没有残留号引用。
**批次三 · 用户裁定 2026-10-27「不做」:`TC-*`(561 个站点 / 472 个字面量 / 77 个文件)保留现状**。
裁定记录(原话:「**批次三,不坐**」,即批次三不做)。留着的理由与今天的定调并不矛盾,而是它的前提:
`TC-*` 是本规范 `docs/编号规范.md` §4.1 那条判据**唯一真正满足它的族**——`check_test_traceability.py` 与 40 套 `run_unit_test.py`
**按字面量读它**,C 断言标签、测试函数名、文档用例表三处同一号,是「代码 ↔ 文档」双向核对的机器把手。
清它的代价不是改文本,而是**换掉追溯机制**:候选方案「用例名即标识」(`test_xxx_yyy()` ↔ 文档表格行名,
脚本按名字比对)要把追溯门禁重写并重打基线,收益是字母号一次少掉一半以上,代价是**期间测试与文档的
对应关系处于断裂态**——本仓测试是提交门禁(`test-coverage` 跑全部 40 套并守覆盖率基线回退),拿它做
不可逆试验不值。**结论:机器面自解释的族可以保留;字母号的痛在「人读」侧,解法是别再造给人读的号,
而不是把机器面的把手也拆掉。**
「不做」之后跟着三条硬口径(否则裁定会被当成默许继续扩族):
① **本族即日停发**:现存号只减不增,**新用例一律用语义化测试函数名 + 文档表格行名,不再配 `TC-` 号**
(机器口径已同批落地:见本节末「机器口径已落地」与 `docs/编号规范.md` §4.1 框内第三条);
同一笔把 `TC-*` 从 `docs/编号规范.md` §4.1『允许继续发号』表里**整行移出**(只在『已停发』栏留一行)——留在那张表里,
脚注写得再重,扫表的人照样照着发号;
② **停发 ≠ 待清**:现存号与 registry 登记一律保留、不清、不复用(机器追溯把手 + `docs/编号规范.md` §1「不回收、不复用」);
引用既有用例仍可用旧号,新用例不配新号;
③ 若将来真要清,按 `scripts/rename_ids.py` + §7.3 五步**单独开卡**,前提是先让追溯器同时认两种形态
(新旧并行核对通过,再谈切换),**不许先改文档再改代码**(会凭空造出悬空号,`docs/编号规范.md` §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 类族按门禁 refs 口径(字面量 × 文件去重,属主登记处与本文写法示例不计)——
动手前基线 **561 站点 / 472 个字面量 / 77 个文件**;本笔落地时工作区实测 **590 / 497 / 81**(站点 / 字面量 / 文件)。
**差出来的 29 站点全部是裁定之后仍在配号的在飞改动**(`time_sync` 一道的 `TC-TIMESYNC-` 新号),这正是水位
必须落到纸面的理由:**从本笔起任何一次上涨都要问「这号是谁在停发之后发的」**。重测:跑 `check_ids` 的 Checker,
取 `ck.refs`(注意它是**属性**不是方法),把字面量按 `class == "TC"` 各族 `pattern` 归族后聚合。
⚠ 上面两个数都是**工作区时点值**(本笔 = 2026-10-27 12:40,含别人在飞的改动)——提交收口时按当时工作区**重打一次**,
别把这个数当长期基线;**也不要为了把数字压回 561 去改别道在飞的文件**。
**门禁侧复核**:`check_ids.py --only 5` 校验 5 = 0 处(冻结没有误伤存量);plain 与 `--strict` 的错误级 findings
与本笔之前逐条相同;`id_known_backlog.json` 台账 0 条;可判定比例 87.67%(基线 86.0%)、不可判定绝对数 979(上限
1,166)。本笔零语料增删,**不动 §8.1 两根护栏基线**(§8.1 的 7,828 处字面量会随在飞改动漂移,那属各自批次的收口)。
**还剩下的那一面(别把「机器已冻结」读成全族无死角)**:主族 `TC` 的 `cursor` 仍为 `null`——一个游标表达不了每个
模块码的水位,写全族最高号反而放行低号,所以按空白登记;这一面由校验 3(新号无定义位 = 悬空,错误级)、上面的
冻结水位、以及评审三条兜住。**「反正门禁主族咬不到我」不是发号许可。** 要把这面也机械化(按模块码克隆子族,或给
族级加字面量上限),与「真要清退」一样属追溯机制改造,按 §7.3 单独开卡。
### 9.2 别再做什么
「编号说明」这件事本身应该继续变薄:每多一个族,就多一处需要有人记得它的地方;每多发一个号,就多一个
将来没人敢删的字符串。要新增族之前,请把 `docs/编号规范.md` §4.1 的「允许继续发号」那 5 行当作反对你的第一手证据。
### 9.3 批次五换算表:「数据可信」任务卡号(2026-10-27 整族清退)
用户指令(2026-10-27):「**数据可信.md 已经完成的内容请进行销项删除,去除相关编号**」。两件事同做:
1. **销项**:`docs/任务规划/数据可信.md` `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 末句,正确动作是**删号留事实**(换成语义短语),不是回去补一个定义。
| 旧号形态 | 语义短语 | 现行口径出处 |
|---|---|---|
| 「卡」+ 数字 0 | 已知电压注入验证 | `docs/硬件平台/ADC通道映射说明.md` §8.1(✅ 2026-10-27,已销项删行) |
| 「卡」+ 数字 0b | 端子/子板变比确认 | `docs/任务规划/数据可信.md` `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 |
| 「卡」+ 数字 6 | 下游常数按工程量重定 | `docs/任务规划/数据可信.md` §2.3 |
| 「卡」+ 数字 7 | 量纲回归用例 | `docs/任务规划/数据可信.md` `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(未开始,等标准源) |
**本表把形态写成「卡」+ 数字、不复述字面量**:本文是门禁语料,复述形态会把"讲规则的文档"变成
自己的引用站点(§9.1 批次四第 2 条同一条教训);要查旧号,看左列形态 + 属主文档的历史行。
- **旧号永久作废、不得重新取走**:这一族**没有机器识别面**(中文前缀不进语料),停发今天只有
`docs/编号规范.md` §4.1.1 本行 + 本表 + 评审兜住。要机械化,得先给"中文前缀 + 数字"设计候选形态——那与 §9.1 末尾
「族级加字面量上限」同属追溯机制改造,**按 §7.3 单独开卡**,别夹在清退批里顺手做。
- **同形态不同属主**:`docs/任务规划/UI补齐.md` 的条目现在写「第 N 项」,历史上被别处写成同一形态的
4 处(其实指已入库的 `[comm]` 段前置项)已随本批改成不带号的语义形态。同一裸形态跨两个属主文档,
正是 `docs/编号规范.md` §4.1「别拿同形当同族」的实证——清号必须**按属主文档逐处判语义**,不许全局查找替换。
- **不在本批的**:里程碑号(字母 M + 数字)与并行道号(道A/道D/道G)一律保持原样,是否清退等用户
单独裁定,**不要顺手做**。
---
## 10. 批次六换算表:测试验证层级号(2026-10-28 整族清退)
用户裁定:「我不想看到编号」→ 测试验证层级的 `L0 / L0a / L0b / L0c / L0.5 / L0.5c / L1 / L2 / L3` 整族停用,
活文档、代码注释、CI 步骤名、门禁输出标签一律改语义名。**只有 CI 与门禁输出需要一个 ASCII 段名**(日志与命令行
要纯 ASCII,中文进 PowerShell 汇总行会有代码页风险),它不是编号、是可读的英文段名。
| 旧层级号 | 语义名(文档 / CI 步骤名 / 表格) | ASCII 段名(`[SUMMARY]` 标签、CI job id、日志文件名、命令行旗标) |
|---|---|---|
| `L0` | 静态门禁 | `static`(job `static-gates`、`static-pre-commit.log`、旗标 `--static-only`) |
| `L0a` | 钩子解释器预检 | `preflight`(`--preflight-only`;无 `[SUMMARY]` 行,只在收尾「已跑:」列表里出现) |
| `L0b` | 提交信息门禁 | `commitmsg`(`[SUMMARY] gitlint:` 这个既有标签不改,与层级号无关) |
| `L0c` | 体积门禁 | `size`(`--size-only`、`[SUMMARY] size-gate:` 保持不变) |
| `L0.5` | 主机侧纯逻辑单测 | `host-unit`(job `host-unit-tests`、`host-unit-<模块>.log`、`--host-unit-only`) |
| `L0.5c` | 主机单测覆盖率 | `coverage`(`--coverage`,opt-in) |
| `L1` | 板端测试套件 | 无(只出现在文档,从不进日志) |
| `L2` | 主机侧回归 | 无 |
| `L3` | 人工目检 | 无 |
**旧旗标保留为别名**:`scripts/ci_local.py --l0-only` / `--l05-only` 仍可用(argparse 双选项名),肌肉记忆与既有脚本片段不断档;文档与新写的命令一律用新旗标。
### 10.1 撞族警示——同形字面量还属于另外六个族,读旧文先判族
这一族清掉**不等于**仓库里的 `L0`/`L1`/`L2`/`L3` 都消失了。同形形态仍属这些族,各自另有口径:
- **UI 设计令牌层**:`Drivers/BSP/UI/ui_tokens.h` 的「设计令牌层 L0」——层级架构名,**保留**。
- **UI 菜单层级**:`L0~L3` 已于批次三a 改「主界面 / 一级 / 二级 / 三级菜单」,`docs/产品需求/产品需求设计文档.md` 尚有 2 处残留待清。
- **采集链分层**:批次一已整族改语义层名(语义取数与有效性 → 标定折算 → 全周傅氏相量 → 测频与遥测快照 → 保护判据 → 出口与记录 → 动作留痕)。
- **链路时延分段**:批次三b 改为中文段名 + ASCII 短码(`SPI_CMD` 等 11 个);`test/board/` 仍有残留待清。
- **CubeMX 防丢失三层优先级**:批次三c 改为「写进 `.ioc` / 搬进 USER CODE 区 / 审计兜底」。
- **硬件位号与封装尺寸**:磁珠电感位号 `L1`/`L2`/`L3`、封装 `SOT-23_L2.9-W1.3`、`CRYSTAL-L3.2`,以及 FTP 应答 `"215 UNIX Type: L8"` 这类**协议字符串字面量**——永不改(改了就是改行为)。
> 这就是 AGENTS「绝不全局查找替换」那条的又一次实测:本族改名如果按裸形 `L1` 全局替换,会顺手把上面六个族的
> 字面量一起改掉,其中 6 处直接改到 C 断言文案与 FTP 应答。**每一步都要先判族再改,且只按行内置换。**
### 10.2 读史口径
历史文档、变更记录行、提交信息、`.gitea` 历史 run 里出现的 `L0`/`L0.5` 一律按本表换算来读;不要拿它们当"现行名"去搜代码或 CI(现行 CI 里搜 `L0` 只会命中别的族)。本表所在目录不参与编号门禁(`check_ids_new.py` 排除 `scripts/archive/`)。
## 变更记录(2026-10-28 瘦身以前的全量流水)
| 日期 | 变更 | 说明 |
|---|---|---|
| 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/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<n>-<nn>`、`F-<MOD>-<nn>` 从『允许继续发号』整行移出并在『已停发』栏各写一行(含探针证据:新形态号 → 校验 3 错误级);② 本文 6 处形态自述改「字母+数字」描述,使四个族门禁命中归零、lesson 不丢;③ registry 给 `L-PROT`/`FEAT` 补 `retired`、给 `T-TEST` 补 cursor_note(pattern 上限即 3 → 冻结游标是空操作,停发今天只有规范效力);④ 分类登记 `docs/编号规范.md` §4.4 误判面(版本记号 / 活表代号 / 状态组合 / 位号)与 `docs/编号规范.md` §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对其他文档「冻结历史不回改」的约束。 |