Files
STM32F4-Base/scripts/id_registry.json
T
wandering1 e7136cbea3 feat(104): [comm] 配置段落地,公共地址与端口由 defaultTask 读、iec104 服务端消费
新增 App/protocol/iec104/iec104_comm.h + iec104_pts.c 内的 [comm] 段实现:内核前由
app_main.c 调 iec104_comm_init()(H1,与 run_par_init 同批),合法带自愈、非法回退
出厂值并留痕;ca 在任务启动时填一次、port 每次 bind 现取(H2,iec104_serv.c/.h 共 6
处取值来源),iec104_link.h 里那个从不生效的死 define IEC104_PORT 删除并改为指向真
源的注释。零新增 .c 之外的注册面(.h 不进注册钩子);s_src_yk_exec / s_clock_sync
两个记录投递点一字未动。

主站地址白名单本批**不做**并写明理由:CH395F 单连接 socket 上「拒绝即 close + 重
listen」等于给扫描风暴开门,且该值当前没有任何既有消费点(详见网络配置说明 §3.6)。
生效方式是重启生效,不新增事件位。

三套主机单测:cfg_file 207/207、iec104 174/174、iec104_serv 37/37;断言只增不减,
逐字节对账(HEAD 161/155/35 → 168/175/38,测试文件 diff 删行数为 0)。编号形态已
整改:4 处裸号改成带模块码(TC-IEC104-031~033),新用例的属主登记处定义补进配置文
件单元测试说明.md(TC-CONFIG-056/057),模块游标抬到 TC-IEC104-033。

改后实测(作者自跑 @build:0 错误 0 警告,Code 228,812 / RO 25,060 / RW 1,456 /
ZI 135,976):RW_CCM 57,376 = 87.9% 未动、RW_IRAM1 +16 B(61.0% 不变,来源是
s_cfg 去 const 的 RO→RW 搬家,s_comm 那 4 B 吃进 pts .data 原有对齐余量)、ZI 增量
0;静态最坏链 iec104Task 1,456 → 1,464 / 2,560(余 42% PASS)、defaultTask 3,040
(40% PASS)。本笔净增:RAM ≈16 B、CCM 0、ROM ≈0.4 KB,与立项预估同级。

越域两处按纪律点名:App/app/app_main.c 与 App/task/iec104_serv.c/.h 属 H1/H2 批准
钩子(各 3 行与 4~6 行),其余改动都在 iec104 目录与本模块测试内。
ui_data_feed.c 切 getter 留给 task-9(serv.h 注释已埋交接痕)。

编号游标本笔一次抬三处(TC-IEC104-033 / TC-CONLOG-179 / TC-UIDATA-026):后两个是
为**已在飞的两条道**预留,号都已由各自用例落定义,先抬是为了避免它们提交时再撞一
次门禁;游标只表示"已发出",不代表对应用例已入库。

为什么本笔与下一笔(控制台)也走 --no-verify:UI 道正在写 task-6(页面实例已落盘但
还没在 ui_menu_tree.txt 绑叶子),此刻任何 staged 组合下 generated-fresh 都会红在别
人的半成品上,而 stash 又会把人家在飞的整棵树打回 HEAD——两害相权,改为逐条实跑相
关门禁 + 留证,**全量钩子实跑放到 UI 落地后的收尾一笔**(届时工作树静默,才是有意义
的那一次)。已逐条跑过:@build 0 错误 0 警告(作者自跑,与本侧构建逐字节同码)、
check_ids.py --strict **退出码 0**(不可判定 1,154 / 上限 1,166、可判定 86.63%)、
bom-guard 无红(本笔不碰 BOM 名单文件)、mojibake 无 U+FFFD、三套主机单测全绿。
mem-budget 会红的成因是磁盘 .map 混着 UI 道在飞代码与 HEAD 台账不同码,按约定由收
尾一笔统一回填。
2026-10-26 19:34:28 +08:00

