diff --git a/docs/测试说明/boot_log_data/README.md b/docs/测试说明/boot_log_data/README.md index c0c39feb..d53ca9d3 100644 --- a/docs/测试说明/boot_log_data/README.md +++ b/docs/测试说明/boot_log_data/README.md @@ -36,8 +36,14 @@ | 2026-10-12 | 同 PASS 固件(B7+fix)/ **PC 主站 2404 往返**(复测) | 同上全链 18/18 PASS——B7 `set_sealed`+持久化写路径下 C_SE→YX 联动仍成立(B5 遗留"104 YX 联动"腿闭环) | `20261012_B6_iec104_roundtrip_log.txt` | | 2026-10-12 | 同 PASS 固件 / **B7 定值持久化 + 软压板 YK12 台架腿**(`test/host/iec104_master.py --b7-pre/--b7-post/--b7-mark/--b7-check`,中间 ST-LINK 复位) | pre **21/21**:C_SE 写 7.5+C_RD 回读、YK12 两段 OFF → 0.05 A 低定值**不动作**(保护退出)、YK12 ON → YX15/16 立即动作(COT=3)、收尾留压板退出;post **13/13**:**压板退出态跨复位保持**(开机日志 `global plate OUT -> protection disabled` + 低定值仍不动作)、重启后 YK12 ON 即动作(联动在位);mark/check **4/4+4/4**:**非默认定值 7.5 跨复位保持**(C_RD=7.500,与出厂默认可区分);开机日志两次 `[CFG] prot set loaded (/prot_set.bin)` | `20261012_B7_iec104_persist_log.txt` / `20261012_B7_persist_boot_log.txt` | | 2026-10-12 | `prod`(B9 `1d96fc9` sync 追平 B8/N33 后重跑,merge `6cbf400` 覆盖代码)/ **B9 SOE 动作记录 + 时标台架腿** | `@test` **PASS**:锚点 `protection init: OK (set=40 elm=9)`、`freq layer init: OK`、`freq(hb): f=0 valid=0`(浮空不发散)、**`prot set blob version change (ver=1 cnt=32), defaults in use`**(B8 换代 INFO ≠ CORRUPT 实证)、零 `[ERR]`、`protect` 828/2048(59%,与静态 872 相符);主站回归 `--b7-pre` **21/21** + `--b7-post` **13/13** 不回归,**自发 YX = M_SP_TB_1 带 CP56 时标**(动作/复归/重启后联动三段,iv=0);FTP 下载 `/log/soe.log` **56 条** `test/host/soe/decode_soe.py --max-elm 16` **PASS**(boot 段内 seq 严格 +1、ELM_ASSERT 26、CP56↔epoch UTC 交叉一致);`.bin` 为原始 64 B 记录可复解码 | `20261012_B9_prod_boot_log.txt` / `20261012_B9_iec104_soe_pre_log.txt` / `20261012_B9_iec104_soe_post_log.txt` / `20261012_B9_soe_pre.bin` + `20261012_B9_soe_after_post.bin` / `20261012_B9_soe_decode_pre.txt` + `20261012_B9_soe_decode_post.txt` | +| 2026-10-25 | `prod`(最终主干 `1a624b1`:看门狗 v1.5 按位分账 + F3 推流心跳边界)/ **f3rounds 轮① :7003 relisten_stress 单独 30 min**(11×200=2200 个 connect/close 周期,零拒绝) | **v1.1 判据 PASS**:`task stall`=0;MISS 758 条中 NET 缺席=0(旧 12 条 NET 参与组合消失达成);推流段在途峰值 103 ms / 完成段 183 ms(UI 周期最坏 254 ms)——F2 复合零误报 + F3 阻塞型治愈的定案样本;gz 前置 6 行 ASCII 来源/判据头 | `f3rounds_r1_7003_churn_30min.log.gz` | +| 2026-10-25 | 同固件 / **f3rounds 轮② e02_probe 单独 30 min**(50 个探针掉线窗) | **v1.1 判据 FAIL(如实申报,零放水)**:stall=8 = 3 事件(20:06:05/20:16:54/20:20:30,miss=998-1000/1187-1189/1249-1250),mask=0x1E7 纯 UI 单串×7 + 0x167 UI+I104×1,h= 环全部 ≥8 连窗真申报;**饿死型**(每样本点 uisn=0、mg=217/262、拖点不在推流段而在 feed/port 墙钟)=「reconcile 突发饿死 uiTask」登记行与 E-27/E-28 批 3 的直接立项证据;全窗无 IWDG 复位 | `f3rounds_r2_probe_30min.log.gz` | | 2026-10-21 | `prod` + **兜底新鲜度门停 TIM3 注入探针**(`task/adc-health-design-doc`,探针已撤)/ 开机 + 45 s | `protect` **620/2048(69%)**、`adc` 与 heap 水位同前;`[ERR][PROT] … blocked (hf=0x00000100)` +5462ms、`recovered` +5757ms、`health:` 0 次、`reset cause:` ×1 | `20261021_probe_stale_gate_boot_log.txt` | +> f3rounds 两只是**判读证据存档**(非 `[STACK]` 水位快照):源为 serial-assistant live 日志的 +> 字节偏移切片(不 clear、行边界对齐),gz 前置 ASCII 头行携带偏移窗、负载定义与 v1.1 判据 +> 结论;判据口径 = `../实机测试实施指南.md` §7.2(v1.1),工具 = `scripts/v5_log_gap_report.py`。 + ## 4. 关联 - 沉淀约定:`../测试开发标准流程.md` §7.3 diff --git a/docs/测试说明/boot_log_data/f3rounds_r1_7003_churn_30min.log.gz b/docs/测试说明/boot_log_data/f3rounds_r1_7003_churn_30min.log.gz new file mode 100644 index 00000000..6cea825c Binary files /dev/null and b/docs/测试说明/boot_log_data/f3rounds_r1_7003_churn_30min.log.gz differ diff --git a/docs/测试说明/boot_log_data/f3rounds_r2_probe_30min.log.gz b/docs/测试说明/boot_log_data/f3rounds_r2_probe_30min.log.gz new file mode 100644 index 00000000..63ccd923 Binary files /dev/null and b/docs/测试说明/boot_log_data/f3rounds_r2_probe_30min.log.gz differ diff --git a/docs/门禁说明/id-check.md b/docs/门禁说明/id-check.md index 8defabbe..7deb6fa2 100644 --- a/docs/门禁说明/id-check.md +++ b/docs/门禁说明/id-check.md @@ -88,6 +88,12 @@ `scripts/rename_maps/` 里必然写着旧的非法形态),否则第一次提交就被自家审计表当"新账"拦下。 7. 校验 8 只许涨不许跌:好处是防退化,代价是**顺手写一个未登记族的号就会红**,哪怕与本次改动无关。 8. 它不懂"这个号该不该存在"。新增一族编号是否合理,仍是 `docs/编号规范.md` 的人工判断。 +9. **二进制工件整体跳过**(2026-10-25 task-22 补):gz 串口存档 / png 等字节流没有编号语义, + 按文本 `errors=replace` 解码后随机字节会拼出「字母-数字」形态的**伪编号**,把无关存量顶成 + 校验 1 的"台账外新账"(`boot_log_data` 落 f3rounds gz 时实测拦下提交——本节文字引用这类 + 噪声形态时同样会被扫,措辞必须只描述形态不举例)。判据 = gzip 魔数或头 2KB 含 NUL → 计入 + `binary_skipped`,口径与 noise_literals/裸形盲区一致。**反向盲区也在案**:真编号若只存在于 + 二进制工件里,本门禁看不见——需要它可判定时就该以文本形态入库。 - **裸形多义是显式承认的盲区**(`docs/编号规范.md` §1 与 §4.4):同一个裸形字母在本仓可能同时是风险号、 档位、层号、元器件位号。所以裸形族**只在属主登记处文档内**判"越游标",文档外降级处理。本目录 @@ -116,5 +122,6 @@ | 日期 | 变更 | |---|---| +| 2026-10-25 | 二进制工件跳过(§6 第 9 条):`iter_files` 按 gzip 魔数/头 2KB NUL 嗅探排除 gz/png 等,防乱码伪编号顶出校验 1 假新账(f3rounds gz 入库实测触发);602 处存量台账口径不变 | | 2026-10-25 | 补「`owner_docs` ≠ 定义集」口径(§2 末条):`snapshot_only` 族的登记处挂在规范正文时,`_def_owners` 为空 → 只恢复可判定、不参与悬空/撞号/裸形/紧邻。基线 82.6% → **84.0%**(删《项目审查与优化建议报告》+ 补登 11 条已死号别名后重打,实测 84.02%、696 文件 / 10410 字面量) | | 2026-10-23 | 首篇逐项文档(数据为当日实跑:551 文件 / 8868 字面量 / 台账 640 处 / 可判定 82.85%) | diff --git a/scripts/check_ids.py b/scripts/check_ids.py index 8ce18b38..8ac5e391 100644 --- a/scripts/check_ids.py +++ b/scripts/check_ids.py @@ -195,8 +195,24 @@ class Checker(object): continue if "/__pycache__/" in ("/" + f) or f.endswith(".pyc"): continue - if (REPO_ROOT / f).is_file(): - yield f + p = REPO_ROOT / f + if not p.is_file(): + continue + # 二进制工件整体跳过(2026-10-25 道F task-22:boot_log_data 的 gz 串口存档被 + # read_text(errors=replace) 解出乱码流,随机字节拼出「字母-数字」形态伪编号(形态故不举 + # 例,举例即入扫,见 docs/门禁说明/id-check.md §6 第 9 条),把无关存量顶成校验 1 新账。 + # gzip 魔数或头 2KB 含 NUL 即判二进制—— + # 字节流没有编号语义,与 registry noise_literals/盲区豁免同一口径,不该进文本面。 + # ⚠ 不是豁免策略:png 等既有二进制此前是"侥幸没撞上形态",现在才是按性质处理。 + try: + head = p.open("rb").read(2048) + except OSError as exc: + print("[WARN] 探测失败 %s:%s" % (f, exc), file=sys.stderr) + continue + if head[:2] == b"\x1f\x8b" or b"\x00" in head: + self.stats["binary_skipped"] += 1 + continue + yield f def read(self, rel): if rel not in self.file_cache: