docs(规约): 删除编号规范.md,生效规则并入文档规范 §7.1

用户裁定: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。
This commit is contained in:
2026-11-06 18:32:04 +08:00
parent c7c0125982
commit ad87f979b1
39 changed files with 216 additions and 420 deletions
@@ -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) |
@@ -731,7 +731,7 @@ tTimer_NoUI 无压无流判据(CN_
## 11. 屏板链路复刻任务规划
> **口径**:条目一律用**语义短语**(编号规范 P-8),执行序即表序。
> **口径**:条目一律用**语义短语**(`docs/文档规范.md` §7.1 一律不发编号),执行序即表序。
> 改动范围只含本产品固件与 `DTU-RemoteLCD` 客户端;**屏板固件不在本仓库**,
> 其行为以需求档 §5.16 为契约做黑盒验收。
>
+1 -1
View File
@@ -22,7 +22,7 @@
## 0. 条目与引用规则
- **新条目使用语义短语**,一行直接说清是什么事,不再新增字母加数字编号。
- 旧编号只用于追溯历史,不复用、不重新发号;编号族与冻结规则见 `docs/编号规范.md`。
- 旧编号只用于追溯历史,不复用、不重新发号;规则见 `docs/文档规范.md` §7.1。
- 引用条目时写清所在文档和语义名,例如:`docs/任务规划/登记簿.md` 的
「net 层跨上下文收口」。不要只写一个短号让读者猜。
- 任务状态只维护在任务所属文件;本文件不另建一套状态表。
+48
View File
@@ -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-<域>-<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` |
**已停发、只读的旧号**:登记簿 `N-x`/`S-x`/`T-x`、专项 `A-x`、网络设计条目 `F-<模块>-<nn>`、
保护功能号 `L<n>-<nn>`、台架阶段裸形(字母 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. 常见错误速查
@@ -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 一律停发),用语义化测试函数名。
---
@@ -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`)
@@ -152,7 +152,7 @@
TC-{MOD}-{NNN}
```
> ⚠ **本族的号已于 2026-10-27 停发**(用户裁定「批次三,不坐」→ `docs/编号规范.md` §4.1):**新用例不再配
> ⚠ **本族的号已于 2026-10-27 停发**(用户裁定「批次三,不坐」→ `docs/文档规范.md` §7.1):**新用例不再配
> TC 号**,标识 = 语义化测试函数名 + 本文档用例表的行名(§6.4 同口径)。下面的形态约定是**读现存号**用的,
> 不是起新号的模板。现存号保留、不清、不复用——测试追溯门禁按字面量读它。
-253
View File
@@ -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-<域>-<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 写语义短语 |
> ⚠ **停发只有一层意思:不去清存量号,但发号口关死。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<n>-<nn>` | 保护功能号 | **批次二已整族转功能名,即日停发**:活引用 0,只剩一处**原始串口日志**(冻结证据、永久保留)与本文/技能文档的形态举例;属主文档表首格写功能名,不再配号 | 用户 2026-10-27 定调「语义标识是最好的」+ 本轮指令「把能清的族清掉一批」;发号口此前由"悬空引用"校验关着,**2026-10-29 起只由本表与评审关**。**数值游标不冻结**:L1/L2/…各段最高号不同,单一数字游标反而放行低号 |
| `F-<MOD>-<nn>` | 网络设计条目 | **批次一已转「`编号治理历史.md` §7 条目名」,即日停发**:代码与测试侧 0 处;属主文档 `编号治理历史.md` §7 编号列 13 条仅作历史对照(定义行不算引用) | 同上;引用旧号命中别名表 `retired-to-phrase` = **只读**,不构成发号许可 |
| `N-*` | 登记簿 `N-<nn>` | 4 处 / 3 个字面量 | 登记簿已于 2026-10-26 全面改语义短语,残留的是漏网的旧引用 |
| `TM-*` | 阶段/里程碑 `TM-<code>-<nn>` | 1 处 | 阶段号本就属 §3.3 明令不许写号的那类 |
| `T-TEST` | 台架阶段 **裸形**(字母 T 紧跟一位数字) | 活引用 0(批次一清零;余下是本文自述与技能文档的形态举例) | 裸形最危险(同字母多义),且改「台架阶段一」即可 |
| `F-*` | 网络设计条目 `F-<MOD>-<nn>` | 动手前 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-<nn>`(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。
+3 -3
View File
@@ -30,7 +30,7 @@
> ⚠ **字母 `E` 有两套编号,靠连字符区分**:
> - `E0`~`E19`(**无**连字符)= 本文的**自愈实验**编号,逐条见 §5.2;
> - 带连字符的 `E-<nn>` = **历史审计发现**编号(属主文档已于 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`)
+3 -3
View File
@@ -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. 改这套门禁本身(新增一个模块的宿主单测)
+5 -5
View File
@@ -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<NN>.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 撞号
+13 -13
View File
@@ -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` 游标**。
**每批自证没吃余量(可复制的做法,五项式)**:
+1 -1
View File
@@ -4,7 +4,7 @@ ADC1 采样链路(TIM3 1 kHz 节拍 → ADC1 九通道扫描 → DMA2_Stream4
语义映射)的实证陷阱:现象、判读陷阱、定案根因、修复与回归判据。**动 ADC 采样、通道映射或
诊断代码之前先读本文。**
> 编号口径:本域既有条目按 `TRAP-ADC-<nn>` 自 01 起连续编号,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/编号规范.md` §4.1 一律停发),新踩坑在本文写语义行名。编号不复用、不重排。
> 编号口径:本域既有条目按 `TRAP-ADC-<nn>` 自 01 起连续编号,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/文档规范.md` §7.1 一律停发),新踩坑在本文写语义行名。编号不复用、不重排。
> 状态图例:✅ 已修复定案 · ⏳ 待修。
> 设计侧口径(采样节拍、寄存器配置、铁律)不在本文,见
> `docs/子系统设计/ADC采样节拍设计说明.md`;本文只记「踩过的坑」与「怎么判断踩到了」。
+1 -1
View File
@@ -2,7 +2,7 @@
CH395F 以太网驱动与 NET 层的实证陷阱:现象、定案根因、修复、回归判据。改驱动/NET 层前先读本文。
> 编号口径:本域既有条目 `TRAP-NET-<nn>` 连续 01~21,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/编号规范.md` §4.1 一律停发),新踩坑在本文写语义行名。编号沿革(2026-10-13 全库重排):
> 编号口径:本域既有条目 `TRAP-NET-<nn>` 连续 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` 为违规裸形已全库迁移;
> 旧号只存在于历史提交与旧日志。编号不复用、不重排。