Files
STM32F4-Base/scripts/id_registry.json
T
wandering1 6bdf063f50 test(NET/lftpd): P1 增补 lftpd_io 模块(33 条),登记 FTP 域一处潜伏缺陷
新增 test/host/lftpd_io/:一个 TU 同时纳入生产源 lftpd_io.c 与 lftpd_string.c
(两者静态符号不冲突,省一套桩),33 条断言全部 MSVC 编译通过并 PASS。

钉住的契约(都是真机上偶发、日志看不出根因的那类):
- 路径规范化:**".." 上跳过头仍被钳在根内**("/a" + "../../x" = "/x")——FTP 客户端
  可发任意路径,这是安全属性;绝对名忽略 base、"." 丢弃、段间多余斜杠折叠、
  NULL 入参容忍、全空结果归 "/"。
- 分配失败:这个函数返回 pvPortMalloc 出来的指针(历史上正是它落在 C 库 malloc 上,
  RAM 方案 §4.2.1)。用**可注入失败的假堆**跑两条分支:首块失败 → NULL;结果缓冲
  失败 → NULL **且第一块已 vPortFree**(不泄漏堆)。模拟器宿主 CRT 永不失败,这条
  只有假堆能构造。
- 卷锁时机:open 成功**故意不释放**(整个传输期独占卷,由 close 释放),失败必须
  释放并留 ERROR;单文件槽守卫 s_file_open 命中时**不碰卷锁也不碰 FatFs**。
- 等卷锁循环每轮喂看门狗(lftpd_task_wd_beat):defaultTask 与 FTP 争卷时这里可能
  空转上百毫秒,漏喂就是整机复位。脚本化 vol_lock_wait 的返回序列直接构造 2 轮空等。
- lftpd_string_trim:行首空白由**返回指针**跳过、原缓冲不搬移(调用点 lftpd.c 用的
  正是返回值);全空白串返回空串。

**本批照出一处,未改语义、只登记**:lftpd_string_trim 的尾部循环写成
for (i = strlen(p); i >= 0 && isspace(p[i]); i--),i 起步那格是 NUL、isspace(0) 为假
→ 循环一次都不执行,**尾部空白与 CRLF 从未被裁掉**。今天不发作是因为 CRLF 在
lftpd_inet_read_line 里已用 strstr 截断、且唯一调用点只关心行首;风险在于"以后有人
拿它去尾部空白"不会生效。修法只要一行(i 从 strlen(p)-1 起),但那会改变 FTP 参数
(含空格的文件名/口令)的可见行为,需要 FTP 域一起过,**留给用户裁定**;当前用
TC-LFTSTR-005 把现状钉成"改了会响"(明确标注是现状桩、不是期望行为)。

未覆盖也写在文件头:lftpd_io_read/write/close/stat/unlink/opendir/readdir/closedir
要先把假 FIL/FILINFO 的字段语义(fptr、obj.objsize、fname 等)做实,否则断言会落在
假件自己写的规则上;这 8 个 f_* 只给了可链接的 FR_INT_ERR 实现,走进即失败不静默。

覆盖率:套件 20 → 21 全绿;files_tested 23 → 25;未触及 .c 43 → 41;分母 3,163 →
3,332 行;lftpd_io.c 85/159(53.5%)、lftpd_string.c 8/10。总体 line_rate 88.9% →
87.2% —— **这是摊薄不是回退**(新进来的文件只测了一半,分母涨得比分子快),已按
§5 口径写进口径文档 §9 的落地进度表;恒等式更新为 41 = 7(P1 剩) + 5(P2) + 29(P3)。

编号:按 B 层口径补建 2 族 TC-HOST-LFTPIO(游标 037)与 TC-HOST-LFTSTR(005),
TC-HOST 族现共 **15** 族;id_registry.json 仍只做增量插入(无重排)。

