docs(测试说明): 按用途分六个子目录并同步全库引用
分层:流程与规范/ 单元测试/ 板级测试/ 专项验证/ 测试工具/ 测试数据/, 顶层只留新增的目录导航 README.md(归层判据 + 硬约束 + 本次处置记录)。 - 搬迁 28 个路径:测试数据三个目录 58 个文件为纯改名(R100,内容逐字节不变) - 全库引用同步 124 个文件:AGENTS / docs 索引 / skills / 门禁注释 / scripts - 门禁面:scripts/check_test_traceability.py 的 glob 改 rglob (分层后不递归扫描=追溯门禁直接瞎掉) - scripts/rename_ref.py:收尾的 ℹ 提示在 GBK 代码页抛 UnicodeEncodeError, 让进程以退出码 1 收场而改写其实已落盘(RC 与真实结果相反);改为把 stdout/stderr reconfigure 成 UTF-8,与 check_doc_links.py 等同法 - docs/文档规范.md §1.1 补「子目录文件过多时再分一层」;§3.6 补 rename_ref 搬整目录的两个实测坑:① 会改写目录内部文件的内容 ② 内部文件的 ../ 出链 不补层级(本次 23 个被误改的证据文件已按 HEAD 原始字节逐字节还原) - docs/README.md §6 改为与六个子目录一一对应,并补登原先漏登记的 「启动日志原子性复验流程」一行 - .cubemx_survival_baseline.json:App/util/task_watchdog.c 的注释路径也随分层更新, 该文件是存活审计的 watchdog-module 漂移锚点,按脚本自己的提示跑 --write 重建基线 (实测重建后仅 watchdog-module 一条哈希变化) - 铁律 4 例外(本次在任务树里改了单写者文件):AGENTS.md 与 .pre-commit-config.yaml 只被 rename_ref 改写路径字面量(后者全在注释行), 任务表块与钩子声明一字未动 验证:check_doc_links.py --sections-strict 覆盖全部 88 个改动 .md 全绿; check_test_traceability.py 输出与主树逐行一致;196 个文本文件无 BOM、无新增 CR、无 U+FFFD、无行尾空白;陈旧引用面由主树 25 处降到 6 处(无新增断链)。
This commit is contained in:
+2
-2
@@ -41,10 +41,10 @@
|
||||
|
||||
| 脚本 / 文件 | 作用 |
|
||||
|---|---|
|
||||
| `ci_local.py` | **本地跑与 CI 等价的门禁**(静态门禁 pre-commit 47 根 + **manual 段**(`cppcheck` / `test-cppcheck` / `test-coverage` 三根逐根 `--hook-stage manual`,默认跑)+ 提交信息门禁 + **体积门禁** + 主机侧纯逻辑单测):自动选用装了 pre-commit 的解释器;无 `.map` 时自适应跳过 `mem-numbers` / `mem-budget`(⚠ 那是 SKIP 不是通过,缺口由体积门禁兜住);退出码 0/1/2 与 CI 对齐。CI 定义见 `../.gitea/workflows/ci.yml`,覆盖边界见 `docs/测试说明/测试开发标准流程.md` §9 |
|
||||
| `ci_local.py` | **本地跑与 CI 等价的门禁**(静态门禁 pre-commit 47 根 + **manual 段**(`cppcheck` / `test-cppcheck` / `test-coverage` 三根逐根 `--hook-stage manual`,默认跑)+ 提交信息门禁 + **体积门禁** + 主机侧纯逻辑单测):自动选用装了 pre-commit 的解释器;无 `.map` 时自适应跳过 `mem-numbers` / `mem-budget`(⚠ 那是 SKIP 不是通过,缺口由体积门禁兜住);退出码 0/1/2 与 CI 对齐。CI 定义见 `../.gitea/workflows/ci.yml`,覆盖边界见 `docs/测试说明/流程与规范/测试开发标准流程.md` §9 |
|
||||
| `check_size_gate.py` | **体积门禁的强制路径**:`.map` 只在本地有,钩子无它时自适应 SKIP,于是"没测=通过"。本脚本用**已提交的同码凭证** `scripts/size_attestation.json` 把这条判据变成无需 Keil 也能跑:`--stamp` 只在"`.map` 存在、比全部受管源码新、且未超 92%"时才盖章(已挂在 `ram_baseline.py --update` 里,无新增人工步骤);`--local` 供 ci_local 的体积门禁步;`--ci` 供 runner(同码性 + 按凭证数字复核红线,主干 push 拦红、其余事件 `--warn-only`);`--show` 排障。**口径与边界的唯一正文在本脚本模块 docstring** |
|
||||
| `size_attestation.json` | (被 `check_size_gate.py` 读写)体积同码凭证:受管源码指纹(`git ls-files` 范围内逐文件 sha256 聚合)+ 测量数字与占比 + `.map` 出处。改固件源码后不重测 → 指纹对不上 → 体积门禁与 CI 同时拦红 |
|
||||
| `check_test_coverage.py` | 主机单测**覆盖率**(2026-10-23):mscoverage 动态插桩跑 `test/host/**` 全部 44 套,统计自研生产源码行/函数覆盖(并集)+ 与 `test_coverage_baseline.json` 比回退;`--module/--update-baseline/--md/--json/--list`;挂在 `test-coverage` 钩子上(`stages: [manual]`,**`git commit` 不跑**),入口 = 远端 CI「手动阶段门禁」步 / `scripts/ci_local.py` 的 manual 段(`--coverage` 旗标保留只为兼容旧命令;口径见 `docs/测试说明/主机单测覆盖率口径.md`) |
|
||||
| `check_test_coverage.py` | 主机单测**覆盖率**(2026-10-23):mscoverage 动态插桩跑 `test/host/**` 全部 44 套,统计自研生产源码行/函数覆盖(并集)+ 与 `test_coverage_baseline.json` 比回退;`--module/--update-baseline/--md/--json/--list`;挂在 `test-coverage` 钩子上(`stages: [manual]`,**`git commit` 不跑**),入口 = 远端 CI「手动阶段门禁」步 / `scripts/ci_local.py` 的 manual 段(`--coverage` 旗标保留只为兼容旧命令;口径见 `docs/测试说明/单元测试/主机单测覆盖率口径.md`) |
|
||||
| `ci_gitlint_range.ps1` | CI 侧**提交信息门禁**:逐条校验本次 push/PR 引入的提交(`--all-files` 跑不到 `commit-msg` stage,故必须单独守) |
|
||||
| `ci_find_python.ps1` | CI 侧 Python 探测(候选顺序须与 `ci_local.py` 同序同步,否则 CI 与本地判定会分叉) |
|
||||
| `ci_runner_bootstrap.ps1` | **本机 runner 运维脚本**(体检 `-Status` / 干跑 `-DryRun` / 部署 `-SetEnv -StartNow`):装"等 Gitea 就绪 + 崩溃自拉起"的看门狗 + 开机计划任务 + 机器级 `DTU_*` |
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
{
|
||||
"to": null,
|
||||
"status": "void",
|
||||
"note": "从未存在的陷阱号被 docs/测试说明/CH395F_Test_Guide.md 引用(§1.2 / §7.2:删除或改指实际条目)"
|
||||
"note": "从未存在的陷阱号被 docs/测试说明/板级测试/CH395F_Test_Guide.md 引用(§1.2 / §7.2:删除或改指实际条目)"
|
||||
},
|
||||
{
|
||||
"to": "TRAP-NET-19",
|
||||
@@ -2853,7 +2853,7 @@
|
||||
"note": "GD5F 存储域:Trap 01~07 → TRAP-GD5F-01~07(属主文档 7 个标题行为定义位,其余为引用)(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -2867,7 +2867,7 @@
|
||||
"note": "GD5F 存储域:Trap 01~07 → TRAP-GD5F-01~07(属主文档 7 个标题行为定义位,其余为引用)(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -2881,7 +2881,7 @@
|
||||
"note": "GD5F 存储域:Trap 01~07 → TRAP-GD5F-01~07(属主文档 7 个标题行为定义位,其余为引用)(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -2895,7 +2895,7 @@
|
||||
"note": "GD5F 存储域:Trap 01~07 → TRAP-GD5F-01~07(属主文档 7 个标题行为定义位,其余为引用)(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -2909,7 +2909,7 @@
|
||||
"note": "GD5F 存储域:Trap 01~07 → TRAP-GD5F-01~07(属主文档 7 个标题行为定义位,其余为引用)(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -2923,7 +2923,7 @@
|
||||
"note": "GD5F 存储域:Trap 01~07 → TRAP-GD5F-01~07(属主文档 7 个标题行为定义位,其余为引用)(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -2937,7 +2937,7 @@
|
||||
"note": "GD5F 存储域:Trap 01~07 → TRAP-GD5F-01~07(属主文档 7 个标题行为定义位,其余为引用)(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -2950,7 +2950,7 @@
|
||||
"status": "renamed",
|
||||
"note": "同一属主的中文形「见陷阱 01」→ 与空格形合并成同一个号(scripts/rename_ids.py 批:族 TRAP)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md"
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md"
|
||||
]
|
||||
},
|
||||
"陷阱 1": {
|
||||
@@ -3296,7 +3296,7 @@
|
||||
"S-2": {
|
||||
"to": null,
|
||||
"status": "void",
|
||||
"note": "本号两义,均已死:① 登记簿 S-2(启动日志固化流程,2026-09-22 提出、2026-10-05 固化后销项)→ docs/测试说明/boot_log_data/README.md;② 报告 S-2(跨模块裸 `extern`,2026-10-22 已闭环)→ 契约见 App/task/task_handles.h、gd5f_spi1_notify_*、net_msg_queue_adopt"
|
||||
"note": "本号两义,均已死:① 登记簿 S-2(启动日志固化流程,2026-09-22 提出、2026-10-05 固化后销项)→ docs/测试说明/测试数据/boot_log_data/README.md;② 报告 S-2(跨模块裸 `extern`,2026-10-22 已闭环)→ 契约见 App/task/task_handles.h、gd5f_spi1_notify_*、net_msg_queue_adopt"
|
||||
},
|
||||
"N-2": {
|
||||
"to": null,
|
||||
|
||||
@@ -389,10 +389,10 @@
|
||||
"owner_docs_glob": [
|
||||
"docs/测试说明/*_Test_Guide.md",
|
||||
"docs/测试说明/*单元测试说明.md",
|
||||
"docs/测试说明/实机测试实施指南.md",
|
||||
"docs/测试说明/链路延迟测试说明.md",
|
||||
"docs/测试说明/自动化测试流程.md",
|
||||
"docs/测试说明/存储维护与容量恢复.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md",
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md",
|
||||
"docs/测试说明/流程与规范/自动化测试流程.md",
|
||||
"docs/测试说明/专项验证/存储维护与容量恢复.md"
|
||||
],
|
||||
"scope": "global",
|
||||
"frozen": true,
|
||||
@@ -612,7 +612,7 @@
|
||||
"title": "台架日志代次(§4.2 目标形态,数字不变仅改字面)",
|
||||
"pattern": "\\bGEN-[0-9]{1,3}\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/串口助手设计说明.md"
|
||||
"docs/测试说明/测试工具/串口助手设计说明.md"
|
||||
],
|
||||
"scope": "global",
|
||||
"frozen": false,
|
||||
@@ -626,7 +626,7 @@
|
||||
"title": "台架轮次(§4.2 目标形态,日期制)",
|
||||
"pattern": "\\bRUN-[0-9]{8}-[0-9]{1,2}\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/实机测试实施指南.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md"
|
||||
],
|
||||
"scope": "global",
|
||||
"frozen": false,
|
||||
@@ -795,7 +795,7 @@
|
||||
"title": "模拟器差距(§4.2;§7.1 收编 H-x / L-x / 差距 N-x)",
|
||||
"pattern": "\\bGAP-[0-9]{1,3}\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/模拟器差距清单.md"
|
||||
"docs/测试说明/专项验证/模拟器差距清单.md"
|
||||
],
|
||||
"scope": "doc-scoped",
|
||||
"frozen": false,
|
||||
@@ -813,7 +813,7 @@
|
||||
"title": "实机验证场景(§4.2;§7.1 收编实机预检 A1~A8、看门狗 V2/V4/V5)",
|
||||
"pattern": "\\bSC-[0-9]{1,3}\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/实机测试实施指南.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md"
|
||||
],
|
||||
"scope": "doc-scoped",
|
||||
"frozen": false,
|
||||
@@ -878,7 +878,7 @@
|
||||
"title": "链路延迟分段 LAT-<nn>(§4.2 文档内编号;存量 L1~L11)",
|
||||
"pattern": "\\bLAT-[0-9]{1,2}\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/链路延迟测试说明.md"
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md"
|
||||
],
|
||||
"scope": "doc-scoped",
|
||||
"frozen": false,
|
||||
@@ -1178,7 +1178,7 @@
|
||||
"title": "模拟器差距清单 H-1~H-7(§7.1 → GAP-01~07)",
|
||||
"pattern": "\\bH-[0-9]\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/模拟器差距清单.md"
|
||||
"docs/测试说明/专项验证/模拟器差距清单.md"
|
||||
],
|
||||
"scope": "doc-scoped",
|
||||
"frozen": true,
|
||||
@@ -1195,7 +1195,7 @@
|
||||
"title": "模拟器差距清单 L-1~L-4(§7.1 → GAP-08~11)",
|
||||
"pattern": "\\bL-[0-9]\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/模拟器差距清单.md"
|
||||
"docs/测试说明/专项验证/模拟器差距清单.md"
|
||||
],
|
||||
"scope": "doc-scoped",
|
||||
"frozen": true,
|
||||
@@ -1212,7 +1212,7 @@
|
||||
"title": "模拟器差距清单 N-1~N-6(§7.1 → GAP-12~17;与登记簿 N-x 同名不同义)",
|
||||
"pattern": "\\bN-[0-9]\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/模拟器差距清单.md"
|
||||
"docs/测试说明/专项验证/模拟器差距清单.md"
|
||||
],
|
||||
"scope": "doc-scoped",
|
||||
"frozen": true,
|
||||
@@ -1292,7 +1292,7 @@
|
||||
"pattern": "\\bV[2-9]\\b",
|
||||
"owner_docs": [
|
||||
"docs/子系统设计/看门狗设计说明.md",
|
||||
"docs/测试说明/实机测试实施指南.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md"
|
||||
],
|
||||
"scope": "doc-scoped",
|
||||
"frozen": true,
|
||||
@@ -1335,7 +1335,7 @@
|
||||
"title": "测试分层五档 T0/T0.5/T1/T2/T3(§4.2 目标形态;现存写 L0~L3)",
|
||||
"pattern": "\\bT[0-3](?:\\.5)?\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/测试开发标准流程.md"
|
||||
"docs/测试说明/流程与规范/测试开发标准流程.md"
|
||||
],
|
||||
"scope": "global",
|
||||
"frozen": false,
|
||||
@@ -1351,7 +1351,7 @@
|
||||
"title": "门禁档位 G0~G3(§4.2,与测试分层两套不合并)",
|
||||
"pattern": "\\bG[0-3](?:\\.5)?\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/测试开发标准流程.md"
|
||||
"docs/测试说明/流程与规范/测试开发标准流程.md"
|
||||
],
|
||||
"scope": "global",
|
||||
"frozen": true,
|
||||
@@ -1365,7 +1365,7 @@
|
||||
"title": "测试分层 / 算法层现存裸形 L0~L3(§4.2 目标 → T0~T3;§1.2 记四义)",
|
||||
"pattern": "\\bL[0-3](?:\\.5)?\\b",
|
||||
"owner_docs": [
|
||||
"docs/测试说明/测试开发标准流程.md",
|
||||
"docs/测试说明/流程与规范/测试开发标准流程.md",
|
||||
"App/algo/README.md"
|
||||
],
|
||||
"scope": "global",
|
||||
@@ -2155,7 +2155,7 @@
|
||||
]
|
||||
},
|
||||
"owner_docs_exclude": [
|
||||
"docs/测试说明/测试文档模板规范.md"
|
||||
"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": [
|
||||
|
||||
@@ -168,7 +168,7 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语
|
||||
2. **本文自述形态化**:把本文里 4 处「字母 T 紧跟数字」与 2 处 DRV 段孤儿号的**字面量写法**改成形态描述(lesson 不丢),使这四个族的门禁命中数真正归零,而不是停在「只有规范自己在引用」。
|
||||
3. **登记机器面还空着的那一面**:`scripts/archive/id_gate/id_registry.json` 给 `L-PROT`/`FEAT` 补 `retired` 字段;给 `T-TEST` 补 `cursor_note` 写明——它的 pattern 最高只到数字 3,**即使 `frozen: true` 校验 5 也碰不到任何新写法**(探针实测写 4 不响),所以该族停发今天只有 `docs/编号规范.md` §3.3 禁令 + 评审两道兜底,**别把「存量已清零」读成「机器已关闭」**。
|
||||
|
||||
> ⚠ 本轮执行期间另有一道并行改动落地:`docs/测试说明/boot_log_data/README.md`(登记簿旧号「启动日志固化流程」)与 `docs/测试说明/m2_data/README.md`(审计发现 E 族一处死号)已由该道改为语义短语——**本笔不重复改这两处、也不替它收口**;复测两处死号引用均为 0。
|
||||
> ⚠ 本轮执行期间另有一道并行改动落地:`docs/测试说明/测试数据/boot_log_data/README.md`(登记簿旧号「启动日志固化流程」)与 `docs/测试说明/测试数据/m2_data/README.md`(审计发现 E 族一处死号)已由该道改为语义短语——**本笔不重复改这两处、也不替它收口**;复测两处死号引用均为 0。
|
||||
|
||||
§8.1 的 7,828 是当日更早时点值;本轮 14:1x 复测 **791 文件 / 7,931 字面量 / 不可判定 982(上限 1,166,余量 184)/ 可判定 87.61%**——增量全部来自别道在飞的新代码与新文档,本笔净效果是**只减不增**。
|
||||
### 9.1 三批计划(按「值不值得动门禁」排序)
|
||||
@@ -243,7 +243,7 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语
|
||||
上一笔曾特意标 ✅ 保留,理由是该行被 `App/task/adc_task.c` 的 v3.3 修订行按卡号当口径出处引用;
|
||||
引用侧改成语义短语后该理由不再成立 → **例外撤销**。判据与实测记录的属主 =
|
||||
`docs/硬件平台/ADC通道映射说明.md` §8.1(六项判据全 PASS、斜率 6544.2 码/V、偏差 −0.14 %),
|
||||
执行侧 = `docs/测试说明/ADC前端注入验证流程.md`(含两项残留口径与残差表)。
|
||||
执行侧 = `docs/测试说明/专项验证/ADC前端注入验证流程.md`(含两项残留口径与残差表)。
|
||||
2. **整族清退**:「卡」+ 数字 1~11 那 11 行早在 2026-10-25 就删完了,代码注释里剩下的这种形态今天
|
||||
**查无此行**——按 `docs/编号规范.md` §4.1.1 末句,正确动作是**删号留事实**(换成语义短语),不是回去补一个定义。
|
||||
|
||||
@@ -333,7 +333,7 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语
|
||||
|
||||
1. **peer 的 JSON 键不改(本族清退到 schema 边界为止)**:`test/host/latency_peer.py` 的
|
||||
`l5_recv` / `l5_send` / `l3_drain` / `l7_crc` / `seg_l6` / `seg_l7_first_byte` / `seg_l7_total` /
|
||||
`frames_l7` 与内部字典键 `l3`/`l6`/`l7`(共 48 token)是 `docs/测试说明/m2_data/*.json` 五份
|
||||
`frames_l7` 与内部字典键 `l3`/`l6`/`l7`(共 48 token)是 `docs/测试说明/测试数据/m2_data/*.json` 五份
|
||||
**冻结实测证据**的 schema。改名要么让代码与归档数据漂移,要么得回头改证据文件(等于篡改
|
||||
测量产物)——两条都不接受。这是**有记录的刻意例外**,不是漏网。
|
||||
2. **`REQ2FIRST` / `FULLFRAME` 不并入 `ECHO_RT` / `FRAME_RT`**:它们是「整帧往返」段内两个不同
|
||||
@@ -362,7 +362,7 @@ P-6 号必须能反查到定义(属主登记处得存在)· P-7 编号不语
|
||||
| 2026-10-27 | **批次四:`L-PROT` / `FEAT` 发号口关闭(`docs/编号规范.md` §4.1 七行→五行)+ 本文自述形态化 + 登记 `T-TEST` 机器面空白** | 用户指令「语义标识已定为默认形态,看看还有哪些编号族仍被引用、各自还剩多少,把能清的族清掉一批」。按门禁 `Checker` 实测三口径重打 §9 存量表:**真编号活引用只剩 `TC-*`(保留、水位 497/81 未涨)、`TRAP-*`、`CODE-RULE-*`、`MENU-STATE-*` 四族**,批次一/二涉及的 `N-*`/`TM-*`/`T-TEST`/`L-PROT`/`FEAT` 活引用均已归零。本笔:① `docs/编号规范.md` §4.1 把 `L<n>-<nn>`、`F-<MOD>-<nn>` 从『允许继续发号』整行移出并在『已停发』栏各写一行(含探针证据:新形态号 → 校验 3 错误级);② 本文 6 处形态自述改「字母+数字」描述,使四个族门禁命中归零、lesson 不丢;③ registry 给 `L-PROT`/`FEAT` 补 `retired`、给 `T-TEST` 补 cursor_note(pattern 上限即 3 → 冻结游标是空操作,停发今天只有规范效力);④ 分类登记 `docs/编号规范.md` §4.4 误判面(版本记号 / 活表代号 / 状态组合 / 位号)与 `docs/编号规范.md` §4.3 冻结波次号两类**不清**的理由。未改门禁判定逻辑、未动冻结历史与原始串口日志、未新增任何号。 |
|
||||
| 2026-10-27 | **批次一 `F-*` 收口:网络设计 12 个条目号转「条目名」语义短语,§7 表加「条目名」列为权威对照** | 用户指令「把网络设计里的 `F-*` 条目号换成语义短语,别改坏硬件资料的 T1/T2/T3 位号和 Mermaid 节点名」。走 `scripts/rename_ids.py`(映射 `scripts/rename_maps/batch7-f-net-semantic.json`,`--no-alias` 后手工写别名),10 处定点改写=属主文档正文 9 处(含 1 处孤儿号删号留事实)+ `test/host/net_socket/net_socket_test.c` 注释 1 处;孤儿号(F 前缀 + 模块码段 + 数字序号的三段形态;§7 从无定义行)删号留事实、不补定义;13 个旧号标 `retired-to-phrase`。刻意不动:§7 编号列(历史对照)、`BSD_Socket_API_使用指南.md` 变更记录行、`docs/硬件平台/` 位号、Mermaid 节点名。`scripts/archive/id_gate/id_registry.json` FEAT `cursor_note` 改记停发口径(三模块各有最高号 → 不冻结游标的理由写在里面)。零代码语义变更。 |
|
||||
| 2026-10-27 | **停发机械化落地:34 个 `TC-HOST-*` 子族游标冻结,`docs/编号规范.md` §8 校验 5 开始咬新配的 TC 号** | 上一笔把缺口登记为「停发今天只有规范效力」并写明机械化怎么做;本笔照它落地、把话兑现:`scripts/archive/id_gate/id_registry.json` 37 个 TC 类族全部 `frozen: true`,34 个子族的 `cursor` 冻结在裁定日存量最高号(字符串形态——整型比较静默不生效;5 个低于存量的已抬:`TC-PROTELEM-013→015`、`TC-SYSLOG-108→137`、`TC-ADCHEALTH-011→023`、`TC-ADCCAL-017→023`、`TC-I104SRV-041→053`),理由记在顶层 `tc_freeze_2026_10_27`。探针(Checker `_check_frozen`):在 `TC-PROTSET-` 段存量最高号之上再加一号 → 命中 1 条校验 5,写存量最高号本身 → 零误伤;`check_ids.py --only 5` = 0 处;plain 与 `--strict` 的错误级 findings 与本笔前逐条相同(**12 条 `TC-TIMESYNC-0xx` 悬空引用属另一道在飞的 time_sync 改动,不在本笔写域,也没替它改**);台账 0 条、可判定 87.67%、不可判定 979 / 上限 1,166,不动 §8.1。**没有把主族 `TC` 说成已冻结**:它 `cursor` 仍为 `null`,`docs/编号规范.md` §4.1 框内第三条与 §9.1 末段把这块空白及其兜底(校验 3 + 冻结水位 564/474/79 只减不增 + 评审)写明,并规定「给这些模块补号即使在文档里补了定义行也算违令」。§9.1 末段由「效力边界」改写为「机器口径已落地」,当日实测留作历史不抹。零代码、零编号增删。 |
|
||||
| 2026-10-27 | **停发口径收口:`TC-*` 从『允许继续发号』表整行移出,并登记「机器面还没冻结」这个缺口** | 裁定上一笔已入档,但效力写在了会被扫表读过的地方:`TC-*` 仍占着「允许继续发号」表第一行、用途列还写着「要进 C 断言标签」,那句"注意它已停发"只是表前的脚注;而那张表连表头行都在早先瘦身时丢了(GFM 里表格不能紧跟段落,整张塌成正文)。本笔:① 移出该行、补回表头与空行,『允许继续发号』写成**恰好 7 行**;② 表下加防误读框,把「不做了」的两条误读各钉一次——「维持原状所以还能发」与「停发所以顺手清掉/复用号」,并写明唯一重启入口 = 先裁定再回本节改表;③ 实测登记效力边界:registry 37 个 TC 类族仍有 35 个 `frozen: false` 带活游标,`docs/编号规范.md` §8 第 5 项碰不到它们(且 `cursor` 为空时该校验直接跳过),所以停发今天只有规范效力,机械化单独开卡走 §7.3;④ `docs/编号规范.md` §5.1 补「不在 7 行内第 ① 步就走不通」、§9.1 两条硬口径扩成三条(新增「停发 ≠ 待清」)并补效力边界段、§9.2 计数 8 → 7。同步:`AGENTS.md` 索引行、`docs/测试说明/测试文档模板规范.md` §6.3、`docs/门禁说明/host-unit-tests.md` §7 号段行(那里原文写着「新增用例要带号」,是最直接的误读源头)。零代码、零编号增删。 |
|
||||
| 2026-10-27 | **停发口径收口:`TC-*` 从『允许继续发号』表整行移出,并登记「机器面还没冻结」这个缺口** | 裁定上一笔已入档,但效力写在了会被扫表读过的地方:`TC-*` 仍占着「允许继续发号」表第一行、用途列还写着「要进 C 断言标签」,那句"注意它已停发"只是表前的脚注;而那张表连表头行都在早先瘦身时丢了(GFM 里表格不能紧跟段落,整张塌成正文)。本笔:① 移出该行、补回表头与空行,『允许继续发号』写成**恰好 7 行**;② 表下加防误读框,把「不做了」的两条误读各钉一次——「维持原状所以还能发」与「停发所以顺手清掉/复用号」,并写明唯一重启入口 = 先裁定再回本节改表;③ 实测登记效力边界:registry 37 个 TC 类族仍有 35 个 `frozen: false` 带活游标,`docs/编号规范.md` §8 第 5 项碰不到它们(且 `cursor` 为空时该校验直接跳过),所以停发今天只有规范效力,机械化单独开卡走 §7.3;④ `docs/编号规范.md` §5.1 补「不在 7 行内第 ① 步就走不通」、§9.1 两条硬口径扩成三条(新增「停发 ≠ 待清」)并补效力边界段、§9.2 计数 8 → 7。同步:`AGENTS.md` 索引行、`docs/测试说明/流程与规范/测试文档模板规范.md` §6.3、`docs/门禁说明/host-unit-tests.md` §7 号段行(那里原文写着「新增用例要带号」,是最直接的误读源头)。零代码、零编号增删。 |
|
||||
| 2026-10-27 | **批次三裁定「不做」:`TC-*` 保留现状但即日停发** | 用户原话「批次三,不坐」(即不做)。裁定写进 §9.1 批次三(含理由与两条硬口径)、`docs/编号规范.md` §4.1『已停发』栏加一行、§9 结果表同步。停发的硬口径:游标冻结、现存号只减不增、**新用例一律用语义化测试函数名 + 文档表格行名,不再配 `TC-` 号**;真要清则先让追溯器同时认新旧两种形态、核对通过后单独开卡,不许先改文档再改代码(会造悬空号)。留着的判据依据:`TC-*` 是 `docs/编号规范.md` §4.1 那条判据(有脚本按字面量匹配)唯一真满足的族,字母号的痛在「人读」侧,解法是不再造给人读的号,而不是拆掉机器面的把手。 |
|
||||
| 2026-10-27 | **语义标识定为唯一默认形态;编号收窄为「机器按字面量匹配」的例外,并首次给出现量清点与三批计划** | 用户原话:「不要用字母加数字的编号,简直太难以理解了,语义标识是最好的」。本笔:① 标题下的一句话从「允许用号的族只有 8 个」改成「语义标识是唯一默认、编号是例外」,并把 `docs/编号规范.md` §4.1 拆成『允许继续发号』8 族与『已停发、存量待清』4 族(`N-*` / `TM-*` / 台架阶段裸形 / `F-*`)——原表自称穷举,实际漏登记了这三类在用族,属真缺陷。② 新增 §9 存量清点(用门禁自身接口实测:26 族仍有引用、565 个字面量、1,108 个引用站点)与三批计划:批次一 62 站点不碰门禁即可清、批次二保护功能号 184 站点转功能名、批次三 `TC-*` 561 站点需先换追溯机制(等用户裁定)。③ §8.1 基线按 2026-10-27 复测重打:784 文件 / 7,828 字面量、护栏 2 实跑 1,161 / 上限 1,166。 |
|
||||
| 2026-10-26 | **编号治理收口:清死号 → 停发活号 → 本文重写为短版(用户三次裁定)** | 全仓字母+数字编号 10,956 → 8,230 处。① **清死号**:属主登记处已删或从未启用的号一律就地删号留事实、禁补号(文本实删约 1,557 处)。② **停发活号**:登记簿 `N-x`/`S-x`/`T-x`、专项(A 前缀 + 数字)、已删报告的 UI 簇(字母 U 紧跟一位数字,区间两端即该簇首尾两枚)共 20 个号转成语义短语(约 418 处)——登记簿表首格就是短语,旧号进 `scripts/archive/id_gate/id_aliases.json` 标 `retired-to-phrase`;已销项的死号**故意不进别名表**,让门禁继续咬残留引用。③ **本文瘦身**:619 行 → 229 行,删掉八原则长表、迁移映射表、模块码表与门禁细节(那些各有事实源:registry / 别名表 / `docs/门禁说明/id-check.md`),改成「先问三句再决定要不要发号」+ `docs/编号规范.md` §4.1 允许用号的族**穷举 = 8 个**。④ **门禁配套**:`check_ids.py` 加变更记录行豁免与第二根护栏 `undecidable_total_ceiling`(比值会被清号动作稀释,绝对数不会),债务台账还清到 0 条 → `--strict` 实为全量拦截,比例基线重打为 86.0%。**本表按用户 2026-10-26 的明确指示只保留最近一条**,更早沿革看 `git log` 与 `docs/门禁说明/id-check.md` §7.5(含其后的方案 B 一节);这是**本文档的例外**,不改变 `docs/编号规范.md` §5.5对其他文档「冻结历史不回改」的约束。 |
|
||||
|
||||
@@ -24,7 +24,7 @@ r"""
|
||||
- **Windows 原生侧没有 gcc / clang / gcov / lcov / gcovr**(全盘扫 0 处)→ gcov 那条最主流的路在
|
||||
Windows 侧走不通。**但 WSL2 Ubuntu 里有 gcc/gcov 15.2.0**,实测 16 套单测在 gcc 下全部编过、
|
||||
gcov -b -c 还给出分支覆盖——不用它当默认是因为**换编译器=换分母**(sha256.c:gcc 105 行 vs
|
||||
MSVC 114 行),详见 docs/测试说明/主机单测覆盖率口径.md §2.1 的决策记录。
|
||||
MSVC 114 行),详见 docs/测试说明/单元测试/主机单测覆盖率口径.md §2.1 的决策记录。
|
||||
- **MSVC 14.51(VS 2026/18)已不认 /coverage**:cl 只报 warning D9002「忽略未知选项」,
|
||||
然后**照常编译成功** → 拿它做覆盖率等于静默出假数据,绝不可用(/fsanitize=coverage 同)。
|
||||
- Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe(17.0)还在但已 deprecated,
|
||||
@@ -34,7 +34,7 @@ r"""
|
||||
MSVC 原生 exe + PDB,且**子进程退出码原样透传**(实测子进程 return 3 → collect 也返回 3)。
|
||||
- 结论:编译期插桩这条路在本机是断的,走**加载期动态插桩**(mscoverage collect)。
|
||||
|
||||
口径(一句话版,完整版见 docs/测试说明/主机单测覆盖率口径.md):
|
||||
口径(一句话版,完整版见 docs/测试说明/单元测试/主机单测覆盖率口径.md):
|
||||
行覆盖 = 至少执行过一次的可执行行 / 被插桩的可执行行;
|
||||
函数覆盖 = 至少有一行命中的函数 / 被插桩的函数;
|
||||
统计面 = 自研生产源码(App/**、Drivers/BSP/** 的 .c/.h),**不含**测试单元自身、
|
||||
@@ -73,7 +73,7 @@ r"""
|
||||
- **PDB 里的源路径大小写会漂**(盘符、VS 根),比对前先按仓库实际拼写归一,否则同一文件
|
||||
在基线里裂成两份。
|
||||
|
||||
设计依据:docs/测试说明/主机单测覆盖率口径.md
|
||||
设计依据:docs/测试说明/单元测试/主机单测覆盖率口径.md
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
|
||||
@@ -440,7 +440,7 @@ def write_baseline(path, modules, files, totals, tested_sources, untested):
|
||||
payload = {
|
||||
"schema": BASELINE_SCHEMA,
|
||||
"generated_by": "scripts/check_test_coverage.py --update-baseline",
|
||||
"note": "主机单测覆盖率基线。口径与工具链限制见 docs/测试说明/主机单测覆盖率口径.md。"
|
||||
"note": "主机单测覆盖率基线。口径与工具链限制见 docs/测试说明/单元测试/主机单测覆盖率口径.md。"
|
||||
"门禁判据:files[].lines_covered 与 funcs_covered 只增不减,下降即拦提交。",
|
||||
"totals": totals,
|
||||
"modules": modules,
|
||||
@@ -523,7 +523,7 @@ def diff_baseline(baseline, modules, files, totals, full_run):
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
def print_report(modules, files, totals, untested, generated, notes, regress, verbose):
|
||||
print("=== 主机单测覆盖率(口径:docs/测试说明/主机单测覆盖率口径.md)===")
|
||||
print("=== 主机单测覆盖率(口径:docs/测试说明/单元测试/主机单测覆盖率口径.md)===")
|
||||
print("")
|
||||
print("--- 各套单测(插桩运行)---")
|
||||
for name in sorted(modules):
|
||||
@@ -584,7 +584,7 @@ def write_markdown(path, modules, files, totals, untested, notes, regress):
|
||||
"# 主机单测覆盖率报告",
|
||||
"",
|
||||
"> 由 " + code("scripts/check_test_coverage.py") + " 生成;口径、工具链限制与盲区见 "
|
||||
+ code("docs/测试说明/主机单测覆盖率口径.md") + "。本报告是一次性快照,重跑即覆盖。",
|
||||
+ code("docs/测试说明/单元测试/主机单测覆盖率口径.md") + "。本报告是一次性快照,重跑即覆盖。",
|
||||
"",
|
||||
"## 总计",
|
||||
"",
|
||||
@@ -689,7 +689,7 @@ def run(args):
|
||||
|
||||
# 中间产物根:**跟着工作树走**,与主机单测同一个家(task-10)。旧写法是
|
||||
# tempfile.gettempdir()/dtu_test_cov —— 全机一个名字,多棵工作树并行跑覆盖率就
|
||||
# 互相覆盖 exe/PDB/cov 文件(docs/测试说明/主机单测覆盖率口径.md 里"并行期每人
|
||||
# 互相覆盖 exe/PDB/cov 文件(docs/测试说明/单元测试/主机单测覆盖率口径.md 里"并行期每人
|
||||
# 只跑 --module 自己模块"那条规避,就是为了绕开它;分家之后不再需要)。
|
||||
# 复用 harness 的同一套判据(含 DTU_HOST_BUILD 覆盖),避免两处口径漂移。
|
||||
_host_build_root = getattr(harness, "host_build_root", None)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
& '.venv\\Scripts\\python.exe' scripts/check_test_suite.py --allow-test-build
|
||||
& '.venv\\Scripts\\python.exe' scripts/check_test_suite.py --file <路径>
|
||||
|
||||
设计依据:docs/任务规划/登记簿.md;docs/测试说明/测试开发标准流程.md §3.1
|
||||
设计依据:docs/任务规划/登记簿.md;docs/测试说明/流程与规范/测试开发标准流程.md §3.1
|
||||
创建日期:2026-10-01
|
||||
"""
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""check_test_traceability.py - 用例追溯校验(默认仅告警,不阻断提交)。
|
||||
|
||||
背景(docs/测试说明/实机测试实施指南.md §8.2;原复审项 S4,已闭环):
|
||||
背景(docs/测试说明/板级测试/实机测试实施指南.md §8.2;原复审项 S4,已闭环):
|
||||
文档声称 91 个 TC、代码有 222 个 TEST_CHECK(断言点数 > 用例数正常),
|
||||
但**双向是否一一对应无人校验**——某个 TC 可能"文档写了、代码没实现",
|
||||
或"代码实现了、文档没登记"。纯靠人肉比对。
|
||||
@@ -12,7 +12,8 @@
|
||||
|
||||
① 代码侧:`test/board/*.c`(含 `*_test_task.c` 与 `net_latency_test.c`)
|
||||
里出现的 `TC-<PFX>-<NNN>`(注释、DBG_INFO 串皆计入);
|
||||
② 文档侧:`docs/测试说明/*_Test_Guide.md` 里出现的 `TC-<PFX>-<NNN>`。
|
||||
② 文档侧:`docs/测试说明/**/*_Test_Guide.md` 里出现的 `TC-<PFX>-<NNN>`
|
||||
(2026-10-30 测试说明目录分层后改**递归**匹配,板级指南现居 `板级测试/`)。
|
||||
|
||||
[DOC-ONLY] 文档有、代码无 -> 未实现(或代码未标注)
|
||||
[CODE-ONLY] 代码有、文档无 -> 未登记(或文档漏写)
|
||||
@@ -41,7 +42,7 @@
|
||||
& '.venv\\Scripts\\python.exe' scripts/check_test_traceability.py --strict
|
||||
& '.venv\\Scripts\\python.exe' scripts/check_test_traceability.py --verbose
|
||||
|
||||
设计依据:docs/测试说明/实机测试实施指南.md §8.2(S4 用例追溯,原复审项已闭环)
|
||||
设计依据:docs/测试说明/板级测试/实机测试实施指南.md §8.2(S4 用例追溯,原复审项已闭环)
|
||||
创建日期:2026-10-03
|
||||
"""
|
||||
|
||||
@@ -189,11 +190,14 @@ def main():
|
||||
host_dir = REPO_ROOT / "test" / "host"
|
||||
|
||||
code_files = sorted(code_dir.glob("*.c")) if code_dir.is_dir() else []
|
||||
doc_files = sorted(doc_dir.glob("*_Test_Guide.md")) if doc_dir.is_dir() else []
|
||||
# 2026-10-30:docs/测试说明 按用途分了子目录(板级测试/ 单元测试/ …,见
|
||||
# docs/测试说明/README.md),文档侧一律**递归**找,否则分层等于静默放行——
|
||||
# 这里若还是 glob 单层,doc_files 会变成空表并直接 return 2(门禁瞎掉)。
|
||||
doc_files = sorted(doc_dir.rglob("*_Test_Guide.md")) if doc_dir.is_dir() else []
|
||||
if not args.board_only:
|
||||
# 主机侧单测一侧:7 篇「单元测试说明.md」+ test/host 下的测试代码(*.c / *_test.py /
|
||||
# run_unit_test.py)——TC 编号在两侧都是**追溯链的锚点**,缺一侧就是断链。
|
||||
doc_files += sorted(doc_dir.glob("*单元测试说明.md"))
|
||||
doc_files += sorted(doc_dir.rglob("*单元测试说明.md"))
|
||||
if host_dir.is_dir():
|
||||
code_files += sorted(host_dir.rglob("*.c"))
|
||||
code_files += sorted(host_dir.rglob("*.py"))
|
||||
@@ -202,7 +206,7 @@ def main():
|
||||
print(f"[ERR] 未找到代码侧文件:{code_dir}/*.c", file=sys.stderr)
|
||||
return 2
|
||||
if not doc_files:
|
||||
print(f"[ERR] 未找到文档侧文件:{doc_dir}/*_Test_Guide.md", file=sys.stderr)
|
||||
print(f"[ERR] 未找到文档侧文件:{doc_dir}/**/*_Test_Guide.md", file=sys.stderr)
|
||||
return 2
|
||||
|
||||
code_ids, code_counts, code_intents = collect(code_files, "code", want_intent=True)
|
||||
|
||||
+4
-4
@@ -19,7 +19,7 @@
|
||||
**fail-closed**:没有体积同码凭证、或代码与测量不同码即红——不再"没跑=通过"。
|
||||
CI 侧的「体积门禁」步跑的是同一条实现(那条无需 Keil,见 .gitea/workflows/ci.yml)。
|
||||
主机侧纯逻辑单测(host-unit) = `test/host/**/run_unit_test.py`
|
||||
覆盖率口径与盲区 → docs/测试说明/主机单测覆盖率口径.md
|
||||
覆盖率口径与盲区 → docs/测试说明/单元测试/主机单测覆盖率口径.md
|
||||
(旧旗标 `--coverage` 的独立一步已并入 manual 段:跑的是**同一根** pre-commit 钩子
|
||||
test-coverage,与 CI 逐字同口径,不再重复跑一遍插桩)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
& '.venv\\Scripts\\python.exe' scripts/ci_local.py --keep-going # 失败也继续跑完
|
||||
& '.venv\\Scripts\\python.exe' scripts/ci_local.py --commits 20 # 提交信息校验条数
|
||||
|
||||
设计依据:`.gitea/workflows/ci.yml`;docs/测试说明/测试开发标准流程.md §9
|
||||
设计依据:`.gitea/workflows/ci.yml`;docs/测试说明/流程与规范/测试开发标准流程.md §9
|
||||
创建日期:2026-10-01
|
||||
"""
|
||||
|
||||
@@ -553,7 +553,7 @@ def run_manual_stage():
|
||||
print("[SUMMARY] manual: {} -- rc={} {}".format(hook, rc, verdict[-90:]))
|
||||
if hook == "test-coverage" and rc == 2:
|
||||
print(" (rc 2 = 环境错误:多半没装 VS 的「代码覆盖率工具」组件,或需设")
|
||||
print(" DTU_MS_COVERAGE。口径与排障 → docs/测试说明/主机单测覆盖率口径.md)")
|
||||
print(" DTU_MS_COVERAGE。口径与排障 → docs/测试说明/单元测试/主机单测覆盖率口径.md)")
|
||||
elif hook == "test-coverage" and rc == 1:
|
||||
print(" (rc 1 = 有单测失败,或已覆盖行/函数相对基线回退;确认无误后")
|
||||
print(" 跑 scripts/check_test_coverage.py --update-baseline 重登基线)")
|
||||
@@ -700,7 +700,7 @@ def run_host_unit_tests(args):
|
||||
print("[FAIL] {}(退出码 {})".format(rel, rc))
|
||||
if rc == 2:
|
||||
print(" (退出码 2 = 环境错误:多半是本机未装 MSVC,见 "
|
||||
"docs/测试说明/测试开发标准流程.md §4.2)")
|
||||
"docs/测试说明/流程与规范/测试开发标准流程.md §4.2)")
|
||||
rc_all = 1
|
||||
if not args.keep_going:
|
||||
break
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
"new": "周期 CONVST 重触发",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -30,8 +30,8 @@
|
||||
"new": "TPAFE 快照消费",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -54,8 +54,8 @@
|
||||
"new": "STM32 ADC1 启动与扫描",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -78,8 +78,8 @@
|
||||
"new": "通道语义映射",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -102,8 +102,8 @@
|
||||
"new": "通道标定(一次系数 + 零漂)",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -126,8 +126,8 @@
|
||||
"new": "采样有效性校验",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -150,8 +150,8 @@
|
||||
"new": "等周波采样(软件测频 + 调频闭环)",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -174,8 +174,8 @@
|
||||
"new": "二次谐波/五次谐波提取入口",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -198,8 +198,8 @@
|
||||
"new": "全周傅氏系数表",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -222,8 +222,8 @@
|
||||
"new": "基波相量实例",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -246,8 +246,8 @@
|
||||
"new": "相量有效值输出",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -270,8 +270,8 @@
|
||||
"new": "相位输出",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -294,8 +294,8 @@
|
||||
"new": "线/负序/零序合成",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -318,8 +318,8 @@
|
||||
"new": "每 1 ms 滑动窗刷新",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -342,8 +342,8 @@
|
||||
"new": "双区指针原子交换",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -366,8 +366,8 @@
|
||||
"new": "三段式相间过流",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -390,8 +390,8 @@
|
||||
"new": "三段式零序过流",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -414,8 +414,8 @@
|
||||
"new": "过频 / 低频",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -438,8 +438,8 @@
|
||||
"new": "跳闸出口(KO)",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -462,8 +462,8 @@
|
||||
"new": "出口自检",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -486,8 +486,8 @@
|
||||
"new": "SOE 记录",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -510,8 +510,8 @@
|
||||
"new": "动作记录",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -534,8 +534,8 @@
|
||||
"new": "定值校验和",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
@@ -558,8 +558,8 @@
|
||||
"new": "自检失败闭锁",
|
||||
"files": [
|
||||
"docs/算法/继电保护功能复现规划.md",
|
||||
"docs/测试说明/boot_log_data/README.md",
|
||||
"docs/测试说明/相量层单元测试说明.md",
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md",
|
||||
"docs/测试说明/单元测试/相量层单元测试说明.md",
|
||||
"docs/硬件平台/ADC通道映射说明.md",
|
||||
"App/algo/*.c",
|
||||
"App/algo/*.h",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"files": [
|
||||
"docs/问题记录/GD5F2GQ5UE_Trap_Records.md",
|
||||
"docs/问题记录/项目审查与优化建议报告.md",
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md",
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c",
|
||||
"Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
|
||||
"Drivers/BSP/GD5F2GQ5UE/nand_ftl.c",
|
||||
@@ -26,7 +26,7 @@
|
||||
"old": "陷阱 (?P<n>\\d{2})\\b",
|
||||
"new": "TRAP-GD5F-{n:02d}",
|
||||
"files": [
|
||||
"docs/测试说明/GD5F2GQ5UE_Test_Guide.md"
|
||||
"docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md"
|
||||
],
|
||||
"note": "同一属主的中文形「见陷阱 01」→ 与空格形合并成同一个号"
|
||||
},
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
"batch": "批次四(2026-10-27 实测清点):复审残号 S-REVIEW + 两条无主死号的残留引用收口(删号留事实)",
|
||||
"applied_by": "scripts/rename_ids.py --no-alias",
|
||||
"record": "docs/编号规范.md §4.1.1(复审残号 S1~S14 / E-xx → 写条目本身)、§4.5、§7.3",
|
||||
"note": "只清「号当标识用」的标注与待办用法;别名表**故意不写**:这些裸形(S1/S4/S5/S7/S9/S11)在 .c/.h 注释、.pre-commit-config.yaml 与在飞的 docs/测试说明/自动化测试流程.md 里还有活引用,写进别名表等于把那些残留一起洗成「已解析」(§4.1.1:部分死号故意不进别名表,好让门禁继续咬残留引用)。刻意不碰:① 属主登记处 docs/任务规划/测试与架构专项.md(§2.1 S12 定义行 + 首行指针;删行销项属 Ask-first);② 变更记录行与「原复审项 S4,已闭环」这类显式历史标注;③ 任何 .c/.h(改注释也要重跑 @build,本批零代码);④ 工作区里别人在飞的脏文件;⑤ 实机测试实施指南.md:5「(S7、A1~A4)」——A1~A4 与本文 A 表(前置检查 A2~A6)同形、语义待属主确认,按 §7.3 第 3 条不猜。",
|
||||
"note": "只清「号当标识用」的标注与待办用法;别名表**故意不写**:这些裸形(S1/S4/S5/S7/S9/S11)在 .c/.h 注释、.pre-commit-config.yaml 与在飞的 docs/测试说明/流程与规范/自动化测试流程.md 里还有活引用,写进别名表等于把那些残留一起洗成「已解析」(§4.1.1:部分死号故意不进别名表,好让门禁继续咬残留引用)。刻意不碰:① 属主登记处 docs/任务规划/测试与架构专项.md(§2.1 S12 定义行 + 首行指针;删行销项属 Ask-first);② 变更记录行与「原复审项 S4,已闭环」这类显式历史标注;③ 任何 .c/.h(改注释也要重跑 @build,本批零代码);④ 工作区里别人在飞的脏文件;⑤ 实机测试实施指南.md:5「(S7、A1~A4)」——A1~A4 与本文 A 表(前置检查 A2~A6)同形、语义待属主确认,按 §7.3 第 3 条不猜。",
|
||||
"batches": [
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/链路延迟测试说明.md"
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md"
|
||||
],
|
||||
"old": "基线行为;可选优化 (?P<n>S7)(poll 前置 \\+ while 排空),低优先",
|
||||
"new": "基线行为;可选优化(poll 前置 + while 排空),低优先",
|
||||
@@ -17,7 +17,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/链路延迟测试说明.md"
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md"
|
||||
],
|
||||
"old": "其余待办 (?P<n>S9)(按键后立即取帧",
|
||||
"new": "其余待办(按键后立即取帧",
|
||||
@@ -26,7 +26,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/链路延迟测试说明.md"
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md"
|
||||
],
|
||||
"old": "^4\\. \\*\\*(?P<n>S1)\\*\\* 超时参数分档",
|
||||
"new": "4. 超时参数分档",
|
||||
@@ -35,7 +35,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/链路延迟测试说明.md"
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md"
|
||||
],
|
||||
"old": "^6\\. \\*\\*(?P<n>S4)\\*\\* 发送块配额与 MSS",
|
||||
"new": "6. 发送块配额与 MSS",
|
||||
@@ -44,7 +44,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/链路延迟测试说明.md"
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md"
|
||||
],
|
||||
"old": "^7\\. \\*\\*(?P<n>S5)\\*\\* 去掉一次 3200B 拷贝",
|
||||
"new": "7. 去掉一次 3200B 拷贝",
|
||||
@@ -53,7 +53,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/链路延迟测试说明.md"
|
||||
"docs/测试说明/专项验证/链路延迟测试说明.md"
|
||||
],
|
||||
"old": "^8\\. \\*\\*(?P<n>S7)\\*\\* uiTask:",
|
||||
"new": "8. uiTask:",
|
||||
@@ -62,7 +62,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/实机测试实施指南.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md"
|
||||
],
|
||||
"old": "堆低水位告警实测(P1-B / (?P<n>S11))",
|
||||
"new": "堆低水位告警实测(P1-B)",
|
||||
@@ -71,7 +71,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/实机测试实施指南.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md"
|
||||
],
|
||||
"old": "GD5F 错误通道回归(P2-A / (?P<n>S9))",
|
||||
"new": "GD5F 错误通道回归(P2-A)",
|
||||
@@ -80,7 +80,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/实机测试实施指南.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md"
|
||||
],
|
||||
"old": "工程卫生(P3 / (?P<n>S5) \\+ S4 \\+ 待核实项)",
|
||||
"new": "工程卫生(P3 + 待核实项)",
|
||||
@@ -89,7 +89,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/实机测试实施指南.md"
|
||||
"docs/测试说明/板级测试/实机测试实施指南.md"
|
||||
],
|
||||
"old": "含新增 (?P<n>S5) `test-cppcheck`",
|
||||
"new": "含新增 `test-cppcheck`",
|
||||
@@ -107,7 +107,7 @@
|
||||
{
|
||||
"family": "S-REVIEW",
|
||||
"files": [
|
||||
"docs/测试说明/存储维护与容量恢复.md"
|
||||
"docs/测试说明/专项验证/存储维护与容量恢复.md"
|
||||
],
|
||||
"old": "自检台账清零,重建 (?P<n>S7) 审计基线",
|
||||
"new": "自检台账清零,重建联合判定审计基线",
|
||||
@@ -116,7 +116,7 @@
|
||||
{
|
||||
"family": "S-LDG",
|
||||
"files": [
|
||||
"docs/测试说明/boot_log_data/README.md"
|
||||
"docs/测试说明/测试数据/boot_log_data/README.md"
|
||||
],
|
||||
"old": "本流程立项:原 `../../任务规划/README\\.md` (?P<n>S-2)(2026-09-22 提出",
|
||||
"new": "本流程立项:原 `../../任务规划/README.md` 的「启动日志固化流程」条目(2026-09-22 提出",
|
||||
@@ -125,7 +125,7 @@
|
||||
{
|
||||
"family": "E-AUD",
|
||||
"files": [
|
||||
"docs/测试说明/m2_data/README.md"
|
||||
"docs/测试说明/测试数据/m2_data/README.md"
|
||||
],
|
||||
"old": "(`--ftp-stress`,(?P<n>E-02) 复现)",
|
||||
"new": "(`--ftp-stress` 复现)",
|
||||
|
||||
@@ -39,6 +39,14 @@ import subprocess
|
||||
import sys
|
||||
import urllib.parse
|
||||
|
||||
# 控制台编码兜底(同 check_ids.py / check_doc_links.py / check_test_traceability.py):
|
||||
# 裸跑环境的代码页常是 936(GBK),而本脚本收尾提示里有 `ℹ` → print 抛 UnicodeEncodeError。
|
||||
# 偏偏那时 **文件已经 git mv + 引用改写落盘**,于是脚本带 traceback 退出 1:
|
||||
# 退出码与真实结果相反(2026-10-30 一次挪 28 个路径实测,28 次全是「做完了却报 1」)。
|
||||
for _stream in (sys.stdout, sys.stderr):
|
||||
if hasattr(_stream, "reconfigure"):
|
||||
_stream.reconfigure(encoding="utf-8", errors="replace")
|
||||
|
||||
REPO_ROOT = pathlib.Path(__file__).resolve().parent.parent
|
||||
|
||||
# 不扫描的路径片段(第三方 / 生成物 / 本地状态)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# docs/内存管理/RAM使用分析与优化方案.md §4.0.6 第③条;用法:scripts/stack_gate.py。
|
||||
#
|
||||
# 容差是**推导值不是拍的**:tol(task) = 向上取整到 16 B 格的 max(128 B, 2 x 同镜像实测最大摆动)。
|
||||
# 实测来源(台架原始日志在 docs/测试说明/boot_log_data/):
|
||||
# 实测来源(台架原始日志在 docs/测试说明/测试数据/boot_log_data/):
|
||||
# 2026-10-26 task-30(同一份 1d4b6a17 像、4 圈仅复位):uiTask 4116~4188 = 72 B、adcTask 80 B
|
||||
# 2026-10-27 task-42(HEAD 像、4 圈仅复位):全部任务零摆动
|
||||
# -> 最大同镜像摆动 80 B => tol = max(128, 160) = **160 B**,全任务统一。
|
||||
|
||||
|
@@ -780,7 +780,7 @@
|
||||
"ok": true
|
||||
}
|
||||
},
|
||||
"note": "主机单测覆盖率基线。口径与工具链限制见 docs/测试说明/主机单测覆盖率口径.md。门禁判据:files[].lines_covered 与 funcs_covered 只增不减,下降即拦提交。",
|
||||
"note": "主机单测覆盖率基线。口径与工具链限制见 docs/测试说明/单元测试/主机单测覆盖率口径.md。门禁判据:files[].lines_covered 与 funcs_covered 只增不减,下降即拦提交。",
|
||||
"schema": 1,
|
||||
"tested_sources": [
|
||||
"App/algo/adc_cal.c",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
- 「无源 vs 真停滞」判别:docs/子系统设计/控制台单写者日志设计说明.md 文末附录
|
||||
(日志静默观察项与单写者化的合并评估,2026-10-25)——静默段贴边(前一行 / 结束后一窗)命中
|
||||
「丢弃账 / 故障账」留痕行 = 真停滞嫌疑;零命中 = 无源(系统安静,正常形态)。
|
||||
- 开机良性豁免:docs/测试说明/实机测试实施指南.md §9 第 8 条——开机屏障期
|
||||
- 开机良性豁免:docs/测试说明/板级测试/实机测试实施指南.md §9 第 8 条——开机屏障期
|
||||
(reset cause / armed / netTask: started 等锚点后一窗)偶见的单抽样 MISS start
|
||||
属固有交错;且自 v1.1 起 MISS start 整体降级为**诊断行**(复合缺席边沿,不代表
|
||||
停喂,v2-on-ui 看门狗 v1.5 按位分账语义)——违规判定只看 task stall 行与
|
||||
@@ -39,7 +39,7 @@ v1.1(2026-10-25,道F task-22 / 大窗判读 F1):违规口径 = stall>0
|
||||
MISS 计违规,经 2026-10-25 台架 70min 窗逐窗归因属收紧过头,予以纠正)。stall 行
|
||||
语义随看门狗 v1.5 按位分账变化(行文本不变):每行 = 同一任务 800ms 单串,见
|
||||
docs/子系统设计/看门狗设计说明.md §5.3/§6.1;使用文档
|
||||
docs/测试说明/实机测试实施指南.md §7.2。
|
||||
docs/测试说明/板级测试/实机测试实施指南.md §7.2。
|
||||
"""
|
||||
|
||||
import argparse
|
||||
|
||||
Reference in New Issue
Block a user