@@ -1,17 +1,18 @@
# 编号规范:默认**不**用编号
> **一句话:语义标识是唯一默认 形态,编号是例外。** 例外只留给**有脚本按字面量匹配**的那几种
> ( §4.1 的「允许继续发号」一栏);同一张表里还有一栏是**已停发、存量待清**的族(`编号治理历史.md` §9.1 给清点与批次 )。
> 除此之外一律写语义短语(§3.3 )。
> **一句话:语义标识是唯一形态,编号一律停发。** 2026-10-29 用户裁定:**任何族都不再新增编号**,
> 连 §4.1 那五个「有脚本按字面量匹配」的存量族也一样——既有号只读引用,族里新增内容写语义行名(§3.3 )。
> §4.1.1 另列更早停发、存量待清的族(清点见 `编号治理历史.md` §9.1 )。
>
> 这条不是洁癖,是用户 2026-10-27 的明确要求:**「不要用字母加数字的编号,简直太难以理解了,语义标识是最好的」**。
> 这条不是洁癖,是用户 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`
> 形态判据只剩本文 §1 的默认答案(一律不发) + §4.1 存量 族表 + 人工评审;留档 `docs/门禁说明/id-check-new.md`
> 与 `docs/门禁说明/id-check.md`,手工普查命令与恢复机器面的成本见 §8.5。归档脚本随时能重扫一批改动的形态(`--range A..B`)。
---
@@ -22,15 +23,19 @@
> 重排等于制造一批假链接)。要查历史判据、批次流水、「数据可信」任务卡号换算表,去那篇;
> **改现在的做法只看本文**。
## 1. 决定要不要发号之前,先问三句
## 1. 默认答案:不发号
| 问自己 | 答"否"的结论 |
**2026-10-29 用户裁定:新条目一律不配编号。 ** 这里原本是三句自问(「有脚本按字面量匹配就允许发」),
现在这条路也关掉了——判「能不能发号」不再看形态,答案恒为否。剩下的只是既有号怎么用:
| 场景 | 怎么做 |
|---|---|
| 有脚本 / CI / 回归测试要按这个字面量做匹配吗? | **不发号 ** ,写语义短语 (§3.3) |
| 现有文档或登记表里已经能指代这件事吗? | 引用它,别再发第二个号指同一件事 |
| 一年后别人还能在属主登记表查到它的定义吗? | 查不到就别发——"先记着,以后再说"是编号失控的唯一来源 |
| 想给新需求 / 新踩坑 / 新用例 / 新待办配个号 | 不发 ,写语义行名 (§3.3) ;登记表那一行的行名就是标识 |
| 新东西确实要被脚本按字面量匹配(比如新的回归脚本键) | **先问用户 ** (Ask first)。批下来才算例外,顺序见 §4.1 末条 |
| 现有文档或登记表里已经能指代这件事 | 引用它,别再发第二个号指同一件事 |
| 碰到查不到定义的号 | 删号留事实,不是补一个定义(§10) |
三条硬规矩(对确实要发的号 ):
三条硬规矩(管既有号的引用与处置 ):
- **号不承载语义**:严重度、优先级、模块名、轮次都不写进号里。事实一变,号就开始撒谎。
- **号不回收、不复用**:销项 = 删登记行 + 清掉所有引用 + 别名表标 `void` (§5.5)。历史上"销掉的号被
@@ -43,7 +48,7 @@
|---|---|---|
| ① 最好 | **语义短语 ** | 规划 / 待办 / 缺陷 / 风险 / 决策 / 差距 / 文档内步骤与阶段——**默认形态** |
| ② 其次 | **文档名 + 章节号 ** | 指某篇文档的某节(`docs/网络/网络自愈架构设计.md` §4.10,紧邻写法) |
| ③ 最后 | **编号 ** | 只有 §4.1「允许继续发号」那一栏 ,且必须能反查到定义 |
| ③ 最后 | **编号 ** | 只指 §4.1 五个存量族的**既有号**(只读) ,且必须能反查到定义;新条目不在此列 |
### 3.1 判定口诀
**机器读 → 发号;人读 → 写短语。** 拿不准就写短语:短语看不懂还能靠上下文猜,号看不懂只能去查表。
@@ -66,43 +71,42 @@
## 4. 编号空间
### 4.1 允许用号的 族(**穷举**——这张表以外一律不许发 号)
### 4.1 存量 族(**穷举**——2026-10-29 起连这五个族也不再发新 号)
**允许继续发号**—— **恰好下面 5 行**, 判据 = 有脚本按字面量匹配它(现状实测 2026-10-27 见 ` 编号治理历史.md ` §9.1)。
` TC-*` **不在本表**:它的发号已按用户裁定 2026-10-27 停掉(别把那句裁定读成「暂缓」——防误读的三条对照在
本节末的框里,清点的来龙去脉在 ` 编号治理历史.md` §9.1 批次三)。
下表 **恰好 5 行**, 是仓库里仅剩还带编号的族:既有号继续被脚本按字面量匹配、继续被引用,**但族里新增
内容不再配号**(写语义行名)。「有脚本按字面量匹配它」这个旧判据自 2026-10-29 起作废——这五族的号是
历史遗留的机器把手,不是发号许可。` TC-*` 早两天(2026-10-27)已按同一逻辑停发,清点与来龙去脉在
` 编号治理历史.md` §9.1 批次三。
| 族 | 形态 | 属主登记处 | 用途 |
| 族 | 形态 | 属主登记处 | 既有号被谁读 / 新写怎么办 |
|---|---|---|---|
| ` TRAP-*` | ` TRAP-<域>-<nn>` | ` docs/问题记录/*_Trap_Records.md` | 踩坑证词的永久锚点,代码注释反查 |
| ` FR-*` | 需求 | ` docs/产品需求/产品需求设计文档.md` §5 | 需求↔测试追溯 |
| ` CODE-RULE-<nn>` | 代码规范条款 | ` scripts/check_coding_standard.py` | 门禁按条款号报错并统计存量 |
| ` MENU-STATE-<nn>` | UI 状态机键 | ` simulator/tests/check_menu_rows.py` | 像素回归脚本按它取状态行 |
| ` P-<n>` | 编号治理的设计原则 | ` scripts/archive/id_gate/编号治理历史.md` §2( 2026-10-28 随沿革归档,本文不再列条目) | **只读存量**:原则已归档,新写条目按 §3.3 写语义短语,不再配 P 号 |
| ` TRAP-*` | ` TRAP-<域>-<nn>` | ` docs/问题记录/*_Trap_Records.md` | 代码注释按号反查踩坑证词;**新踩坑**在域文件里写语义行名,不再顺延号段 |
| ` FR-*` | 需求 | ` docs/产品需求/产品需求设计文档.md` §5 | 需求↔测试追溯的既有键;**新需求**用 §5 表格的行名(语义短语)指代,追溯按既有号跑存量 |
| ` CODE-RULE-<nn>` | 代码规范条款 | ` scripts/check_coding_standard.py` | 门禁按条款号报错并统计存量;**新条款先问用户**——脚本要按号统计,破例得由用户批 |
| ` MENU-STATE-<nn>` | UI 状态机键 | ` simulator/tests/check_menu_rows.py` | 像素回归脚本按它取状态行; **新状态同样先问用户** |
| ` P-<n>` | 编号治理的设计原则 | ` scripts/archive/id_gate/编号治理历史.md` §2( 2026-10-28 随沿革归档,本文不再列条目) | **只读存量**:原则已归档,新写条目按 §3.3 写语义短语 |
> ⚠ **「批次三不做了」 只有一层意思:不去清这个族,同时把它的发号口关死。** 它**不是**「TC 族维持原状、
> 新用例照旧配号」—— 维持原状的是**存量号**,关掉的是**发号口**。三 条对照,防止往任何一边读过头:
> ⚠ **停发 只有一层意思:不去清存量号,但发号口关死。2026-10-29 起这句话适用于全部族,不只 ` TC-* `。**
> 维持原状的是**存量号**,关掉的是**发号口**。四 条对照,防止往任何一边读过头:
>
> - ❌「不做 = 维持原状 = 还能发」——**错**。新用例一律用**语义化测试函数名 + 文档用例表的行名** (§3.3) ,
> 不再配 TC 号; 指认**既有**用例仍可引用现存号(旧号只读,不是许可 新配)。
> - ❌「停发 = 这族要废了,顺手清掉、把号腾出来复用」——**也错**。现存号是用例输出行名与追溯 脚本
> ` scripts/check_test_traceability.py` 认的把手(该脚本 2026-10-29 实测**只手工跑**:不在任何钩子、
> ` scripts/ci_local.py ` 与远端 CI 里),清它等于换机制(` 编号治理历史.md` §9.1);号不回收、不复用是 §1 的硬规矩。
> - ❌「§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 `(没有专属子族的模块码,如 ` TC-ADCIN- ` 段)
> 的 ` cursor ` 为 ` null `——一个游标表达不了每个模块码的水位,写全族最高号反而放行低号。机器面在的时候它
> 就不响,现在连那层壳都没有:**给这类模块码补号,即使在文档表格里一并补了定义行,一样违反本裁定**,
> 评审要专门盯这一面。要把死角钉死(按模块码克隆子族,或给族级加字面量上限)与「真要清退」同属追溯
> 机制改造,按 ` 编号治理历史.md` §7.3 单独开卡,别夹在别的批里顺手做 。
> - **唯一的重启入口**:先由用户裁定 → 再回到本节把族放回上面那 5 行、并指出按它做字面量匹配的脚本 →
> 才谈得上发号。顺序倒过来就是 ` 编号治理历史.md` §1.2 那四类事故的由来。
> 两道编号门禁退役后没有任何东西再读这份登记——**别把「不报错」读成「允许发号」**。
> - **已知空白面(当年登记时就写着)**:主族 ` TC `(没有专属子族的模块码,如 ` TC-ADCIN- ` 段)的 ` cursor `
> 为 ` null `——一个游标表达不了每个模块码的水位,写全族最高号反而放行低号。机器面在的时候它就不响,
> 现在连壳都没有:**给这类模块码补号,即使在文档表格里一并补了定义行,一样违反裁定**,评审专门盯。
> 要钉死它(按模块码克隆子族)与「真要清退」同属追溯机制改造,按 ` 编号治理历史.md ` §7.3 单独开卡。
> - **唯一的例外入口**:先由用户裁定 → 再回到 §4.1 把该族写清「哪个脚本按字面量匹配它」 → 才谈得上
> 发号。顺序倒过来就是 ` 编号治理历史.md` §1.2 那四类事故的由来 。
**已停发、存量待清**(一律**不得再新增引用**;下表除 ` TC-*` 外,` id_registry.json` 里剩的登记只是归档普查的
**已停发、存量待清**( §4.1 那五族 2026-10-29 起同样停发,区别只在存量保留、不去清;本表这些族连存量引用也要清掉, 一律**不得再新增引用**;下表除 ` TC-*` 外,` id_registry.json` 里剩的登记只是归档普查的
语料残留,**不再当"登记处"读**——那份登记自 2026-10-28 起没有机器读者。清点见 ` 编号治理历史.md` §9.1。
` TC-*` 是这一栏的**特例**:登记与现存号都要留着,现存号仍被追溯脚本按字面量读,不是待清对象
(见 ` 编号治理历史.md` §9.1 批次三):
@@ -120,8 +124,9 @@
| ` T-TEST` | 台架阶段 **裸形**(字母 T 紧跟一位数字) | 活引用 0(批次一清零;余下是本文自述与技能文档的形态举例) | 裸形最危险(同字母多义),且改「台架阶段一」即可 |
| ` F-*` | 网络设计条目 ` F-<MOD>-<nn>` | 动手前 38 处 / 12 个 → **2026-10-27 批次一收口**:正文 9 处(含一个从来没有定义行的 DRV 段孤儿号,删号)+ 主机侧单测注释 1 处改「条目名」,仅属主文档 ` 编号治理历史.md` §7 历史对照表留 12 条编号 | 代码注释按号回指设计条目,但没有任何脚本匹配它 |
- **新增族的唯一正当条件**:有脚本要按字面量匹配它。顺序固定:先改 ` id_registry.json `(含属主登记处)
→ 再写属主文档 → 最后才允许在别处引用。反过来做必然造出悬空号。
- **新增族: 2026-10-29 起一律不许**,先问用户。真批下来,顺序固定:先改本文 §4.1(写清哪个脚本按字面量
匹配它) → 再写属主文档 → 届时有机器面才动 ` scripts/archive/id_gate/id_registry.json ` → 最后才允许在别处
引用。反过来做必然造出悬空号。
- 模块码是既定缩写,事实源 = registry 的族 pattern 与属主文档标题行,**别自创**(` 编号治理历史.md` §6)。
### 4.1.1 已停发的族(别再指,更别再"复用"这些号)
@@ -158,13 +163,13 @@
## 5. 分配、引用、销项
### 5.1 新增编号
先过 §1 三问。确实要发号:① 族必须落在 §4.1 那 5 行之内(**表外一律不发**)② 在属主登记处写定义行
③ 才允许在别处引用。**没有属主登记处的号不许存在**——这句原先由八项校验的"悬空引用"实现,该校验
2026-10-28 退役,现在它是纸面规矩,只有评审在执行。
### 5.1 新增编号:默认答案是没有
一律不发(§1、§4.1)。新条目写语义短语(§3.3),登记处的行名就是标识;引用既有号必须能反查到定义、
旁边必须带人话(§1 三条硬规矩)。**唯一入口是用户裁定**:某样新东西确实要被脚本按字面量匹配时先问,
批下来再按 §4.1 末条的顺序落文档。
` scripts/archive/id_gate/id_registry.json` 的族与游标登记**只在恢复机器面时才动**(§8.5):没有脚本读它,
写进去也拦不住任何人——**别把" registry 里查得到"当成 发号许可**( ` TC-* ` 正是这一类:停发与登记并存,
许可只来自 §4.1 那张表)。
写进去也拦不住任何人——**「 registry 里查得到」从来不是 发号许可**,许可只来自用户裁定。
### 5.3 代码注释
**优先写短语**( ` FTP 鉴权`、` 监听生命周期模块化`),别写字母号;确需引用活号时必须带属主文档名。
@@ -191,7 +196,7 @@
**现行没有编号门禁**:2026-10-29 用户裁定把最后那道只查新增行的 ` id-check-new` 也摘了(钩子口径
52 → 51,脚本与白名单移入 ` scripts/archive/id_gate/check_ids_new.py`,留档 ` docs/门禁说明/id-check-new.md`,
理由与手工跑法都在那篇)。判据回到本文 §1 三句自问 、§4.1 族总 表与人工评审。
理由与手工跑法都在那篇)。判据回到本文 §1 的默认答案(一律不发) 、§4.1 存量 族表与人工评审。
全库八项校验(未登记前缀 / 形态不合规 / 悬空引用 / 重复定义 / 冻结族越游标 / 未紧邻文档名 / 孤儿告警 /
可判定比例 + 两根护栏)2026-10-28 退役:它查过什么、为什么退、当年清点数字 → ` docs/门禁说明/id-check.md`
@@ -217,11 +222,11 @@ scripts/archive/id_gate/check_ids.py --top 0 # 全库存量普查(
## 10. 速查
- 看到一个不认识的号 → 先查 ` id_aliases.json` 与属主登记表;查不到就**删号留事实**,不要补定义。
- 想给待办 / 缺陷 / 差距 / 风险发号 → 不许,写短 语(§3.3)。
- 想给任何新条目发号(含需求 ` FR-* `、踩坑 ` TRAP-* `、用例 ` TC-* `、待办与风险) → 不许,写语义行名 (§3.3 / §4.1 )。
- 想知道「还有多少号可清」→ 看 ` 编号治理历史.md` §9 的存量表与三批计划。
- 想给文档内步骤或测试阶段发号 → 不许,写「步骤 3」「阶段 7」(§3.3)。
- 想新增前缀族 → 先回答"哪个脚本要按字面量匹配它"(§4.1);答不出就别建 。
- 想新增前缀族 → 先问用户(Ask first);「有脚本要按字面量匹配它」这个旧判据自 2026-10-29 起不再构成许可(§1) 。
- 要改号 → ` scripts/rename_ids.py` + ` 编号治理历史.md` §7.3 五步。
- 编号形态拿不准 → 本文 §1 三句自问 + §4.1 那张表;**没有任何机器会替你兜**。两道门禁的历史与退役理由 →
- 编号形态拿不准 → 本文 §1 的默认答案 + §4.1 那张表;**没有任何机器会替你兜**。两道门禁的历史与退役理由 →
` docs/门禁说明/id-check.md`、` docs/门禁说明/id-check-new.md`。
- 想让机器帮你扫一批改动,或要恢复机器面 → §8.5。