用户裁定「我不想看到编号」。测试验证层级这一族的整族清退分三道并行:本笔是**代码与 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 接手改完,逐处仍走断言式行内置换。
44 KiB
编号治理历史(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 这四类事故就是上面三条的由来
- 同一字母多义:
P1五义、L1四义、U1四义、D7与元器件位号同形 → 前缀必须按事物类别 分配(§2)。 - 属主文档一删,号全体成孤儿:审计报告删除后,全仓几百处引用再也查不到定义 → 号越少,这种 "集体失效"的爆炸半径越小(§4.5)。
- 语义塞进号里:条目事后降级,改号则引用全断、不改则号实不符 → 号不承载语义(P-2)。
- 销项号被复用:登记簿删行后仓库里毫无痕迹,下一个条目顺手取走同号 → 不回收、不复用, 改用语义标识(短语自带唯一性)。
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 改号操作规程(要动号就照这个走,一步都别省)
- 走
scripts/rename_ids.py:映射表驱动、显式 scope、默认干跑、自动写别名条目; 绝不全局查找替换——同一裸形字面量可能同属多个族(实测S3三义),全局替换等于造新撞号。 - 改完复核所有识别面:
check_ids.py与check_test_traceability.py的候选正则上界都要还能匹配新 形态;判据是"编号字面量总数有没有真的变小"(曾经因为正则上界太窄,改完号静默隐形 339 个)。 - 逐号做语义复核,不能只看 dry-run 命中数:最阴的失效是"字面改对、意思改错"。
- 登记表 / 映射表类文件不得当引用语料,否则自家审计表里的旧形态会被判成新账。
- 收尾重打台账
--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 个族仍有命中站点,其中真编号活引用只剩上面「保留」四行;批次一/二涉及的四个族活引用均已归零。
批次四做了三件事(本轮指令:「把能清的族清掉一批」):
- 关掉已清退族的发号口:
L<n>-<nn>与F-<MOD>-<nn>从docs/编号规范.md§4.1『允许继续发号』整行移出(7 行 → 5 行),在『已停发、存量待清』各补一行硬口径——留着那两行,扫表的人照样照着发号(同TC-*那次的教训)。机器面已探针复核:_check_dangling对「L 段号形态的新号」与「F 条目号形态的新号」各写一个,全部命中docs/编号规范.md§8 校验 3 错误级(台账 0 指纹 → 等于拦提交),所以不需要再冻结数值游标(各段最高号不同,单一数字游标反而放行低号)。 - 本文自述形态化:把本文里 4 处「字母 T 紧跟数字」与 2 处 DRV 段孤儿号的字面量写法改成形态描述(lesson 不丢),使这四个族的门禁命中数真正归零,而不是停在「只有规范自己在引用」。
- 登记机器面还空着的那一面:
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 已经完成的内容请进行销项删除,去除相关编号」。两件事同做:
- 销项:
docs/任务规划/数据可信.mddocs/编号规范.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(含两项残留口径与残差表)。 - 整族清退:「卡」+ 数字 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对其他文档「冻结历史不回改」的约束。 |