自查:test-cppcheck Passed;coding-standard Passed;check_ids --strict 通过(无台账外
新账);check_doc_links --all = 35 处(= 存量,本分支贡献 0);新增/改动文件 BOM/CR/
U+FFFD/行尾卫生逐项净。**本增量零生产代码改动**(只加测试、注册表与文档),故未跑
@build。pre-commit --all-files 仍只有三条失败且与本分支无关:mem-numbers / mem-budget
(本 worktree 上次 @build 生成的 .map 与受管快照漂移,增量 ER_IROM1 +12B、RW_IRAM1
+8B、CCM 0,按并行分支约定不在分支里 --write,等 Lead 合并后统一回填)与 ui-golden
(simulator/tests/ref/*.bin 在 .gitignore 内,新 worktree 天生没有黄金参考)。
2026-10-23 23:44:47 +08:00

1749 lines
62 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": 82.6,
"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/"
],
"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": "规范 §4.1 记游标 N-34;实测登记簿现存至 N-30(N-31 曾于 2026-10-14 被复用撞号,见 docs/任务规划/README.md §0)→ 新条目一律改语义标识(P-8),实需编号才取 N-34",
"adjacent_cues": [
"登记簿"
]
},
{
"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": "现存 S-3/S-4/S-5;§7.1 之后不再新增 S 号",
"adjacent_cues": [
"登记簿"
]
},
{
"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": "现存 T-7(复审 T-1~T-5 见 docs/任务规划/测试与架构专项.md 卷首)",
"adjacent_cues": [
"登记簿",
"专项"
]
},
{
"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/任务规划/W1-采集保护收尾.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 在册保留;裸形 W<n> 合法)",
"pattern": "\\bW[0-9]+\\b",
"owner_docs": [
"docs/任务规划/README.md"
],
"scope": "global",
"frozen": false,
"cursor": "W8",
"cursor_owner_only": true,
"check_dangling": true,
"dangling_outside_owner": "warn",
"allow_missing_defs": [
"W8",
"W0"
],
"cursor_note": "游标 W8(§4.1);W2 已清空销项但槽位保留不复用(README §2.0 注)",
"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/任务规划/W1-采集保护收尾.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.2 目标 → WI;存量冻结)",
"pattern": "\\bC[1-9]\\b",
"owner_docs": [
"docs/任务规划/README.md",
"docs/任务规划/排期详述.md"
],
"scope": "global",
"frozen": true,
"cursor": "C6",
"cursor_owner_only": true,
"check_dangling": false,
"dangling_outside_owner": "warn",
"cursor_note": "与元器件位号 C1~Cn、UI 约束清单 C5~C9 同形(§4.4)→ 只在属主登记处文档内判定",
"adjacent_cues": [
"结构债",
"波次"
],
"dangling_note": "与元器件位号同形(§4.4),全库悬空判定误报面大 → 只在属主登记处文档内拦越游标(cursor_owner_only)"
},
{
"name": "D-WAVE",
"class": "D",
"title": "验证窗口排期条目 D2~D7(§4.2 目标 → WI;存量冻结)",
"pattern": "\\bD[1-9]\\b",
"owner_docs": [
"docs/任务规划/README.md",
"docs/任务规划/排期详述.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/任务规划/W1-采集保护收尾.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(§4.3 冻结历史快照)",
"pattern": "\\bN-[0-9]{1,3}[a-z]?\\b",
"owner_docs": [
"docs/问题记录/项目审查与优化建议报告.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"check_dangling": true,
"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 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"name": "D-RPT",
"class": "D-RPT",
"title": "报告自有编号 D-x(§4.3 冻结历史快照)",
"pattern": "\\bD-[0-9]\\b",
"owner_docs": [
"docs/问题记录/项目审查与优化建议报告.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"check_dangling": true,
"dangling_outside_owner": "warn",
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"collides_with": "D",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"name": "S-RPT",
"class": "S-RPT",
"title": "报告自有编号 S-x(§4.3 冻结历史快照)",
"pattern": "\\bS-[0-9]\\b",
"owner_docs": [
"docs/问题记录/项目审查与优化建议报告.md"
],
"scope": "doc-scoped",
"frozen": true,
"cursor": null,
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"collides_with": "N",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"name": "R-RPT",
"class": "R-RPT",
"title": "报告自有编号 R-x(§4.3 冻结;内存优化项)",
"pattern": "\\bR-[0-9]{1,2}\\b",
"owner_docs": [
"docs/问题记录/项目审查与优化建议报告.md"
],
"scope": "global",
"frozen": true,
"cursor": "R-9",
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"cursor_note": "实测现存至 R-9(2026-10-15 落地);§1.2 记「R1=风险、R-2=内存优化项」同字母歧义",
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"name": "F-RPT",
"class": "F-RPT",
"title": "报告自有编号 F-x(§4.3 冻结历史快照)",
"pattern": "\\bF-[0-9]{1,2}\\b",
"owner_docs": [
"docs/问题记录/项目审查与优化建议报告.md"
],
"scope": "global",
"frozen": true,
"cursor": null,
"check_dangling": true,
"adjacent_required": true,
"adjacent_cues": [
"报告",
"审查"
],
"snapshot_only": true,
"snapshot_note": "§4.3 冻结历史快照:只在引用写了文档名(紧邻线索)时参与定族,不参与「定义位优先」——避免同号把活登记处接管走"
},
{
"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": "「编号不随条目删除而回收」(专项文档卷首)→ 已销项的号再被引用即悬空;⚠ 与登记簿 S-3/S-4/S-5 同号不同义(§1.2),也与 CI 步骤号 S3、代码规范条款号 S3 同形 → 文档外只告警",
"adjacent_cues": [
"复审",
"专项"
]
},
{
"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": "现存 A-4/A-5 行,其余已销项(编号不回收)",
"adjacent_cues": [
"复审",
"专项"
]
},
{
"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"
},
{
"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",
"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(§4.3 冻结历史快照)",
"pattern": "\\bU[1-5]\\b",
"owner_docs": [
"docs/问题记录/项目审查与优化建议报告.md",
"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": "U1~U5 见报告 §6.5;W6 波次按此推进(docs/任务规划/README.md §2.0)"
},
{
"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-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-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-023",
"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-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-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):越界即视为未登记的冒号牌"
}
],
"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 里记账。"
}