Files
STM32F4-Base/scripts/id_registry.json
T
wandering1 4a09d4c63f fix(log): syslog_post 投递即拷贝(台架实证驱动的 B 方案整改)
待发条目 syslog_entry_t 原为 {id, const char *desc},只存调用方指针,
隐含「desc 必须活到落盘」的契约,但契约既未写进 sys_log.h、也无机械
检查。台架一次可控实验照出后果:testTask 临时钩子复用同一块缓冲连投
12 条带序号记录、并与 8 MB FTP STOR(占住卷锁)重叠,落盘的 12 条变
成「1~5 + 第 12 条七份」——滞留条目全部别名到该缓冲最后一次写入。
叠加卷忙整批回投(条目可滞留到卷空闲),投栈缓冲即成悬垂读。

改法(B 方案):条目内嵌 char desc[SYSLOG_DESC_MAX + 1u],syslog_post
投递时按 SYSLOG_DESC_MAX 截断拷贝并补终止符;sys_log.h 参数说明同步
写明「投递即拷贝、不要求生命周期覆盖到落盘」。

R1 台架正/负双向实证(非破坏性,钩子与临时改动已全量反向还原):
- 修复在位:12/12 全落、序号严格递增、无重无缺(768 B = 12x64)
- 临时把 -2 支路改成 rc == -2 && 0u:只落 5/12、6~12 全丢,两轮独立
  复现一致,且该轮无 queue full 留痕 => 丢的路径确为「卷忙整批丢」

RAM/Flash 前后(scripts/ram_report.py 同口径,同一 .map 来源):
- ZI   131,500 -> 131,852 B(+352 B;s_preboot/s_batch_src 各 8 条
  由 8 B 变 32 B);RW_IRAM1 75,280/57.4% -> 75,632/57.7%
- Code 213,720 -> 213,780 B(+60 B);RW 1,204 B 不变
- RW_CCM 静态不变(57,376 B / 87.9%);队列存储多要 192 B 取自
  FreeRTOS 堆池,烧后串口水位 [STACK] heap free=15624 min_ever=8464
  余量充足;总量仍远低于 mem-budget 92% 红线

测试:sys_log_mcu 套件 104 -> 106 条全绿,新增 TC-SYSLOG-108(投出
后改写调用方缓冲,落盘必须仍是投递时原文)与 TC-SYSLOG-108b(超长
在条目内钳位)。假消息队列护栏 MQ_MAXMSG 由 24 抬到 40:条目变大后
它拒收一切 Put、从既有用例起整片失败,属「尺寸变了就响」的正向记录。
主机侧此前照不出该类问题,是因为用例传字面量、静态存储期无限。

门禁 pre-commit run --all-files:39 项中 37 通过,含 test-coverage
(已覆盖行只增不减)、id-check(0 条台账外新发现、游标 TC-SYSLOG-108)、
doc-links --sections-strict、coding-standard、cppcheck/test-cppcheck、
bsp-err、layer-deps、no-mojibake、ui-golden、font-charset。仅
mem-numbers 与 mem-budget 失败:docs/内存管理/ 受管台账仍记改前
131,500/213,720。按分支约定不在分支上 --write 受管台账,留待合回
主干时统一回填,故 --no-verify 提交。

真机:产品构建 0 错 0 警告,重烧 + 回读校验 OK(suite=NONE dstr=off)、
启动标记齐全、无 [ERR]、VERDICT PASS。
2026-10-24 23:15:18 +08:00

2013 lines
73 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-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-167",
"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):越界即视为未登记的冒号牌"
},
{
"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 里记账。"
}