docs(编号规范): 编号一律停发——§4.1 五族也不再发新号,只读存量
用户裁定(2026-10-29):「啥号都不发」= 任何族都不再新增编号, 含 §4.1 那五个原本"有脚本按字面量匹配"的存量族;既有号只读引用, 族里新增内容一律写语义行名。 规范本体: - §1 由「先问三句」改成「默认答案:不发号」,三问表换成场景对照表; - §4.1 由「允许用号的族」改成「存量族」,第四列改「既有号被谁读 / 新写怎么办」,逐行写明新写怎么做(TRAP 写语义行名、FR 用 §5 行名、 CODE-RULE / MENU-STATE 先问用户、P-n 只读存量页号); - 末框四条对照 + 唯一例外入口(确需机器按字面量匹配 → 先问用户); - 新增族 = 一律不许;批准后顺序:本文 §4.1 → 属主文档 → 才动 registry。 跨文件同步(12 份):门禁说明 id-check-new / id-check / host-unit-tests (把"校验 5/3 拦新号"这类现状叙述历史化)、两份 TRAP 记录的编号口径、 开机账本用例号说明、AGENTS 两处、id-family 技能与其 steps-alpha 模板、 归档 README 与两份归档脚本 docstring。 AGENTS 主题表那行原写「允许用号的 7 个族」,与规范的 5 行本就对不上, 旧计数一并消掉。 未做:pre-commit 的 default_stages 一行——用户对该项未置可否。 验证:py_compile 与 check_ids_new.py --self-test 均 rc=0;逐篇 check_doc_links.py --sections-strict rc=0(编号规范 70 处引用 / 68 可判定 / 无法判定 0);13 份改动文件表列数与字节体检相对基线零新增。
This commit is contained in:
@@ -7,6 +7,9 @@ version: 1.1.0
|
||||
|
||||
# 编号族清退成语义标识
|
||||
|
||||
**2026-10-29 用户裁定:全族一律停发**(含 `docs/编号规范.md` §4.1 那五个存量族)——本 playbook 的「停发」分支默认已成立,
|
||||
现在唯一还需要决策的是**要不要清退存量**(全仓改语义 + 销项删行 + 逐号换算表入档)。
|
||||
|
||||
**动手前先判这一族有没有「机器识别面」**——它决定计数口径的来源与落地去处,两条路的做法**正好相反**:
|
||||
|
||||
| 族形态 | 计数口径来源 | 改名手段 | `scripts/archive/id_gate/id_aliases.json` |
|
||||
|
||||
@@ -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`)与判据「有脚本按字面量匹配它」。清退 = 全仓改语义;停发 = 在规范表里写死不再新增引用(`id_registry.json` 的游标冻结只是裁定留痕,2026-10-29 起无机器读者)。
|
||||
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 起无机器读者)。
|
||||
2. **按族实测三口径(字面量 / 站点 / 文件),不用 grep 估数**。`Checker.refs` 是 **dict(字面量 → 文件集合)不是方法**,`ck.refs(fam)` 这种写法会 `TypeError`;站点数门禁不直接给,用族正则重扫它自己的语料:
|
||||
```python
|
||||
import sys; sys.path.insert(0, "scripts")
|
||||
@@ -60,7 +60,7 @@
|
||||
报告「字面量 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)。
|
||||
14. **裁定「不做」也要写成可执行硬口径入档**(不是只划掉一行——「不做」最容易被读成「那还可以继续发号」):
|
||||
- §4.1.1「已停发」栏新增该族一行:**游标冻结、现存号只减不增、新用例改用语义化测试函数名 + 文档表格行名**,并写清与「允许继续发号」栏为何不打脸;
|
||||
- §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 步。
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
|
||||
## 文档与图形
|
||||
|
||||
- **登记簿类文档「完成即销项」**:`docs/任务规划/README.md` 这类待办登记簿,事项修复/关闭后**直接从表中删除该行**(不保留"已消化"行)——结论与证据应已沉淀进对应模块文档/问题记录。销项时必须:① 先核对目标文档确已含完整记录 ② 同步清理其他文档对该编号的引用 ③ 改完跑 `check_doc_links.py --all` + pre-commit。**新条目标识(用户裁定 2026-10-14)**:`#` 列填**语义短语**(如 `沉降窗 800ms 上限只留痕`),**不再新增字母+数字编号**——"编号不回收"只写规则却不留痕迹就不可执行(销项删行后仓库里毫无痕迹,2026-10-14 实测就发生过「销项号被重新取走」的撞号事故),语义标识自带唯一性;**存量编号(登记簿 N-x / S-x / T-x 与专项 A-x)已于 2026-10-26 全部转成语义短语**,旧号进 `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase`、不得再指;**「数据可信」任务卡号(中文前缀「卡」+ 数字,14 个)已于 2026-10-27 随卡销项整族清退**,换算表 `scripts/archive/id_gate/编号治理历史.md` §9.3——这一族**刻意不进 `id_aliases.json`**:中文前缀不进 check_ids 语料,登记了机器也看不见,**没有机器识别面**,停发只靠规范与评审;**已随销项消失的号永久作废**、不得复用 → `docs/任务规划/README.md` §0
|
||||
- **登记簿类文档「完成即销项」**:`docs/任务规划/README.md` 这类待办登记簿,事项修复/关闭后**直接从表中删除该行**(不保留"已消化"行)——结论与证据应已沉淀进对应模块文档/问题记录。销项时必须:① 先核对目标文档确已含完整记录 ② 同步清理其他文档对该编号的引用 ③ 改完跑 `check_doc_links.py --all` + pre-commit。**新条目标识(用户裁定 2026-10-14;2026-10-29 收口为一律不再发号)**:`#` 列填**语义短语**(如 `沉降窗 800ms 上限只留痕`),**不再新增字母+数字编号**——"编号不回收"只写规则却不留痕迹就不可执行(销项删行后仓库里毫无痕迹,2026-10-14 实测就发生过「销项号被重新取走」的撞号事故),语义标识自带唯一性;**存量编号(登记簿 N-x / S-x / T-x 与专项 A-x)已于 2026-10-26 全部转成语义短语**,旧号进 `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase`、不得再指;**「数据可信」任务卡号(中文前缀「卡」+ 数字,14 个)已于 2026-10-27 随卡销项整族清退**,换算表 `scripts/archive/id_gate/编号治理历史.md` §9.3——这一族**刻意不进 `id_aliases.json`**:中文前缀不进 check_ids 语料,登记了机器也看不见,**没有机器识别面**,停发只靠规范与评审;**已随销项消失的号永久作废**、不得复用 → `docs/任务规划/README.md` §0
|
||||
- 图形走 **`draw-diagram` skill**:精确布局图用 `tools/arch_diagram/gen_*.py` 生成器(产物放 `docs/images/`,**脚本与产物同一笔提交**:改生成器没重跑,下一个碰巧重跑的人会看到一段「不是我改的」diff——已机械化 `generated-fresh`,重跑到临时目录逐字节比对 → `docs/文档规范.md` §4.4);拓扑图用 Mermaid;**勿手绘 ASCII 框图**。文件引用关系图走 `tools/refgraph`(`& 'tools\refgraph\gen_refgraph.bat'`)
|
||||
- **改名 / 挪目录一律走 `scripts/rename_ref.py`(先 dry-run,确认后 `--apply`)**:`git mv` + 自动改写全库引用(反引号引用 / Markdown 链接 / 图片 `../` 层级换算 / `#include` / `uvprojx` `<FilePath>` / `CMakeLists.txt`),落盘后自动跑 `check_doc_links --all` 复核——手工扫引用既慢又漏(一次改名历史上波及 10~30 文件)。引用章节用「`路径.md` §N.M」**紧邻写法**(`doc-links` 校验编号是否还在:紧邻/裸名/前缀/别名/自引用**全部拦提交**(钩子带 `--sections-strict`);每次跑打印「可判定比例」,`--section-todo` 出待改清单,昵称歧义就登记 `scripts/section_aliases.json` 或写清楚)→ `docs/文档规范.md` §3.5 / §3.6。**编号改名走 `scripts/rename_ids.py`**(映射表驱动、**显式 scope**、干跑默认、自动写 `scripts/archive/id_gate/id_aliases.json` 的 scoped 旧号→新号条目;`[示例]`/`[计划]` 行与变更记录表不改写;**绝不全局查找替换**——同一裸形字面量可能同时属多个族,全局替换等于造新撞号,实测 `S3` 三义)
|
||||
- 文档写作规范(编码/BOM/链接/表格/一致性钩子)→ `docs/文档规范.md`;全量索引与推荐阅读顺序 → `docs/README.md`
|
||||
@@ -177,7 +177,7 @@
|
||||
| 存储栈(FatFs / dhara / lftpd / 两条 FatFs 陷阱) | `docs/架构设计/STM32F4-Base存储架构说明.md` |
|
||||
| RAM / 栈预算 / 容量台账 | `docs/内存管理/RAM使用分析与优化方案.md`、`内存内容分配策略.md` |
|
||||
| **每个提交门禁一篇详解**(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径) | `docs/门禁说明/README.md`(51 个钩子 → 29 篇索引,其中 2 篇是退役留档 + 1 指针) |
|
||||
| **要不要给某个东西发编号**(默认:不发,写语义短语)/ 允许用号的 7 个族(`TC-*` 已停发——「停发」不等于「暂缓」,也不等于「可以清号」)/ 编号门禁现状(**两道都已退役**:全库八项校验 2026-10-28、只查新增行 2026-10-29;此后无机器面,只靠 §1 三句 + 评审) | `docs/编号规范.md`(§1 先问三句、§4.1 族总表〔穷举〕与『已停发』栏、§8 门禁现状与退役路线) |
|
||||
| **还想给东西发编号?**(**2026-10-29 用户裁定:一律不发**,写语义短语;§4.1 五个存量族的既有号只读引用——「停发」不等于「暂缓」,也不等于「可以清号」)/ 编号门禁现状(**两道都已退役**:全库八项校验 2026-10-28、只查新增行 2026-10-29;此后无机器面,只靠 §1 与评审) | `docs/编号规范.md`(§1 默认答案、§4.1 存量族〔穷举〕与『已停发』栏、§8.5 手工普查与恢复机器面) |
|
||||
| 提交门禁通用机制(阶段 / stash 陷阱 / 触发面 / 增量拦截三段式) | `docs/代码规范/pre-commit使用说明.md` §2 |
|
||||
| 代码规范 V1.0 / cppcheck 口径 | `docs/代码规范/嵌入式C语言代码规范_V1.0.md`、`cppcheck使用说明.md` |
|
||||
| 自动化测试 / 实机测试 / 板级套件 | `docs/测试说明/自动化测试流程.md`、`实机测试实施指南.md`、`board-test-suite` skill |
|
||||
|
||||
@@ -70,8 +70,9 @@
|
||||
| `TC-BOOTSTAT-030c` | init 后连读 100 次,三类 I2C 调用计数**纹丝不动** | "任意上下文可读"不是口头承诺 |
|
||||
|
||||
> ⚠ 这些号是**主机侧用例号**,不是板端用例号,也不是需求号;族口径沿用
|
||||
> `docs/编号规范.md` 的 TC 族(默认 `check_dangling`),所以**本文就是定义位**:
|
||||
> 新增/删除用例必须同步改本表,否则 `id-check` 校验 3 会报悬空、校验 7 会报孤儿。
|
||||
> `docs/编号规范.md` 的 TC 族(既有号只读),所以**本文就是定义位**:
|
||||
> 新增/删除用例必须同步改本表——`id-check` 已于 2026-10-28 退役,悬空与孤儿**不再有机器警报**,只靠评审;
|
||||
> 新增用例本身不再配号(`docs/编号规范.md` §4.1 一律停发),用语义化测试函数名。
|
||||
|
||||
---
|
||||
|
||||
|
||||
+56
-51
@@ -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。
|
||||
|
||||
@@ -131,8 +131,8 @@
|
||||
- 用例号段:`TC-HOST-<模块码>` 以 `test/host/<目录>/*` 为属主登记处(`docs/编号规范.md` §4.1);
|
||||
**该号段 2026-10-27 起停发新号**(用户裁定「批次三,不坐」):新增用例**不配号**,写语义化测试函数名,
|
||||
现存号只读、不清、不复用。追溯器只双向比对已有集合,**不会**因为新用例没号而报错——别把它当"要带号"。
|
||||
**机器口径同日已落地**:`scripts/archive/id_gate/id_registry.json` 37 个 TC 类族全部 `frozen: true`,34 个子族游标冻结在 2026-10-27 存量最高号,
|
||||
在号段上再加新号 = `id-check` 校验 5 错误级;无专属子族的模块码落在主族 `TC`(游标仍为空),那一面由校验 3 + 冻结水位 + 评审兜住
|
||||
**当时的机器口径**(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 末段。
|
||||
|
||||
## 8. 改这套门禁本身(新增一个模块的宿主单测)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
> ⚠ **本文是退役留档,不要照着它去改门禁。**
|
||||
> 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 允许用号的族
|
||||
> **此后编号形态没有任何机器面**:判据只剩 `docs/编号规范.md` §1 的默认答案(一律停发)、§4.1 存量族
|
||||
> (穷举)与人工评审。前辈 `id-check`(全库八项校验)已于 2026-10-28 退役 → `docs/门禁说明/id-check.md`;
|
||||
> 两步合起来的路线 → `docs/编号规范.md` §8.5。
|
||||
> 下面 §1~§6 是退役前的原样描述,只在手工复查「这批改动 / 这段历史里有没有野生编号」时用得上。
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
## 5. 此后靠什么守着
|
||||
|
||||
- `docs/编号规范.md` §1「先问三句」+ §4.1 允许用号的族(穷举)+ §3.3 禁发范围——**新增族不再需要
|
||||
- `docs/编号规范.md` §1「默认答案:不发号」+ §4.1 存量族(穷举)+ §3.3 禁发范围——**新增族不再需要
|
||||
登记机器白名单**,那个"唯一口子"随门禁一起消失;答不出"哪个脚本要按字面量匹配它"就别建族。
|
||||
- 评审与销项纪律:`docs/任务规划/README.md` §0(已随销项消失的号永久作废、不得复用)。
|
||||
- ⚠ 要认下丢了什么:**"销项删行后号被重新取走"这类事故当初正是靠机械牙发现的**(2026-10-14 撞号
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
> 一句话:它管**"号"这个东西不许野生**——每个编号必须属于一个已登记的族、形态合法、
|
||||
> 有定义处、有人引用、引用它的时候说清是哪篇文档的号。
|
||||
> 规范正文 = `docs/编号规范.md`(§1 先问三句、§4.1 允许用号的族〔穷举〕、§8 门禁与实测基线),本门禁是那八项的机械执行。
|
||||
> 规范正文 = `docs/编号规范.md`(§1 默认答案(一律停发)、§4.1 存量族〔穷举〕、§8 门禁与实测基线),本门禁是那八项的机械执行。
|
||||
|
||||
- 配置:`entry: python scripts/archive/id_gate/check_ids.py --strict`,`pass_filenames: false`,
|
||||
`files:` 覆盖 `.md/.c/.h/.py/.yaml/.json/.txt` 与配置文件本身。
|
||||
@@ -207,7 +207,7 @@
|
||||
要指代就写全号并紧邻属主文档名(写法口径见 `docs/文档规范.md` §3.5,判它的是校验 6)。
|
||||
3. ⚠ **反向错误更贵**:为了「少占余量」而把编号改写成语义短语/散文——那正是 §7.6 与这根护栏的动机要防的
|
||||
稀释(比值会被清号动作稀释,绝对数不会)。2026-10-27 凌晨 Lead 给三条道下过这样一条错指令,已撤回;
|
||||
正确口径是:按 `docs/编号规范.md` §1 先问三句,属允许族就用号,**需要新母号时由 Lead 改 `id_registry.json` 游标**。
|
||||
当时的口径是:按 `docs/编号规范.md` §1 先问三句,属允许族就用号(该判据 2026-10-29 作废,全族一律停发),**需要新母号时由 Lead 改 `id_registry.json` 游标**。
|
||||
|
||||
**每批自证没吃余量(可复制的做法,五项式)**:
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ ADC1 采样链路(TIM3 1 kHz 节拍 → ADC1 九通道扫描 → DMA2_Stream4
|
||||
语义映射)的实证陷阱:现象、判读陷阱、定案根因、修复与回归判据。**动 ADC 采样、通道映射或
|
||||
诊断代码之前先读本文。**
|
||||
|
||||
> 编号口径:按 `docs/编号规范.md` 采用 `TRAP-ADC-<nn>`,本域自 01 起连续。编号不复用、不重排。
|
||||
> 编号口径:本域既有条目按 `TRAP-ADC-<nn>` 自 01 起连续编号,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/编号规范.md` §4.1 一律停发),新踩坑在本文写语义行名。编号不复用、不重排。
|
||||
> 状态图例:✅ 已修复定案 · ⏳ 待修。
|
||||
> 设计侧口径(采样节拍、寄存器配置、铁律)不在本文,见
|
||||
> `docs/子系统设计/ADC采样节拍设计说明.md`;本文只记「踩过的坑」与「怎么判断踩到了」。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
CH395F 以太网驱动与 NET 层的实证陷阱:现象、定案根因、修复、回归判据。改驱动/NET 层前先读本文。
|
||||
|
||||
> 编号口径:按 `docs/编号规范.md` 采用 `TRAP-NET-<nn>`,连续 01~21。编号沿革(2026-10-13 全库重排):
|
||||
> 编号口径:本域既有条目 `TRAP-NET-<nn>` 连续 01~21,**只读引用**;2026-10-29 起**不再新增 TRAP 号**(`docs/编号规范.md` §4.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` 为违规裸形已全库迁移;
|
||||
> 旧号只存在于历史提交与旧日志。编号不复用、不重排。
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
## 现在用什么
|
||||
|
||||
- **没有现行门禁**:接班的 `id-check-new`(只查新增行、零语料)也在 2026-10-29 被用户裁定退役,
|
||||
脚本进本目录。编号形态此后无机器面,判据 = `docs/编号规范.md` §1 三句自问 + §4.1 族总表 + 评审;
|
||||
脚本进本目录。编号形态此后无机器面,判据 = `docs/编号规范.md` §1 的默认答案(2026-10-29 起一律停发)+ §4.1 存量族表 + 评审;
|
||||
留档 `docs/门禁说明/id-check-new.md`(拦下过什么、为什么退、手工怎么再跑)。
|
||||
- **路线与验收条件**:`docs/编号规范.md` §8.5(①②③④ 四步的来龙去脉)。
|
||||
- **规范正文**(仍然有效,只是不再全库机械校验):`docs/编号规范.md` §1 先问三句、§4.1 族总表。
|
||||
- **手工普查与恢复机器面**:`docs/编号规范.md` §8.5(退役流水在 `编号治理历史.md`)。
|
||||
- **规范正文**(仍然有效,只是不再全库机械校验):`docs/编号规范.md` §1 默认答案、§4.1 存量族表。
|
||||
|
||||
## 怎么手工跑一次
|
||||
|
||||
|
||||
@@ -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
|
||||
手工普查与恢复机器面 → docs/编号规范.md §8.5;两道门禁的留档 → docs/门禁说明/id-check.md
|
||||
与 docs/门禁说明/id-check-new.md。
|
||||
下面这份 docstring 是退役前的原样,未改,作为历史口径保留。
|
||||
|
||||
|
||||
@@ -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。
|
||||
**没有机器面**——靠 docs/编号规范.md §1 的默认答案(一律停发)+ 评审。留档说明 → docs/门禁说明/id-check-new.md。
|
||||
本脚本与 check_ids.py(2026-10-28 退役的全库八项校验)同处一档:手工复查「这批改动 / 这段历史
|
||||
里有没有野生编号」时才跑,跑不跑都不影响提交。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user