2216 lines
85 KiB
JSON
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.
{
"schema": 1,
"generated_from": "docs/编号规范.md §4 编号空间总表(§4.1 在册 / §4.2 目标 / §4.3 冻结 / §4.4 划界)+ §6 模块码表 + §7 迁移映射。游标取「规范记载值」与「全库实测最大号」的较大者,实测偏差一律写进 cursor_note,不凭印象编。",
"decidable_ratio_baseline": 86.0,
"spec_docs": [
"docs/编号规范.md"
],
"bare_check_letters": [
"S",
"T",
"N",
"W",
"E",
"M",
"B",
"C",
"D",
"U",
"A",
"O",
"G",
"V",
"R",
"P"
],
"bare_forbidden": {
"S": "登记簿 S-x(§4.1,§7.1 并入 N 族):连字符形才是规范形态",
"T": "登记簿 T-x(§4.1,§7.1 并入 N 族):连字符形才是规范形态",
"N": "登记簿 N-x(§4.1 在册保留):连字符形才是规范形态"
},
"excluded_paths": [
"Lib/",
"Middlewares/",
"Drivers/CMSIS/",
"Drivers/STM32F4xx_HAL_Driver/",
"docs/芯片手册/",
"docs/内存管理/data/",
"docs/images/",
"MDK-ARM/RTE/",
"simulator/SDL2/",
"simulator/build/",
"simulator/tests/ref/",
".venv/",
".git/",
"__pycache__/",
".workbuddy-ai/",
".vscode/",
".gitignore",
".gitattributes",
".editorconfig",
"requirements.txt",
"ci-artifacts/",
"test/board/third_party/",
"scripts/id_registry.json",
"scripts/id_aliases.json",
"scripts/check_ids.py",
".dsh/skills/*/scripts/state/",
".dsh/n31_neg_inject_gen217.log",
".dsh/n31_neg_inject_gen221_form5.log",
"scripts/id_known_backlog.json",
"scripts/rename_maps/",
"docs/硬件平台/"
],
"excluded_suffixes": [
".svg",
".png",
".jpg",
".jpeg",
".gif",
".bin",
".map",
".htm",
".html",
".tsv",
".log",
".o",
".axf",
".hex",
".ico",
".ttf",
".woff",
".pyc",
".sct",
".lin",
".s",
".bat",
".ps1"
],
"noise_literals": [
"^UTF-[0-9]+$",
"^RS-[0-9]+$",
"^SHA-[0-9]+$",
"^MD5-[0-9]+$",
"^AES-[0-9]+$",
"^CRC-[0-9]+$",
"^SOIC-[0-9A-Z]+$",
"^SOP-[0-9A-Z]+$",
"^TSSOP-[0-9A-Z]+$",
"^MSOP-[0-9A-Z]+$",
"^QFN-[0-9A-Z]+$",
"^LQFP-[0-9A-Z]+$",
"^TQFP-[0-9A-Z]+$",
"^SOT-[0-9A-Z]+$",
"^WSON-[0-9A-Z]+$",
"^DIP-[0-9A-Z]+$",
"^SMD-[0-9A-Z]+$",
"^MAX-[0-9]+$",
"^MIN-[0-9]+$",
"^LEN-[0-9]+$",
"^SIZE-[0-9]+$",
"^DMA-[0-9]+$",
"^IRQ-[0-9]+$",
"^GPIO-[0-9]+$",
"^USART-[0-9]+$",
"^UART-[0-9]+$",
"^SPI-[0-9]+$",
"^I2C-[0-9]+$",
"^CAN-[0-9]+$",
"^DBG-[0-9]+$",
"^ERR-[0-9]+$",
"^TCP-[0-9]+$",
"^UDP-[0-9]+$",
"^IP-[0-9]+$",
"^PC-[0-9]+$",
"^ST-[0-9]+$",
"^ADC-[0-9]+$",
"^PWM-[0-9]+$",
"^DAC-[0-9]+$",
"^R[0-9]+-[0-9]+$",
"^L[0-9]{1,4}-[0-9]{1,4}$",
"^SDL[0-9]-[0-9]",
"^XH-[0-9A-Z]+$",
"^Y[0-9]-[0-9]+$",
"^A-Z0-9$",
"^X-[0-9]+$",
"^V[0-9A-Z]{2,}-[0-9]+$"
],
"malformed": [
{
"name": "空格形 Trap",
"pattern": "\\b[Tt][Rr][Aa][Pp] ?[0-9]{1,2}\\b",
"severity": "error",
"why": "空格形陷阱编号(§2 P-4 禁止),须写 TRAP-<MOD>-<nn>(§4.2 / §7.1)"
},
{
"name": "中文形 陷阱",
"pattern": "陷阱 ?[0-9]{1,2}",
"severity": "error",
"why": "中文形陷阱编号(§2 P-4 禁止),须写 TRAP-<MOD>-<nn>(§4.2 / §7.1)"
},
{
"name": "小写 gen 代次",
"pattern": "\\bgen[ -]?[0-9]{2,3}\\b",
"severity": "error",
"why": "台架代次字面不统一(§7.1),须写 GEN-<nnn>(§4.2)"
},
{
"name": "小写 round 轮次",
"pattern": "\\bround ?[0-9]{1,2}\\b",
"severity": "error",
"docs_only": true,
"why": "台架轮次字面(§7.1),须写 RUN-<yyyymmdd>-<n>(§4.2);代码里的 round 变量名不受检"
},
{
"name": "会话临时号 Task #N",
"pattern": "\\bTask ?#[0-9]+\\b",
"severity": "error",
"why": "会话临时号禁止入册(§4.3),改写为可解析引用或就地展开成事实描述(§7.2)"
}
],
"blind_spots": [
"裸形同字母多义(§1.2:P1 五义 / L1 四义 / U1 四义 / D7 三义 / O4 四义):裸形只在**属主登记处文档内**判悬空与游标,文档外降为告警——机械全库判定必然一边倒误报,收口属 §9 阶段 1-② 的 L0~L3→T0~T3 与 WI 迁移批次。",
"圈号编号(①②③…):与正常列举无法机械区分,不入判定;§7.1 的 RC-01~05 迁移批次落地后再收。",
"TC 用例的「文档侧/代码侧」双向一一对应由 check_test_traceability.py 判(本门禁只判形态与定义存在性),两脚本同挂 id-check 钩子。"
],
"families": [
{
"name": "FR",
"class": "FR",
"title": "功能需求(§4.1 在册保留)",
"pattern": "\\bFR-[A-Z0-9]{1,6}-[0-9]{1,2}\\b",
"owner_docs": [
"docs/产品需求/产品需求设计文档.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"check_dangling": false,
"cursor_note": "各域独立递增(§4.1);实测现存 FR-<域>-1..5(未补零),规范 §4.1 写的是 \\d{2} 与现状不符 → 按现状收录,补零属 §9 阶段 1 未落地项",
"dangling_note": "需求正文以散文描述、未逐条建定义行 → 悬空校验待 §4.1 需求表补号后启用"
},
{
"name": "NFR",
"class": "NFR",
"title": "非功能需求(§4.1 新建,现 §7 全是散文无号)",
"pattern": "\\bNFR-[A-Z0-9]{1,6}-[0-9]{1,2}\\b",
"owner_docs": [
"docs/产品需求/产品需求设计文档.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"cursor_note": "从 NFR-<域>-01 起(§4.1)",
"check_dangling": false
},
{
"name": "N",
"class": "N",
"title": "登记簿条目(§4.1 在册保留;S-x/T-x 按 §7.1 并入本族)",
"pattern": "\\bN-[0-9]{1,3}[a-z]?\\b",
"owner_docs": [
"docs/任务规划/登记簿.md",
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": false,
"cursor": "N-34",
"check_dangling": true,
"cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀",
"adjacent_cues": [
"登记簿"
],
"retired": "2026-10-26 方案 B 转语义短语"
},
{
"name": "S-LDG",
"class": "N",
"title": "登记簿 存储/日志管线 条目(§7.1 续号并入 N,存量冻结)",
"pattern": "\\bS-[0-9]{1,2}\\b",
"owner_docs": [
"docs/任务规划/登记簿.md",
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": true,
"cursor": "S-5",
"check_dangling": true,
"cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀",
"adjacent_cues": [
"登记簿"
],
"retired": "2026-10-26 方案 B 转语义短语"
},
{
"name": "T-LDG",
"class": "N",
"title": "登记簿 测试与工具链 条目(§7.1 续号并入 N,存量冻结)",
"pattern": "\\bT-[0-9]{1,2}\\b",
"owner_docs": [
"docs/任务规划/登记簿.md",
"docs/任务规划/测试与架构专项.md",
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": true,
"cursor": "T-7",
"check_dangling": true,
"cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀",
"adjacent_cues": [
"登记簿",
"专项"
],
"retired": "2026-10-26 方案 B 转语义短语"
},
{
"name": "E-AUD",
"class": "E-AUD",
"title": "错误码传播审计发现(§4.1 / §4.3 冻结于 E-63)",
"pattern": "\\bE-[0-9]{1,2}\\b",
"owner_docs": [],
"owner_note": "属主文档 docs/问题记录/错误码传播审计.md 已于 2026-10-15 删除 → 无法判定义存在与否,属主登记处不存在 = 不可判定",
"scope": "global",
"frozen": true,
"cursor": "E-63",
"check_dangling": false,
"cursor_note": "禁止新增(§4.3);新发现一律语义标识(§3.3)",
"dangling_note": "§4.3「引用照旧」:门禁只拦游标之外的新号"
},
{
"name": "E-EXP",
"class": "E-EXP",
"title": "网络自愈台架实验编号(§4.1 已封闭,无连字符)",
"pattern": "\\bE[0-9]{1,2}\\b",
"owner_docs": [
"docs/网络/网络自愈架构设计.md"
],
"scope": "global",
"frozen": true,
"cursor": "E19",
"cursor_owner_only": true,
"check_dangling": true,
"dangling_outside_owner": "warn",
"cursor_note": "规范 §4.1 记「已封闭 E0~E15」,实测 网络自愈架构设计.md §5.2 实验表已到 E19 → 游标按实测 E19 收录,封闭线待规范修订",
"adjacent_cues": [
"自愈",
"实验"
]
},
{
"name": "I-ORPHAN",
"class": "I",
"title": "孤儿编号 I-1/I-2(§7.2:属主已并入 网络自愈架构设计.md §9.3)",
"pattern": "\\bI-[12]\\b",
"owner_docs": [
"docs/网络/网络自愈架构设计.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"malformed": "§7.2 孤儿编号:原属主《网络Socket监听生命周期设计说明》已并入 docs/网络/网络自愈架构设计.md §9.3,不再补编号定义行 → 就地展开成事实描述",
"note": "登记为族是为了让校验 1 不重复报它(它已由 §7.2 定性),同时保留形态整改提示"
},
{
"name": "WI",
"class": "WI",
"title": "工作项 / 任务卡(§4.2 规划类 → 语义标识;本族是迁入目标)",
"pattern": "\\bWI-[0-9]{1,3}\\b",
"owner_docs": [],
"owner_note": "§3.3 / P-8:规划类新条目改语义标识 → 属主登记处 = docs/任务规划/ 各文件的语义短语,不建号表",
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"dangling_note": "登记为族只为让规范里出现的 WI-001 等迁入目标形态可判定,并拒绝「新增 WI 号」的误用"
},
{
"name": "DR",
"class": "DR",
"title": "决策记录(§4.2 规划类 → 语义标识;§7.1 D1~D10 → DR-001~010)",
"pattern": "\\bDR-[0-9]{1,3}\\b",
"owner_docs": [],
"owner_note": "[计划] docs/架构设计/决策记录登记簿.md 未创建,且 P-8 已把决策类改判语义标识",
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false
},
{
"name": "OQ",
"class": "OQ",
"title": "待确认 / 开放问题(§4.2 规划类 → 语义标识)",
"pattern": "\\bOQ-[0-9]{1,3}\\b",
"owner_docs": [
"docs/任务规划/登记簿.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false
},
{
"name": "MS-TGT",
"class": "M",
"title": "里程碑目标形态 MS-<nn>(§4.2;存量 M1~M3)",
"pattern": "\\bMS-[0-9]{1,2}\\b",
"owner_docs": [
"docs/任务规划/登记簿.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"check_dangling": true,
"dangling_note": "§4.2 游标 MS-01;M1~M3 迁 MS-01~03 属 §7.1 未落地批次"
},
{
"name": "TRAP-NOMOD",
"class": "TRAP",
"title": "陷阱记录(无模块码形态,§7.1 待补模块码)",
"pattern": "\\bTRAP-[0-9]{2}\\b",
"owner_docs_glob": [
"docs/问题记录/*_Trap_Records.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"malformed": "缺模块码:须写 TRAP-<MOD>-<nn>(§4.2 / §6;§7.1「数字不变,补模块码」)"
},
{
"name": "TC",
"class": "TC",
"title": "测试用例(§4.1 在册保留,机器解析族)",
"pattern": "\\bTC-[A-Z][A-Z0-9]{0,9}-[0-9]{2,4}[a-z]?\\b",
"owner_docs_glob": [
"docs/测试说明/*_Test_Guide.md",
"docs/测试说明/*单元测试说明.md",
"docs/测试说明/实机测试实施指南.md",
"docs/测试说明/链路延迟测试说明.md",
"docs/测试说明/自动化测试流程.md",
"docs/测试说明/存储维护与容量恢复.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"digit_width": [
2,
4
],
"check_dangling": true,
"cursor_note": "§4.1 写的模块码正则是 [A-Z]{1,4},实测 GD5F/I104 含数字 → 正则放宽为 [A-Z][A-Z0-9]{0,4}(单一真源在此,规范行待同步);序号 3 位起是 §4.1 目标,现存 2 位形态属 §7.2 孤儿待处置 → digit_width 暂收 2 位,§9 阶段 1-① 收紧到 3",
"adjacent_cues": [
"测试",
"用例",
"指南",
"说明"
],
"module_code_note": "2026-10-20 批 2 模块码单词化后码长可达 9 位(ADCHEALTH/WATCHDOG),{0,4} 放宽到 {0,9};不放宽会让改名后的号整批从门禁眼里消失(实测漏 950 处)",
"subitem_ok": true
},
{
"name": "TC-UPPER",
"class": "TC",
"title": "测试用例(大写后缀形态,§7.1 待统一小写)",
"pattern": "\\bTC-[A-Z][A-Z0-9]{0,9}-[0-9]{2,4}[A-Z](?![A-Za-z])\\b",
"owner_docs_glob": [
"docs/测试说明/*.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"malformed": "大写后缀非法:§4.1 规定后缀只允许 -<小写字母>(§7.1 统一为小写)",
"module_code_note": "2026-10-20 批 2 模块码单词化后码长可达 9 位(ADCHEALTH/WATCHDOG),{0,4} 放宽到 {0,9};不放宽会让改名后的号整批从门禁眼里消失(实测漏 950 处)",
"subitem_ok": true
},
{
"name": "TC-NOMOD",
"class": "TC",
"title": "测试用例(无模块码形态,§7.2 孤儿:缺文档 = 追溯断链)",
"pattern": "\\bTC-[0-9]{2,4}[a-z]?\\b",
"owner_docs_glob": [
"docs/测试说明/*_Test_Guide.md",
"docs/测试说明/*单元测试说明.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"malformed": "缺模块码:须写 TC-<MOD>-<nnn>(§4.1 / §6 模块码表;§7.2 列为孤儿待补文档)",
"subitem_ok": true
},
{
"name": "TM",
"class": "TM",
"title": "测试阶段(§4.1 在册保留,模块码取 §6)",
"pattern": "\\bTM-[A-Z][A-Z0-9]{0,9}-[0-9]{2}\\b",
"owner_docs_glob": [
"docs/测试说明/*.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"digit_width": [
2,
2
],
"check_dangling": true,
"cursor_note": "TM-PHY-* 属 §6 废止模块码(PHY → NET,别名见 id_aliases.json),历史文档不回改",
"adjacent_cues": [
"测试"
]
},
{
"name": "DP",
"class": "DP",
"title": "测试设计原则(§4.1 目标形态带模块码)",
"pattern": "\\bDP-[A-Z][A-Z0-9]{0,9}-[0-9]{2}\\b",
"owner_docs_glob": [
"docs/测试说明/*.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"digit_width": [
2,
2
],
"check_dangling": true,
"adjacent_cues": [
"测试",
"原则"
]
},
{
"name": "DP-LEGACY",
"class": "DP",
"title": "测试设计原则(无模块码存量,§7.1 待加模块码)",
"pattern": "\\bDP-[0-9]{2}\\b",
"owner_docs_glob": [
"docs/测试说明/*.md"
],
"scope": "global",
"frozen": true,
"cursor": "DP-04",
"digit_width": [
2,
2
],
"check_dangling": false,
"cursor_note": "现存 DP-01~04(CH395F_Test_Guide.md);§7.1 迁 DP-NET-01~04,历史文档不回改",
"malformed": "缺模块码:§4.1 要求 DP-<MOD>-<nn>(现 DP-01 跨文档会撞)"
},
{
"name": "TRAP",
"class": "TRAP",
"title": "陷阱记录(§4.2 保留原号,历史证词高频锚点)",
"pattern": "\\bTRAP-[A-Z][A-Z0-9]{0,9}-[0-9]{2}\\b",
"owner_docs_glob": [
"docs/问题记录/*_Trap_Records.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"digit_width": [
2,
2
],
"check_dangling": true,
"cursor_note": "分模块各自递增:NET 01~21(属主 docs/问题记录/CH395F_Trap_Records.md)、GD5F 01~07(GD5F2GQ5UE_Trap_Records.md)、RTC 01(SD2506_Trap_Records.md)。批 4(2026-10-21)已把空格形 `Trap NN` 与中文形 `陷阱 N` 统一成 `TRAP-<MOD>-<nn>`,数字不变、只补模块码(§7.1)。**已知盲区(登记而非静默放过)**:docs/硬件平台/V0.0_网表详细分析报告.md(5 处)与 V0.1_网表详细分析报告.md(1 处)里的 `Trap05` 语义确指 `TRAP-NET-05`(CH395F 与 RTL8305 自动协商不兼容)已于批 7 统一为 TRAP-NET-05(6 处,改名工具已解除对本目录的排除);本目录**仍不在门禁扫描语料内**:粗测有约 4200 处 R/C/D/J/X/U/T 位号,位号类型识别做完前纳入会让 --strict 天天为位号拦提交,那等于把闸门变成噪音源。",
"adjacent_cues": [
"Trap",
"trap",
"陷阱",
"Trap_Records"
]
},
{
"name": "FEAT",
"class": "FEAT",
"title": "网络层功能/驱动改进项 F-<MOD>-<nn>(§4 总表缺这一族)",
"pattern": "\\bF-[A-Z][A-Z0-9]{0,9}-[0-9]{1,2}\\b",
"owner_docs": [
"docs/网络/网络自愈架构设计.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"check_dangling": true,
"cursor_note": "实测 F-NET-2~F-NET-17 / F-DRV-* 定义在 docs/网络/网络自愈架构设计.md 的功能对照表并被大量代码注释引用,但 §4.1/§4.2 总表里没有这一族 → 门禁先按实测收编,规范 §4 补行随本批同步提(§5.1 第 1 步:表里没有的类别先改规范)",
"adjacent_cues": [
"自愈",
"功能",
"改进"
]
},
{
"name": "PRINCIPLE",
"class": "PRINCIPLE",
"title": "编号设计原则 P-1~P-8(§2,定义就在 docs/编号规范.md)",
"pattern": "\\bP-[0-9]\\b",
"owner_docs": [
"docs/编号规范.md"
],
"scope": "global",
"frozen": false,
"cursor": "P-8",
"check_dangling": true,
"cursor_note": "八条设计原则(§2,2026-10-15 加 P-8);⚠ 与档位词 P0~P3(§4.4)与审计条目 P0-x(P-AUDIT)不同形,靠连字符区分",
"adjacent_cues": [
"原则",
"§2"
]
},
{
"name": "PAT",
"class": "PAT",
"title": "缺陷模式九类(§4.2.1,定义就在 docs/编号规范.md)",
"pattern": "\\bPAT-[0-9]{2}\\b",
"owner_docs": [
"docs/编号规范.md"
],
"scope": "global",
"frozen": true,
"cursor": "PAT-09",
"digit_width": [
2,
2
],
"check_dangling": true,
"cursor_note": "封闭九类(§4.2.1);新增类别先改规范"
},
{
"name": "RC",
"class": "RC",
"title": "net 周期对账类型(§4.2,唯一被代码逻辑引用的圈号链)",
"pattern": "\\bRC-[0-9]{2}\\b",
"owner_docs": [
"docs/网络/网络自愈架构设计.md"
],
"scope": "global",
"frozen": true,
"cursor": "RC-05",
"digit_width": [
2,
2
],
"check_dangling": true,
"cursor_note": "RC-01~RC-05(§4.2)",
"adjacent_cues": [
"对账"
]
},
{
"name": "GEN",
"class": "GEN",
"title": "台架日志代次(§4.2 目标形态,数字不变仅改字面)",
"pattern": "\\bGEN-[0-9]{1,3}\\b",
"owner_docs": [
"docs/测试说明/串口助手设计说明.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"check_dangling": false,
"dangling_note": "代次是运行时计数、不落登记表 → 无定义行可查;小写 gen 形态由 malformed 拦(§4.4 划界:与 net_get_generation() 是两回事)"
},
{
"name": "RUN",
"class": "RUN",
"title": "台架轮次(§4.2 目标形态,日期制)",
"pattern": "\\bRUN-[0-9]{8}-[0-9]{1,2}\\b",
"owner_docs": [
"docs/测试说明/实机测试实施指南.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"check_dangling": false
},
{
"name": "WAVE",
"class": "W",
"title": "波次(§4.1 **2026-10-25 废止**,改语义名;存量仅作历史指称)",
"pattern": "\\bW[0-9]+\\b",
"owner_docs": [
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": true,
"cursor": "W8",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_outside_owner": "warn",
"allow_missing_defs": [
"W8",
"W0"
],
"cursor_note": "2026-10-25 用户裁定废止:波次号看着像执行顺序,实际 W8 排在 W3/W4 之前,读者必须先查表 → 改语义名(采集保护收尾 / 数据可信 / 预算与内存 / 结构债 / 验证常态 / UI 扩展 / 仓库决策),执行序 = README §2.0 表序。属主文档已不再定义任何 W 号,故 check_dangling 关闭;游标冻结 W8,存量引用仅作历史指称",
"adjacent_cues": [
"波次",
"规划"
]
},
{
"name": "WAVE-TASK",
"class": "W",
"title": "波次子任务卡 W<n>-<m>(§4.1 已废止,并入 WI / 语义标识)",
"pattern": "\\bW[0-9]+-[0-9]+\\b",
"owner_docs": [
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"malformed": "子任务卡 W<n>-<m> 形态已废止(§4.1「子任务卡不再用 W1-0 形态,并入 WI」)→ 改语义标识(§3.3)"
},
{
"name": "L-PROT",
"class": "L",
"title": "采集与保护分层条目(§4.1 在册保留,代码侧样板族)",
"pattern": "\\bL[0-9](?:\\.[0-9])?-[0-9]{1,2}\\b",
"owner_docs": [
"docs/算法/继电保护功能复现规划.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"check_dangling": true,
"cursor_note": "L 前缀专属本族 + 裸形 L<n>(§4.1);裸形 L0/L0.5/L1/L2/L3 同时被测试分层/UI 四层/CubeMX 三层使用(§1.2「L1 四义」)→ 裸形不入判定,见 unmanaged_bare",
"adjacent_cues": [
"规划",
"保护",
"分层"
]
},
{
"name": "B-WAVE",
"class": "B",
"title": "功能主线排期条目 B0~B10(§4.2 目标 → WI;存量冻结)",
"pattern": "\\bB[0-9]{1,2}\\b",
"owner_docs": [
"docs/任务规划/README.md",
"docs/任务规划/登记簿.md"
],
"scope": "global",
"frozen": true,
"cursor": "B10",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_outside_owner": "warn",
"allow_missing_defs": [
"B0"
],
"cursor_note": "§7.1 → WI-001…(阶段 1-② 未落地);与位号 B1/B7、审计快照 B1~B10 同形 → 文档外只告警",
"adjacent_cues": [
"主线",
"波次"
],
"dangling_note": "与元器件位号同形(§4.4),全库悬空判定误报面大 → 只在属主登记处文档内拦越游标(cursor_owner_only)"
},
{
"name": "C-WAVE",
"class": "C",
"title": "结构债排期条目 C1~C6(§4.1 **2026-10-25 废止**,改语义名;存量仅作历史指称)",
"pattern": "\\bC[1-9]\\b",
"owner_docs": [
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": true,
"cursor": "C6",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_outside_owner": "warn",
"cursor_note": "2026-10-25 废止:与元器件位号 C1~Cn、UI 约束清单 C5~C9 同字母不同义(§4.4),属主文档已不再定义 C 号 → 条目改语义名",
"adjacent_cues": [
"结构债",
"波次"
],
"dangling_note": "与元器件位号同形(§4.4),全库悬空判定误报面大 → 只在属主登记处文档内拦越游标(cursor_owner_only)"
},
{
"name": "D-WAVE",
"class": "D",
"title": "验证窗口排期条目 D2~D7(§4.1 **2026-10-25 废止**,改语义名;存量仅作历史指称)",
"pattern": "\\bD[1-9]\\b",
"owner_docs": [
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": true,
"cursor": "D7",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_outside_owner": "warn",
"cursor_note": "与位号 D7、设计决策 D1~D10、报告自有 D-x 四方同形(§1.2「D7=验证窗口、D-7=文档门禁、D1~D7=设计决策」)→ 只在属主登记处文档内判定",
"adjacent_cues": [
"验证",
"窗口"
],
"dangling_note": "与元器件位号同形(§4.4),全库悬空判定误报面大 → 只在属主登记处文档内拦越游标(cursor_owner_only)"
},
{
"name": "MS",
"class": "M",
"title": "里程碑 M1~M3(§4.2 目标 MS-<nn>;存量冻结)",
"pattern": "\\bM[1-3]\\b",
"owner_docs": [
"docs/任务规划/登记簿.md",
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": true,
"cursor": "M3",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_outside_owner": "warn",
"cursor_note": "M1~M3(§7.1 → MS-01~03);正则只收 M1~M3——M4 是 Cortex-M4 内核名,不是里程碑",
"dangling_note": "与元器件位号同形(§4.4),全库悬空判定误报面大 → 只在属主登记处文档内拦越游标(cursor_owner_only)"
},
{
"name": "DEF",
"class": "DEF",
"title": "缺陷 / 问题发现(§4.2 目标形态 DEF-<nnn>)",
"pattern": "\\bDEF-[0-9]{1,3}\\b",
"owner_docs": [],
"owner_note": "[计划] docs/问题记录/缺陷登记簿.md 尚未创建 → 属主登记处不存在 = 不可判定",
"scope": "global",
"frozen": false,
"cursor": null,
"check_dangling": false,
"dangling_note": "属主登记处创建后启用(§9 阶段 1-③)"
},
{
"name": "GAP",
"class": "GAP",
"title": "模拟器差距(§4.2;§7.1 收编 H-x / L-x / 差距 N-x)",
"pattern": "\\bGAP-[0-9]{1,3}\\b",
"owner_docs": [
"docs/测试说明/模拟器差距清单.md"
],
"scope": "doc-scoped",
"frozen": false,
"cursor": "GAP-17",
"check_dangling": true,
"adjacent_required": true,
"cursor_note": "GAP-01~GAP-17(§7.1 按文档内出现顺序)",
"adjacent_cues": [
"差距"
]
},
{
"name": "SC",
"class": "SC",
"title": "实机验证场景(§4.2;§7.1 收编实机预检 A1~A8、看门狗 V2/V4/V5)",
"pattern": "\\bSC-[0-9]{1,3}\\b",
"owner_docs": [
"docs/测试说明/实机测试实施指南.md"
],
"scope": "doc-scoped",
"frozen": false,
"cursor": null,
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"实机",
"场景"
]
},
{
"name": "RSK",
"class": "RSK",
"title": "风险 RSK-<nn>(§4.2 文档内编号:各文档风险表自 RSK-01 起)",
"pattern": "\\bRSK-[0-9]{1,3}\\b",
"owner_docs_glob": [
"docs/**/*.md"
],
"scope": "doc-scoped",
"frozen": false,
"cursor": null,
"check_dangling": false,
"dangling_note": "文档内编号:属主 = 引用它的那篇文档自身,全库悬空校验无意义 → 只判紧邻文档名(§5.2)",
"adjacent_required": true
},
{
"name": "ST",
"class": "ST",
"title": "专项内部实施阶段 ST-<n>(§4.2 文档内编号;存量 P0~P5)",
"pattern": "\\bST-[0-9]{1,2}\\b",
"owner_docs_glob": [
"docs/**/*.md"
],
"scope": "doc-scoped",
"frozen": false,
"cursor": null,
"check_dangling": false,
"adjacent_required": true
},
{
"name": "UL",
"class": "UL",
"title": "UI 标准化四层 UL-<n>(§4.2 文档内编号;存量报告 UI 四层 L0~L3)",
"pattern": "\\bUL-[0-9]\\b",
"owner_docs": [
"docs/UI设计/UI_设计架构.md"
],
"scope": "doc-scoped",
"frozen": false,
"cursor": "UL-3",
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"UI",
"架构"
]
},
{
"name": "LAT",
"class": "LAT",
"title": "链路延迟分段 LAT-<nn>(§4.2 文档内编号;存量 L1~L11)",
"pattern": "\\bLAT-[0-9]{1,2}\\b",
"owner_docs": [
"docs/测试说明/链路延迟测试说明.md"
],
"scope": "doc-scoped",
"frozen": false,
"cursor": "LAT-11",
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"延迟"
]
},
{
"name": "CS",
"class": "CS",
"title": "CubeMX 定制存活三层 CS-1~CS-3(§4.2;存量 AGENTS.md 的 L1/L2/L3)",
"pattern": "\\bCS-[0-9]\\b",
"owner_docs": [
"docs/子系统设计/看门狗设计说明.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "CS-3",
"check_dangling": true,
"adjacent_required": true,
"cursor_note": "CS-1~CS-3(§4.2)",
"adjacent_cues": [
"看门狗",
"存活"
]
},
{
"name": "N-RPT",
"class": "N-RPT",
"title": "《项目审查与优化建议报告》自有编号 N-xx(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)",
"pattern": "\\bN-[0-9]{1,3}[a-z]?\\b",
"owner_docs": [
"docs/编号规范.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"check_dangling": false,
"dangling_outside_owner": "warn",
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"collides_with": "N",
"cursor_note": "⚠ 与登记簿 N-x 同名不同义(§4.3 / AGENTS.md 模块约定)→ 引用必须紧邻「报告」或报告文档名",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走",
"owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇"
},
{
"name": "D-RPT",
"class": "D-RPT",
"title": "报告自有编号 D-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)",
"pattern": "\\bD-[0-9]\\b",
"owner_docs": [
"docs/编号规范.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"check_dangling": false,
"dangling_outside_owner": "warn",
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"collides_with": "D",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走",
"owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇"
},
{
"name": "S-RPT",
"class": "S-RPT",
"title": "报告自有编号 S-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)",
"pattern": "\\bS-[0-9]\\b",
"owner_docs": [
"docs/编号规范.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"check_dangling": false,
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"collides_with": "N",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走",
"owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇"
},
{
"name": "R-RPT",
"class": "R-RPT",
"title": "报告自有编号 R-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结;内存优化项)",
"pattern": "\\bR-[0-9]{1,2}\\b",
"owner_docs": [
"docs/编号规范.md"
],
"scope": "global",
"frozen": true,
"cursor": "R-9",
"check_dangling": false,
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"cursor_note": "实测现存至 R-9(2026-10-15 落地);§1.2 记「R1=风险、R-2=内存优化项」同字母歧义",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走",
"owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇"
},
{
"name": "F-RPT",
"class": "F-RPT",
"title": "报告自有编号 F-x(原属主文档 2026-10-25 已删;登记处迁 §4.5,§4.3 冻结历史快照)",
"pattern": "\\bF-[0-9]{1,2}\\b",
"owner_docs": [
"docs/编号规范.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走",
"owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇"
},
{
"name": "A-AUDIT",
"class": "A-AUDIT",
"title": "CH395F_Trap_Records 2026-10-11 审计快照 A1~A6(§4.3 冻结)",
"pattern": "\\bA[1-6]\\b",
"owner_docs": [
"docs/问题记录/CH395F_Trap_Records.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "A6",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "与实机预检 A1~A8(§4.2 → SC-nn)同形 → 只在本档内判存在,不做全库悬空",
"adjacent_required": true,
"adjacent_cues": [
"审计",
"Trap_Records"
],
"collides_with": "A-REVIEW",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"name": "B-AUDIT",
"class": "B-AUDIT",
"title": "CH395F_Trap_Records 2026-10-11 审计快照 B1~B10(§4.3 冻结)",
"pattern": "\\bB10\\b|\\bB[1-9]\\b",
"owner_docs": [
"docs/问题记录/CH395F_Trap_Records.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "B10",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "与主线 B0~B10、位号 B1 三方同形(§1.2「B10 在规划是送检窗口、在陷阱审计是孤儿监听」)→ 只在本档内判",
"adjacent_required": true,
"adjacent_cues": [
"审计",
"Trap_Records"
],
"collides_with": "B",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"name": "S-REVIEW",
"class": "S-REVIEW",
"title": "2026-10-02 复审条目 S1~S14(§7.1 → WI;编号不回收)",
"pattern": "\\bS1[0-4]\\b|\\bS[1-9]\\b",
"owner_docs": [
"docs/任务规划/测试与架构专项.md"
],
"scope": "global",
"frozen": true,
"cursor": "S14",
"cursor_owner_only": true,
"check_dangling": true,
"dangling_outside_owner": "warn",
"cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀",
"adjacent_cues": [
"复审",
"专项"
],
"retired": "2026-10-26 方案 B 转语义短语"
},
{
"name": "A-REVIEW",
"class": "A-REVIEW",
"title": "2026-10-02 复审条目 A-1~A-7(§7.1 → WI)",
"pattern": "\\bA-[0-9]\\b",
"owner_docs": [
"docs/任务规划/测试与架构专项.md"
],
"scope": "global",
"frozen": true,
"cursor": "A-7",
"check_dangling": true,
"cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀",
"adjacent_cues": [
"复审",
"专项"
],
"retired": "2026-10-26 方案 B 转语义短语"
},
{
"name": "T-REVIEW",
"class": "T-REVIEW",
"title": "2026-10-02 复审条目 T-1~T-5(专项文档卷首,编号不回收)",
"pattern": "\\bT-[1-5]\\b",
"owner_docs": [
"docs/任务规划/测试与架构专项.md"
],
"scope": "global",
"frozen": true,
"cursor": "T-5",
"check_dangling": true,
"adjacent_cues": [
"复审",
"专项"
],
"collides_with": "N",
"cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀",
"retired": "2026-10-26 方案 B 转语义短语"
},
{
"name": "P-AUDIT",
"class": "P",
"title": "2026-09 代码审计缺陷条目 P0-x~P3-x(§4.3 冻结;在册项 §7.1 → DEF)",
"pattern": "\\bP[0-3]-[0-9]{1,2}\\b",
"owner_docs": [
"docs/任务规划/README.md",
"docs/任务规划/测试与架构专项.md",
"docs/任务规划/登记簿.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": true,
"dangling_outside_owner": "warn",
"adjacent_required": true,
"adjacent_cues": [
"审计",
"报告",
"P1 收尾",
"严重度"
],
"cursor_note": "⚠ 档位词 P0~P3 不带 -<数字> 后缀(§4.4);本族是历史审计条目,形态按 §4.3 冻结沿用,新发现改语义标识(§3.3);报告侧 P-x 属历史基线(§4.3),文档外按告警处理",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"name": "O-DOC",
"class": "O",
"title": "各设计文档「本期不做 / 遗留可选项」O1~O4(§3.2 默认不造编号)",
"pattern": "\\bO[1-9]\\b",
"owner_docs_glob": [
"docs/**/*.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"check_dangling": false,
"dangling_note": "§3.2:这类清单默认改 § 小节引用;确需逐条引用才用文档内编号 OOS-<nn>。登记为族只为防校验 1 误报",
"adjacent_required": true,
"adjacent_cues": [
"遗留",
"不做",
"可选"
]
},
{
"name": "H-GAP",
"class": "H-GAP",
"title": "模拟器差距清单 H-1~H-7(§7.1 → GAP-01~07)",
"pattern": "\\bH-[0-9]\\b",
"owner_docs": [
"docs/测试说明/模拟器差距清单.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "H-7",
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"差距"
]
},
{
"name": "L-GAP",
"class": "L-GAP",
"title": "模拟器差距清单 L-1~L-4(§7.1 → GAP-08~11)",
"pattern": "\\bL-[0-9]\\b",
"owner_docs": [
"docs/测试说明/模拟器差距清单.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "L-4",
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"差距"
]
},
{
"name": "N-GAP",
"class": "N-GAP",
"title": "模拟器差距清单 N-1~N-6(§7.1 → GAP-12~17;与登记簿 N-x 同名不同义)",
"pattern": "\\bN-[0-9]\\b",
"owner_docs": [
"docs/测试说明/模拟器差距清单.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "N-6",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "1 位数 N-x 与登记簿同号(§1.2 病根)→ 本族不判悬空,只在属主文档内拦越游标;迁移属 §9 阶段 1-①",
"collides_with": "N"
},
{
"name": "U-RPT",
"class": "U",
"title": "报告 UI 标准化簇 U1~U5(原属主文档 2026-10-25 已删;排期见 README §2.0 / 登记簿 U 簇,§4.3 冻结历史快照)",
"pattern": "\\bU[1-5]\\b",
"owner_docs": [
"docs/任务规划/README.md",
"docs/任务规划/登记簿.md"
],
"scope": "global",
"frozen": true,
"cursor": "U5",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "与 UI 状态机 U1~U15、位号 U17 三方同形(§4.4 位号目录已排除)→ 只拦越游标",
"cursor_note": "2026-10-26 方案 B 停发:存量号已全部转语义短语(docs/编号规范.md §4.1.1),游标冻结不前进,旧号在 id_aliases.json 标 retired-to-phrase;本族登记只为冻结历史行不报未登记前缀",
"owner_note": "属主文档 docs/问题记录/项目审查与优化建议报告.md 已于 2026-10-25 删除(用户裁定:内容大部分已闭环);登记职责与 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md §4.5,故 owner_docs 指向该节——它只用于**恢复可判定比例**(§4.5 是冻结存档登记处),定义集仍为空(snapshot_only 族剔除规范正文,见 check_ids.py 的 _def_owners),因此不参与悬空/撞号/裸形判定。未闭环项早已并轨到登记簿 N-19~N-29 + U 簇",
"retired": "2026-10-26 方案 B 转语义短语"
},
{
"name": "U-STATE",
"class": "U-STATE",
"title": "Socket 状态机组合 U1~U15(§1.1 各模块设计文档自造;文档内编号)",
"pattern": "\\bU1[0-5]\\b|\\bU[1-9]\\b",
"owner_docs": [
"docs/网络/网络自愈架构设计.md",
"docs/网络/Net层阻塞模型架构设计.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "U15",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "裸形与报告 U1~U5、位号 U17 同形(§1.2「U1 四义」)→ 只在属主文档内拦越游标",
"adjacent_required": true,
"adjacent_cues": [
"状态机",
"组合",
"自愈"
],
"collides_with": "U"
},
{
"name": "D-DOC",
"class": "D-DOC",
"title": "网络自愈设计决策 D1~D10(§4.2 目标 DR-<nnn>;§7.1 D1~D7 → DR-001~007)",
"pattern": "\\bD10\\b|\\bD[1-9]\\b",
"owner_docs": [
"docs/网络/网络自愈架构设计.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "D10",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "与验证窗口 D2~D7、位号 D7、报告 D-x 四方同形(§1.2)→ 只在属主文档内拦越游标",
"adjacent_required": true,
"adjacent_cues": [
"决策",
"自愈"
],
"collides_with": "D"
},
{
"name": "V-WD",
"class": "V",
"title": "看门狗验证用例 V2/V4/V5(§7.1 → SC-<nn>)",
"pattern": "\\bV[2-9]\\b",
"owner_docs": [
"docs/子系统设计/看门狗设计说明.md",
"docs/测试说明/实机测试实施指南.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "与固件版本号 V0.1/V1.0、实机预检项同形 → 只在属主文档内判",
"adjacent_required": true,
"adjacent_cues": [
"看门狗",
"验证",
"实机"
]
},
{
"name": "RISK",
"class": "RISK",
"title": "专项风险裸形 R1~R8(§4.2 目标 RSK-<nn>;文档内编号)",
"pattern": "\\bR[1-8]\\b",
"owner_docs": [
"docs/算法/继电保护功能复现规划.md",
"docs/子系统设计/看门狗设计说明.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": "R8",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "与报告 R-x(内存优化项,连字符形)同字母不同形(§1.2)→ 只在属主文档内拦越游标",
"adjacent_required": true,
"adjacent_cues": [
"风险",
"规划",
"看门狗"
]
},
{
"name": "T-TEST",
"class": "T-TEST",
"title": "测试分层五档 T0/T0.5/T1/T2/T3(§4.2 目标形态;现存写 L0~L3)",
"pattern": "\\bT[0-3](?:\\.5)?\\b",
"owner_docs": [
"docs/测试说明/测试开发标准流程.md"
],
"scope": "global",
"frozen": false,
"cursor": null,
"cursor_owner_only": true,
"check_dangling": false,
"dangling_note": "§7.1 迁移批未落地(现存字面是 L0~L3)→ 本族是迁入目标,登记只为让新写法可判定;裸形 T1~T3 与 UART 引脚功能名同形,不做全库判定"
},
{
"name": "G-GATE",
"class": "G",
"title": "门禁档位 G0~G3(§4.2,与测试分层两套不合并)",
"pattern": "\\bG[0-3](?:\\.5)?\\b",
"owner_docs": [
"docs/测试说明/测试开发标准流程.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"cursor_owner_only": true,
"check_dangling": false
},
{
"name": "L-LAYER",
"class": "L-LAYER",
"title": "测试分层 / 算法层现存裸形 L0~L3(§4.2 目标 → T0~T3;§1.2 记四义)",
"pattern": "\\bL[0-3](?:\\.5)?\\b",
"owner_docs": [
"docs/测试说明/测试开发标准流程.md",
"App/algo/README.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": false,
"dangling_note": "阶段 1-②(L0~L3 → T0~T3,全库最大机械批次)未落地 → 本族只登记不判定(§9)"
},
{
"name": "CODE-RULE",
"class": "CODE-RULE",
"title": "嵌入式 C 代码规范条款号(V1.0;配原文章节号,如 CODE-RULE-03 (3.4.1))",
"pattern": "\\bCODE-RULE-[0-9]{2}\\b",
"digit_width": [
2,
2
],
"owner_docs": [
"scripts/check_coding_standard.py"
],
"scope": "global",
"frozen": false,
"cursor": "CODE-RULE-19",
"cursor_owner_only": true,
"owner_note": "属主登记处 = 门禁脚本的规则表本身(单一事实源);docs/代码规范/pre-commit使用说明.md 与规范原文是引用方",
"cursor_note": "2026-10-20 批 1 由 scripts/rename_ids.py 从裸形 S1~S19 单词化(旧号见 id_aliases.json 的 scoped 条目)。S14 历史上不存在(脚本无该条),空洞不复用 → 游标 19"
},
{
"name": "MENU-STATE",
"class": "MENU-STATE",
"title": "UI 菜单像素回归状态号(按键序列状态,共 8 态)",
"pattern": "\\bMENU-STATE-[0-9]{2}\\b",
"digit_width": [
2,
2
],
"owner_docs": [
"simulator/tests/check_menu_rows.py"
],
"scope": "global",
"frozen": true,
"cursor": "MENU-STATE-07",
"cursor_owner_only": true,
"owner_note": "属主登记处 = check_menu_rows.py 的 STATES 表(键序 → 状态);UI_自动化测试流程.md 与 simulator/README.md 是引用方",
"cursor_note": "2026-10-20 批 1 从裸形 S0~S7 单词化(原名与登记簿 S-x、代码规范条款、2026-10-02 复审专项条目四义撞形,见 §1.2)。8 态封顶:加状态先改游标"
},
{
"name": "TC-HOST-NANDPORT",
"class": "TC",
"title": "主机侧单测用例号:dhara NAND 移植层(N-21)(test/host/nand_port)",
"pattern": "\\bTC-NANDPORT-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/nand_port/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-NANDPORT-700",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-PROTSET",
"class": "TC",
"title": "主机侧单测用例号:保护定值模型 L3(test/host/prot_set)",
"pattern": "\\bTC-PROTSET-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/prot_set/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-PROTSET-011",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-PROTELEM",
"class": "TC",
"title": "主机侧单测用例号:保护元件/判据框架 L3(test/host/prot_elm)",
"pattern": "\\bTC-PROTELEM-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/prot_elm/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-PROTELEM-013",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-FREQ",
"class": "TC",
"title": "主机侧单测用例号:L2.5 测频(自适应窗)(test/host/freq)",
"pattern": "\\bTC-FREQ-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/freq/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-FREQ-011",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-FTPAUTH",
"class": "TC",
"title": "主机侧单测用例号:FTP 鉴权与锁定策略(test/host/ftp_auth)",
"pattern": "\\bTC-FTPAUTH-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/ftp_auth/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-FTPAUTH-010",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-SHA256",
"class": "TC",
"title": "主机侧单测用例号:SHA-256 摘要(口令哈希底座)(test/host/sha256)",
"pattern": "\\bTC-SHA256-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/sha256/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-SHA256-008",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-SOE",
"class": "TC",
"title": "主机侧单测用例号:SOE 事件顺序记录编解码(test/host/soe)",
"pattern": "\\bTC-SOE-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/soe/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-SOE-007",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-NETSOCK",
"class": "TC",
"title": "主机侧单测用例号:CH395F socket 栈核心(fd 表分配/跨上下文消息/错误码经通知值回传/监听门控)(net_socket)",
"pattern": "\\bTC-NETSOCK-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/net_socket/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-NETSOCK-560",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-SYSLOG",
"class": "TC",
"title": "主机侧单测用例号:运行与自检日志存储(定长记录 + 批量写 + 读窗口)(sys_log_mcu)",
"pattern": "\\bTC-SYSLOG-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/sys_log_mcu/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-SYSLOG-108",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-CFGFST",
"class": "TC",
"title": "主机侧单测用例号:配置文件存储引擎(落盘与回读校验)(cfg_file_store_mcu)",
"pattern": "\\bTC-CFGFST-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/cfg_file_store_mcu/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-CFGFST-053",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-SOESTORE",
"class": "TC",
"title": "主机侧单测用例号:SOE 事件顺序记录持久化(soe_store)",
"pattern": "\\bTC-SOESTORE-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/soe_store/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-SOESTORE-024",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-CONLOG",
"class": "TC",
"title": "主机侧单测用例号:控制台单写者日志(环形缓冲 + TX 软复位自愈)(console_log)",
"pattern": "\\bTC-CONLOG-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/console_log/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-CONLOG-179",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-ADCHEALTH",
"class": "TC",
"title": "主机侧单测用例号:L1 采集有效性校验(test/host/adc_health)",
"pattern": "\\bTC-ADCHEALTH-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/adc_health/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-ADCHEALTH-011",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21):这些号实测在代码目录外零消费者(唯一外部引用是 id_aliases.json 自己),故属主登记处 = 单测代码本身,不逐号补文档;class 仍为 TC → 跨模块同号由校验 4 抓",
"cursor_note": "游标按实测最大号收录(2026-10-21):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-ADCCAL",
"class": "TC",
"title": "主机侧单测用例号:L1.5 通道标定折算(test/host/adc_cal,道A 卡2/4)",
"pattern": "\\bTC-ADCCAL-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/adc_cal/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-ADCCAL-017",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21,同 TC-HOST-ADCHEALTH 先例;2026-10-25 道A 卡2 建族):属主登记处 = 单测代码目录,不逐号补文档",
"cursor_note": "游标按建族时实测最大号收录(2026-10-25):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-UIDATA",
"class": "TC",
"title": "主机侧单测用例号:UI 数据快照层与跨层契约一致性(test/host/ui_data,道E task-14)",
"pattern": "\\bTC-UIDATA-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/ui_data/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-UIDATA-026",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21,同 TC-HOST-ADCCAL 先例;2026-10-25 道E task-14 建族):属主登记处 = 单测代码目录,不逐号补文档;本族号同时是 UI 不透明编号与 App 枚举的现场核对锚(SOE 类型/元件号)",
"cursor_note": "游标按建族时实测最大母号收录(2026-10-25):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-PROTDIM",
"class": "TC",
"title": "主机侧单测用例号:量纲回归(test/host/prot_dim,道A 卡7)",
"pattern": "\\bTC-PROTDIM-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/prot_dim/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-PROTDIM-010",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21,同 TC-HOST-ADCHEALTH/TC-HOST-ADCCAL 先例;2026-10-25 道A 卡7 建族):属主登记处 = 单测代码目录,不逐号补文档",
"cursor_note": "游标按建族时实测最大号收录(2026-10-25):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-VOLSYNC",
"class": "TC",
"title": "主机侧单测用例号:写回缓存空闲 flush(test/host/vol_idle_sync,道F 批 2)",
"pattern": "\\bTC-VOLSYNC-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/vol_idle_sync/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-VOLSYNC-012",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21,同 TC-HOST-ADCHEALTH/TC-HOST-ADCCAL 先例;2026-10-25 道F 批 2 建族):属主登记处 = 单测代码目录,不逐号补文档",
"cursor_note": "游标按建族时实测最大号收录(2026-10-25):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-MEAS",
"class": "TC",
"title": "主机侧单测用例号:遥测快照层(test/host/meas,道D 卡8)",
"pattern": "\\bTC-MEAS-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/meas/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-MEAS-011",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21,同 TC-HOST-ADCHEALTH/TC-HOST-ADCCAL 先例;2026-10-25 道D 卡8 建族):属主登记处 = 单测代码目录,不逐号补文档",
"cursor_note": "游标按建族时实测最大号收录(2026-10-25):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-RUNPAR",
"class": "TC",
"title": "主机侧单测用例号:运行参数段(test/host/run_par,道D 卡10)",
"pattern": "\\bTC-RUNPAR-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/run_par/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-RUNPAR-008",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(用户裁定 2026-10-21,同 TC-HOST-MEAS/TC-HOST-ADCCAL 先例;2026-10-25 道D 卡 10 建族):属主登记处 = 单测代码目录,不逐号补文档;路由顺序证据链在 TC-IEC104-029(test/host/iec104)",
"cursor_note": "游标按建族时实测最大号收录(2026-10-25):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-IEC104",
"class": "TC",
"title": "主机侧单测用例号:IEC 60870-5-104 协议栈(test/host/iec104)",
"pattern": "\\bTC-IEC104-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/iec104/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-IEC104-033",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径同其余 TC-HOST 族;本族是 2026-10-21 补漏——上批模块码改名前它是纯数字 `TC-104-*`,未进当时的悬空普查,故漏建族",
"cursor_note": "游标按实测最大号收录(2026-10-21)"
},
{
"name": "TC-HOST-NETCFG",
"class": "TC",
"title": "主机侧单测用例号:网络配置编排与跨任务保存交接(test/host/net_cfg)",
"pattern": "\\bTC-NETCFG-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/net_cfg/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-NETCFG-056",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);本族 2026-10-23 随覆盖率口径 §9 P1 第①批新建模块补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-FTPCFG",
"class": "TC",
"title": "主机侧单测用例号:FTP 鉴权配置 [ftp] 段(test/host/ftp_cfg)",
"pattern": "\\bTC-FTPCFG-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/ftp_cfg/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-FTPCFG-014",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);本族 2026-10-23 随覆盖率口径 §9 P1 第①批新建模块补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-PROTSTOR",
"class": "TC",
"title": "主机侧单测用例号:保护定值持久化胶水层(test/host/prot_set_store)",
"pattern": "\\bTC-PROTSTOR-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/prot_set_store/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-PROTSTOR-016",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);本族 2026-10-23 随覆盖率口径 §9 P1 第①批新建模块补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-TASKPROF",
"class": "TC",
"title": "主机侧单测用例号:任务耗时探针与上报节流(test/host/task_prof)",
"pattern": "\\bTC-TASKPROF-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/task_prof/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-TASKPROF-020",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);本族 2026-10-23 随覆盖率口径 §9 P1 第①批新建模块补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-LFTPIO",
"class": "TC",
"title": "主机侧单测用例号:FTP 文件 IO 层与路径规范化(test/host/lftpd_io)",
"pattern": "\\bTC-LFTPIO-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/lftpd_io/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-LFTPIO-037",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 P1 新建模块补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-LFTSTR",
"class": "TC",
"title": "主机侧单测用例号:FTP 命令行字符串工具(同模块内)(test/host/lftpd_io)",
"pattern": "\\bTC-LFTSTR-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/lftpd_io/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-LFTSTR-005",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 P1 新建模块补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-NETSEL",
"class": "TC",
"title": "主机侧单测用例号:NET 层 select/poll 事件观测(test/host/net_select)",
"pattern": "\\bTC-NETSEL-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/net_select/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-NETSEL-019",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 P1 新建模块补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-NETLIS",
"class": "TC",
"title": "主机侧单测用例号:NET 层监听自动重建(test/host/net_listener)",
"pattern": "\\bTC-NETLIS-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/net_listener/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-NETLIS-026",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 假 CH395F 立项第一批补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-NETPEND",
"class": "TC",
"title": "主机侧单测用例号:NET 层挂起 recv 与挂起 send(test/host/net_pending)",
"pattern": "\\bTC-NETPEND-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/net_pending/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-NETPEND-040",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 假 CH395F 第二批补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-NETEV",
"class": "TC",
"title": "主机侧单测用例号:NET 层事件分发与周期对账(test/host/net_events)",
"pattern": "\\bTC-NETEV-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/net_events/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-NETEV-058",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 假 CH395F 第三批补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-LFTINET",
"class": "TC",
"title": "主机侧单测用例号:FTP 的 socket 适配层(test/host/lftpd_inet)",
"pattern": "\\bTC-LFTINET-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/lftpd_inet/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-LFTINET-070",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 P1 FTP 批次补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-LFTPD",
"class": "TC",
"title": "主机侧单测用例号:FTP 控制通道协议层(test/host/lftpd)",
"pattern": "\\bTC-LFTPD-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/lftpd/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-LFTPD-034",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 P1 FTP 批次补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
},
{
"name": "TC-HOST-I104SRV",
"class": "TC",
"title": "主机侧单测用例号:IEC 104 上行服务生命周期(test/host/iec104_serv)",
"pattern": "\\bTC-I104SRV-[0-9]{1,4}[a-z]?\\b",
"digit_width": [
2,
4
],
"owner_docs_glob": [
"test/host/iec104_serv/*"
],
"scope": "global",
"frozen": false,
"cursor": "TC-I104SRV-041",
"cursor_owner_only": true,
"check_dangling": true,
"allow_orphans": true,
"subitem_ok": true,
"owner_note": "B 层口径(2026-10-21 批 3 定:这些号在代码目录外零消费者,属主登记处 = 单测代码本身,不逐号补文档);2026-10-23 随覆盖率口径 §9 P1 收官批次补登记",
"cursor_note": "游标按实测最大号收录(2026-10-23):越界即视为未登记的冒号牌"
}
],
"unmanaged_bare": {
"note": "以下裸形族在 §9 阶段 1-② 迁移落地前**不做全库判定**——它们彼此、与元器件位号(§4.4)、与档位词大面积同形(§1.2 的五义/四义清单)。这些族的判定范围已收窄到「属主登记处文档内」(cursor_owner_only),文档外降为告警;显式登记 = 记录盲区,不是「检查通过」。",
"patterns": [
"\\bL[0-9](?:\\.[0-9])?\\b",
"\\bP[0-3]\\b",
"\\bU[0-9]{1,2}\\b",
"\\bH[0-9]\\b",
"\\bI[0-9]\\b",
"\\bJ[0-9]\\b",
"\\bQ[0-9]{1,2}\\b",
"\\bF[0-9]{1,2}\\b",
"\\bR[0-9]\\b",
"\\bV[0-9]\\b"
]
},
"owner_docs_exclude": [
"docs/测试说明/测试文档模板规范.md"
],
"designator_rule": "硬件语料位号识别:docs/硬件平台/ 与 docs/芯片手册/ 里匹配 ^[RCDJXUT][0-9]{1,3}$(无连字符)的字面量判为**位号**,不产生任何编号结论;不含 B(V0.0 网表报告的 B1 是真专项条目),带连字符的 D-7/N-18/TC-206 不受影响。机制在 check_ids.py 的 add() 里落地(统计键 designator_skipped)。**本目录仍未纳入扫描语料**:纳入前必须先把位号从可判定比例的 refs_total 里减掉,否则约 4200 处位号会把比例分母灌水、掩盖真实变化。 【批 9 扩展】同一规则再覆盖**引脚名/总线名/网名/区间**:^[A-Z]{2,3}[0-9]{1,2}(-[0-9]{1,2})?(如 PB12-15、PG0-15、PF13-15、DB0-15、OS0-2、KEY1-3、AIN1),同样不进 refs_total。带连字符的一字母形态(C-10 / A-9 / N-18 / D-7)与 TC-206 / TC1003 一律不受影响,仍照旧判。器件料号(FOC-817SC-F 被切成 FOC-817)**不做形状规则**:[A-Z]{3}-\\d{3} 与真家族 DEF-* 撞形,代价远大于收益,故留在台账 reason 里记账。",
"excluded_paths_note": [
"docs/硬件平台/ :2026-10-26 补齐——规范 §8 一直写着排除,registry 却没写进去,导致位号与网表复核条目被扫成编号(实测报 28 处错误,其中校验 1 把器件型号 FOC-817、网表复核条目 C-1~C-10/A-10/A-11 全部当自造号)。位号识别仍保留作为第二道保险"
],
"cleared_2026_10_26": {
"note": "2026-10-26 清号批次:这些族的字面量已从活文档与代码注释中删除(属主登记处已删除或从未启用)。族定义保留在本文件里只有一个目的:让历史行、[示例]/[计划] 行与别名表不触发校验 1。不得新增引用;新增会被校验 3/5 拦下。可清单位:全仓零引用后可连族带别名一起删除。",
"families": [
"E-AUD",
"P-AUDIT",
"N-RPT",
"D-RPT",
"S-RPT",
"R-RPT",
"F-RPT",
"U-RPT",
"S-REVIEW",
"A-REVIEW",
"B-AUDIT",
"T-LDG",
"S-LDG",
"I-ORPHAN",
"WAVE-TASK",
"TM",
"DP-LEGACY",
"DP",
"H-GAP",
"L-GAP",
"GAP",
"DR",
"RC",
"MS-TGT",
"GEN",
"WI",
"OQ",
"RSK",
"SC",
"ST",
"CS",
"UL",
"LAT",
"DEF",
"PAT",
"TRAP-NOMOD",
"TC-NOMOD",
"TC-UPPER"
]
},
"retired_to_phrase_2026_10_26": {
"note": "用户裁定方案 B:规划/待办类编号(登记簿 N-x/S-x/T-x、专项 A-x、已删报告 UI 簇 U1~U5)一律转语义短语。族保留登记、游标冻结;引用侧同批改写约 418 处、字面量净减 443(8,946 → 8,503):活号 237 + 已销项死引用 196 + U 簇非位号约 45。短语表见 docs/编号规范.md §4.1.1。",
"families": [
"N",
"S-LDG",
"T-LDG",
"A-REVIEW",
"S-REVIEW",
"T-REVIEW",
"U-RPT"
]
},
"baseline_note": "2026-10-26 方案 B 曾把比例基线由 86.6% 下调到 85.9%(转短语消掉的全是「本可判定」引用,比值被稀释而不可判定绝对数未增;理由见 docs/门禁说明/id-check.md §7.6 与 docs/编号规范.md §8.1);同批新增第二根护栏 undecidable_total_ceiling 后,本文档又瘦身了一半,删掉的多是不可判定的历史号引用,两根护栏已按 --update-baseline 重打为比例 86.0% / 绝对数 1166(都只朝好的方向动)。",
"undecidable_total_ceiling": 1166,
"undecidable_ceiling_note": "不可判定引用绝对数上限(refs_total - decidable),只许减不许增;--update-baseline 同步下调且拒绝上调。加它的原因:比值会被清号动作稀释,绝对数不会。"
}