fix(编号): 批 6 追溯器分档 + 板级 NET 用例号标注归一
步骤 1:追溯器分两档(不改数据,改判据) - BENCH:文档**定义行**(标题行或表格首格)带「(硬件层)」或其所属章节带的号 → 人工台架用例,不期望有 C 代码载体;NOTIMPL:定义行标了未实现/待补/暂缓/已取消 - 两档**单列示数恒打印**、明细进 --verbose,不是静默豁免;也不等于"已验证" - 两个实测坑写在脚本注释里:① 按"任意行出现即算"实现时 BENCH 收 14 个号却只消掉 1 处差异(同一号被别处引用一次就复活)→ 改为只认定义行 + 从文档全集整体减档; ② 载体类型必须由定义处决定,引用行不影响判断 - 另把 has_intent() 收窄到同号所在行(原先整文件任意位置有人话就算过关) 步骤 2:板级 NET 用例标注归一(真债,改名 109 处 / 5 文件) - 取证发现"文档声明却无载体"绝大多数是**标注形态烂**:实现体里写的是 TC204 / TC-201 / TC 703 / TC1501 / TC1502b(三种畸形),文档写 TC-NET-204 等 - 序号一位不改、只补模块码(§7.1);作用域限定 5 个真载体文件: test/board/ch395f_test_task.c(67) net_test_task.c(37) net_test_task.h(1) test/host/ch395f_socket_test.py(3) Drivers/BSP/CH395F/ch395f.c(1) - 审计轨迹 scripts/rename_maps/batch6-net-annotate.json;别名自动登记(scoped) 实测 - DOC-ONLY 29 → 15:701~704 的 NET 层实现体一直存在(net_test_task.c), 此前因裸形标注被误判成"未实现";1501~1503 属硬件层人工 + 同样裸形 - 交集 260 不变、代码侧 578 不减(识别面没缩);BENCH 14 个号 / NOTIMPL 1 个 - 台账 --prune-backlog 还清 6 条(只减不增);@build 0 错误 0 警告 (Program Size 与改前逐字节相同:Code=213356 RO=18580 RW=1184 ZI=131480 → 证实只动了注释与日志串);7 个改动文件 BOM/CR/U+FFFD 与 HEAD 逐项一致 剩余 15 处 DOC-ONLY 的组成(步骤 3 未完,下轮处理) - 4 处文档侧无模块码形态(TC-1003/206/501/704)→ 属 ② 大批 - TC-NET-607 一条是历史指称(原文"原 607/608/609,现 701/702/703") - 真未实现 10 条:TC-NET-101/102/601/606/801/802/901/902/1006/1101 ——其中 801/802/901/902 曾在 2026-08 的代码里有载体、后被重构丢掉,最值得补
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
② 代码有、母号不在文档、**且号旁边没写人话意图** → CODE-ONLY(真未登记);
|
||||
③ 代码有、靠"旁边有意图"放过 → 单独打印为 IN-CODE,**弱于文档**,不算已登记。
|
||||
小写子项后缀(`TC-XXX-003b`)按母号算(`subitem_ok`),与编号门禁同口径。
|
||||
**批 6 再分两档**:硬件层人工用例(标题/章节含「(硬件层)」)记为 `BENCH`、文档已标未实现/待补/暂缓/已取消的记为 `NOTIMPL`,两者**单列示数**不进差异——但也不是「已覆盖」,只是「不该在这里期望代码」。
|
||||
**2026-10-21 第二次口径修正(批 5)**:变更记录行与 `[示例]`/`[计划]` 行**不参与比对**
|
||||
(冻结历史按编号规范 §8.1 不回改,旧号靠 `id_aliases.json` 解析;这条豁免另三支脚本早有,本脚本是最后缺它的一个,`DOC-ONLY` 因此 38 → 29、交集不变);被豁免的号存进 `frozen_ids`,`--verbose` 全量列出——**豁免不等于已对应**,别拿它当收敛。
|
||||
|
||||
@@ -74,6 +75,22 @@ PLACEHOLDER_PREFIXES = {"XXX"}
|
||||
# 该号在批 2 已随代码改名成 TC-ADCIN-*,历史行不该回改,拿它去代码里找同号必然落空。
|
||||
SKIP_LINE = re.compile(r"\[示例\]|\[计划\]|^\s*\|\s*20\d\d-\d\d-\d\d\s*\|")
|
||||
frozen_ids: set = set() # 只在 --verbose 里列:被豁免的号(历史/示例),不是"已对应"
|
||||
# 2026-10-21 批 6:`DOC-ONLY` 里混着两种"不是缺口"的号,一律**单列示数**而不是塞进差异,
|
||||
# 也**不静默消失**——数量恒打印,明细 `--verbose` 可查:
|
||||
# BENCH 硬件层人工用例(标题或所属章节含「(硬件层)」):本来就没有代码载体,
|
||||
# 属主是人工台架步骤,不是 C 代码(例:§12.5 阶段 15「自愈驱动原语(硬件层,无需 PC)」)。
|
||||
# NOTIMPL 文档已显式标了状态词(未实现 / 待补 / 暂缓 / 已取消):是**已登记的欠账**,
|
||||
# 不是"查无此号"的假警报。
|
||||
# ⚠ 反过来别把 BENCH 当"已覆盖":它只说明"不该期望代码里有",不证明人工真做过。
|
||||
BENCH_RX = re.compile(r"[((]\s*硬件层")
|
||||
NOTIMPL_RX = re.compile(r"未实现|待补|暂缓|已取消")
|
||||
# 定义行(决定这个号的**载体类型**):markdown 标题行,或表格里号在**首格**的行。
|
||||
# 引用行(正文里"同 TC-NET-601"、"参见 TC-NET-302")不改变载体判断——否则一个人工
|
||||
# 用例只要在别处被提一次,就又被要求"代码里必须有"(2026-10-21 实测:按"任意行都算"
|
||||
# 实现时,BENCH 收了 16 个号却只消掉 1 处差异,等于没生效)。
|
||||
DEF_LINE_RX = re.compile(r"^(?:#{2,6}\s|\|\s*\*{0,2}\s*TC-)")
|
||||
bench_ids: set = set()
|
||||
notimpl_ids: set = set()
|
||||
|
||||
|
||||
def _prefix(tc: str) -> str:
|
||||
@@ -110,7 +127,8 @@ def collect(paths, label, want_intent=False):
|
||||
"""返回 (ids_set, per_prefix_counts[, intent_set])。逐文件扫描,缺文件不致命。"""
|
||||
ids = set()
|
||||
intents = set()
|
||||
global frozen_ids
|
||||
global frozen_ids, bench_ids, notimpl_ids
|
||||
in_bench_section = False
|
||||
for p in paths:
|
||||
try:
|
||||
text = p.read_text(encoding="utf-8", errors="replace")
|
||||
@@ -118,6 +136,11 @@ def collect(paths, label, want_intent=False):
|
||||
print(f"[ERR] 无法读取 {p}: {e}", file=sys.stderr)
|
||||
return (None, None, None) if want_intent else (None, None)
|
||||
for line in text.splitlines():
|
||||
if re.match(r"^#{2,6}\s+\S", line): # markdown 章节:记住是否硬件层
|
||||
in_bench_section = bool(BENCH_RX.search(line))
|
||||
is_def = bool(DEF_LINE_RX.search(line))
|
||||
bench = bool(BENCH_RX.search(line)) or (in_bench_section and is_def)
|
||||
notimpl = bool(NOTIMPL_RX.search(line))
|
||||
skip = bool(SKIP_LINE.search(line))
|
||||
for m in TC_RE.findall(line):
|
||||
if _prefix(m) in PLACEHOLDER_PREFIXES:
|
||||
@@ -125,6 +148,13 @@ def collect(paths, label, want_intent=False):
|
||||
if skip: # 冻结历史 / 示例行:不参与双向比对,只留痕
|
||||
frozen_ids.add(m)
|
||||
continue
|
||||
if label == "doc" and is_def:
|
||||
# 只对文档侧分类:载体类型由**文档里的定义行**说了算,
|
||||
# 且必须从全集里整体减掉(见上面注释的实测坑)
|
||||
if bench:
|
||||
bench_ids.add(m) # 硬件层人工 → 不期望代码载体
|
||||
if notimpl:
|
||||
notimpl_ids.add(m) # 已标未实现/待补 → 已登记的欠账
|
||||
ids.add(m)
|
||||
if want_intent and has_intent(line, m):
|
||||
intents.add(m)
|
||||
@@ -173,6 +203,9 @@ def main():
|
||||
if code_ids is None or doc_ids is None:
|
||||
return 2
|
||||
|
||||
# 文档侧的两个单列档整体从文档全集里减掉后再比差异(数量已在上面打印,
|
||||
# --verbose 有明细):BENCH = 人工台架定义,NOTIMPL = 已显式登记未实现
|
||||
doc_ids -= bench_ids | notimpl_ids
|
||||
doc_bases = {_base(i) for i in doc_ids}
|
||||
# 真差异定义(B 层口径 2026-10-21,docs/编号规范.md §8.1):
|
||||
# ① 文档声明了、代码里没有 → 未实现/未标注(保留,这是硬断链);
|
||||
@@ -189,7 +222,11 @@ def main():
|
||||
print(f"代码侧:{len(code_files)} 个文件,{len(code_ids)} 个 TC")
|
||||
print(f"文档侧:{len(doc_files)} 个文件,{len(doc_ids)} 个 TC")
|
||||
print(f"交集:{len(code_ids & doc_ids)}")
|
||||
# 注意:交集/文档侧计数在减档之前打印,这里补一行减档后的口径
|
||||
print(f"(减 BENCH/NOTIMPL 后参与比对:文档 {len(doc_ids)}、交集 {len(code_ids & doc_ids)})")
|
||||
print(f"豁免:变更记录/[示例]/[计划] 行的号 {len(frozen_ids)} 个(口径同 check_ids.py,见 §8.1)")
|
||||
print(f"单列 BENCH(硬件层人工用例,不期望有代码载体):{len(bench_ids)} 个")
|
||||
print(f"单列 NOTIMPL(文档已标未实现/待补/暂缓/已取消):{len(notimpl_ids)} 个")
|
||||
|
||||
if args.verbose:
|
||||
print("--- 各前缀 TC 计数(代码 / 文档)---")
|
||||
@@ -211,6 +248,12 @@ def main():
|
||||
for i in code_only_in_code:
|
||||
print(f" {i}")
|
||||
|
||||
for name, bag in (("BENCH 硬件层人工", bench_ids), ("NOTIMPL 已登记未实现", notimpl_ids)):
|
||||
if args.verbose and bag:
|
||||
print("--- %s:不参与差异比对,但**不等于已验证**(共 %d 个)---" % (name, len(bag)))
|
||||
for i in sorted(bag):
|
||||
print(" ", i)
|
||||
|
||||
if args.verbose and frozen_ids:
|
||||
print("--- 被豁免的号(变更记录 / [示例] / [计划] 行,共 %d 个)**不是已对应**,"
|
||||
"历史旧号靠 id_aliases.json 解析 ---" % len(frozen_ids))
|
||||
|
||||
+265
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"generated_from": "docs/编号规范.md §7 迁移映射 + §4.3 冻结前缀;本表只登记**仓库里已实际出现**的旧字面量 → 现行字面量,不做尚未落地的批量改写(§7.2 阶段 1 一律保留存量)",
|
||||
"note": "旧号引用不因本表而改写:本表只让门禁把「旧号引用」判成可解析(校验 3 悬空引用 / 校验 4 重复定义)。批量改写属 §9 阶段 1,须逐批 dry-run + 三重复核(§7.3)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。",
|
||||
"note": "旧号引用不因本表而改写:本表只让门禁把「旧号引用」判成可解析(校验 3 悬空引用 / 校验 4 重复定义)。批量改写属 §9 阶段 1,须逐批 dry-run + 三重复核(§7.3)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。 带 scope 的条目只在所列文件内生效(同一裸形字面量可能属多族,全局别名会把真撞号洗成已解析)。",
|
||||
"aliases": {
|
||||
"N-31": {
|
||||
"to": null,
|
||||
@@ -2829,6 +2829,270 @@
|
||||
"MDK-ARM/retracted_bench_20260922/README.txt",
|
||||
"scripts/README.md"
|
||||
]
|
||||
},
|
||||
"TC-201": {
|
||||
"to": "TC-NET-201",
|
||||
"status": "renamed",
|
||||
"note": "阶段 2 芯片层 TCP Client 用例 201~204 的裸形标注(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC-203": {
|
||||
"to": "TC-NET-203",
|
||||
"status": "renamed",
|
||||
"note": "阶段 2 芯片层 TCP Client 用例 201~204 的裸形标注(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC201": {
|
||||
"to": "TC-NET-201",
|
||||
"status": "renamed",
|
||||
"note": "阶段 2 芯片层 TCP Client 用例 201~204 的裸形标注(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC202": {
|
||||
"to": "TC-NET-202",
|
||||
"status": "renamed",
|
||||
"note": "阶段 2 芯片层 TCP Client 用例 201~204 的裸形标注(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC203": {
|
||||
"to": "TC-NET-203",
|
||||
"status": "renamed",
|
||||
"note": "阶段 2 芯片层 TCP Client 用例 201~204 的裸形标注(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC204": {
|
||||
"to": "TC-NET-204",
|
||||
"status": "renamed",
|
||||
"note": "阶段 2 芯片层 TCP Client 用例 201~204 的裸形标注(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC 701": {
|
||||
"to": "TC-NET-701",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC 702": {
|
||||
"to": "TC-NET-702",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC 703": {
|
||||
"to": "TC-NET-703",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC 704": {
|
||||
"to": "TC-NET-704",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC701": {
|
||||
"to": "TC-NET-701",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC702": {
|
||||
"to": "TC-NET-702",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC703": {
|
||||
"to": "TC-NET-703",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC704": {
|
||||
"to": "TC-NET-704",
|
||||
"status": "renamed",
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC-1501": {
|
||||
"to": "TC-NET-1501",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC-1502": {
|
||||
"to": "TC-NET-1502",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC-1502b": {
|
||||
"to": "TC-NET-1502b",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC-1503": {
|
||||
"to": "TC-NET-1503",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC1501": {
|
||||
"to": "TC-NET-1501",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC1502": {
|
||||
"to": "TC-NET-1502",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC1502b": {
|
||||
"to": "TC-NET-1502b",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
},
|
||||
"TC1503": {
|
||||
"to": "TC-NET-1503",
|
||||
"status": "renamed",
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)(scripts/rename_ids.py 批:族 TC)|旧号仅在本批 scope 内指向新号;scope 外同字面量属其它族,不受本条影响",
|
||||
"scope": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
]
|
||||
}
|
||||
},
|
||||
"id_aliases": {}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"schema": 1,
|
||||
"note": "编号债务台账(docs/编号规范.md §8.4):--strict 只对**台账之外**的新错误级问题拦提交。台账只许减不许增——还清的用 --prune-backlog 收掉;确需新增一条必须写 reason 字段说明这笔债为什么该存在,默认禁止顺手加行(否则一周后台账就变成第二个 backlog)。指纹 = 文件 + 校验号 + 字面量,不含行号(行号会漂,用它台账天天假新增)。",
|
||||
"generated_by": "scripts/check_ids.py --write-backlog",
|
||||
"total_error_findings": 632,
|
||||
"decidable_ratio_at_generation": 82.99,
|
||||
"total_error_findings": 626,
|
||||
"decidable_ratio_at_generation": 83.26,
|
||||
"entries": [
|
||||
{
|
||||
"file": ".dsh/skills/serial-assistant/scripts/serial_tool.py",
|
||||
@@ -1139,42 +1139,6 @@
|
||||
"literal": "DP-04",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"file": "test/board/ch395f_test_task.c",
|
||||
"code": 2,
|
||||
"literal": "TC-1501",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"file": "test/board/ch395f_test_task.c",
|
||||
"code": 2,
|
||||
"literal": "TC-1502",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"file": "test/board/ch395f_test_task.c",
|
||||
"code": 2,
|
||||
"literal": "TC-1502b",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"file": "test/board/ch395f_test_task.c",
|
||||
"code": 2,
|
||||
"literal": "TC-1503",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"file": "test/board/ch395f_test_task.c",
|
||||
"code": 2,
|
||||
"literal": "TC-201",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"file": "test/board/ch395f_test_task.c",
|
||||
"code": 2,
|
||||
"literal": "TC-203",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"file": "test/board/ch395f_test_task.c",
|
||||
"code": 2,
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"batch": "批 6(2026-10-21 板级 NET 用例号标注)",
|
||||
"applied_by": "scripts/rename_ids.py",
|
||||
"record": "docs/编号规范.md §8.3",
|
||||
"note": "追溯器分档后暴露的真问题:板级 NET 用例的**实现体里标的是裸形**(TC204 / TC-201 / TC1501 / TC1502b…),文档侧写的是合规号 TC-NET-204 等 → 双向追溯对不上,看上去像「文档声明了没实现」,实际是**标注形态烂**。本批只补模块码、序号一位不改(§7.1),作用域限定 5 个真载体文件;改完 @build 验证(改到 test/board 与 Drivers/BSP/CH395F 注释)。刻意不含别的模块(host 侧 TC-00x 那批属另一个模块,另批处理)。",
|
||||
"batches": [
|
||||
{
|
||||
"family": "TC",
|
||||
"old": "\\bTC[- ]?(?P<n>20[1-4])\\b",
|
||||
"new": "TC-NET-{n}",
|
||||
"files": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
],
|
||||
"note": "阶段 2 芯片层 TCP Client 用例 201~204 的裸形标注"
|
||||
},
|
||||
{
|
||||
"family": "TC",
|
||||
"old": "\\bTC[- ]?(?P<n>70[1-4])\\b",
|
||||
"new": "TC-NET-{n}",
|
||||
"files": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
],
|
||||
"note": "阶段 7 NET 层 TCP Client 用例 701~704"
|
||||
},
|
||||
{
|
||||
"family": "TC",
|
||||
"old": "\\bTC[- ]?(?P<n>15\\d{2}b?)\\b",
|
||||
"new": "TC-NET-{n}",
|
||||
"files": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
],
|
||||
"note": "阶段 15 自愈驱动原语 1501/1502/1502b/1503(含 b 子项后缀,序号原样保留)"
|
||||
},
|
||||
{
|
||||
"family": "TC",
|
||||
"old": "\\bTC[- ]?(?P<n>60[16]|80[12]|90[12]|1006|110[01])\\b",
|
||||
"new": "TC-NET-{n}",
|
||||
"files": [
|
||||
"test/board/ch395f_test_task.c",
|
||||
"test/board/net_test_task.c",
|
||||
"test/board/net_test_task.h",
|
||||
"test/host/ch395f_socket_test.py",
|
||||
"Drivers/BSP/CH395F/ch395f.c"
|
||||
],
|
||||
"note": "阶段 6/8/9/11/12 的 601/606/801/802/901/902/1006/1100/1101 裸形(有则补,无则 0 命中)"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user