Commit Graph

11 Commits

Author SHA1 Message Date
wandering1 0f7b5a87fb chore(编号): 存量编号全量转语义短语,门禁识别面与语料同批重打
登记簿、文档与代码注释里的存量字母加数字编号(N-x / S-x / T-x / E-x / A-x / 卡号)
一律改写为语义短语,净删 2,028 处引用;删除基线与待确认、并行分道方案、排期详述、
采集保护收尾 4 篇(内容已并入 docs/任务规划/README 与登记簿)。

门禁机器与三张账同批重打:check_ids.py 新增变更记录行豁免与第二根护栏
undecidable_total_ceiling;check_test_traceability.py 只加 stdout/stderr UTF-8
reconfigure(TC_RE 未动);check_cubemx_survival.py 的 --write 固定 newline=LF;
id_registry / id_aliases(+19 条 retired-to-phrase)/ id_known_backlog 重打。

test/ 56 个文件同步 TC 标签语义化,其中 18 个 TU 改了 CHECK / printf 里的标签文字,
是本批唯一改变构建产物的文件集合。

为什么合成一笔、不拆四笔(实测撞闸,非偏好):pre-commit 跑钩子前会 stash 未 staged
部分,拆开后中间提交必然是「新规则 + 旧语料」——实跑可判定 85.15% < 基线 86.00%、
不可判定 1,453 > 上限 1,166,编号门禁直接拦下。编号识别面与它描述的语料只能同码移动。

实跑基线(工作区全量):754 文件 / 8,230 处编号字面量 / 可判定 7,079 = 86.01%
(基线 86.0%,容差 0.1pp)/ 不可判定绝对数 1,151(上限 1,166)/ 校验 1-6 错误级 0 /
告警 = 悬空 2(App/algo/freq.c 的 S2,属 §4.4 同号不同义)+ 孤儿 50。

基线从 84.0 抬到 86.0 的理由见 docs/门禁说明/id-check.md §7.6:本批真删了 2,028 处
引用,可判定面随真实内容上升,不是把分母做小。同批新增排除 docs/硬件平台/ 语料,使
识别面少 264 处——芯片手册位号与网表料号不属编号空间(registry 有 excluded_paths_note)。

⚠ 余量只剩 0.11pp(约 10 处)与绝对数 15 处:把「可判定的引用」改成散文会立刻撞第二
根护栏。另遗留一项:id_aliases 里 retired 的 N / S / T / A 别名没有 scope(U1~U5 有),
今后有人新写一个 A-4,校验 3 不会响,只能靠人,建议下批补 scope。

固件不变证据:115 个 .c/.h 剥注释并归一字符串后与 HEAD 逐字节全等,残留代码差异 0;
App / Src / Drivers 的字符串字面量零改动。@build 0 错误 0 警告;40/40 主机套件、2,889
断言全通过;覆盖率 line 89.2% / func 92.6%;pre-commit 48 钩子 --all-files 全绿;
check_doc_links --all 通过(176 文档,章节引用无法判定 0);逐字节卫生核过:14 个带
BOM 文件与 HEAD 一致、0 个 CR、0 个 U+FFFD,字符串字面量纯 ASCII。

.cubemx_survival_baseline.json 的 watchdog-module 哈希 56bf27 变 2bb051 属合法:
Src/freertos.c 的 USER CODE 区内只有注释文字随编号改写,代码未变。

同批带上体积同码凭证与 RAM 台账行(@build 之后盖戳):RW_IRAM1 79,008 B / 60.3%,
RW_CCM 57,376 B / 87.9%,阈值 92%。
2026-10-26 12:28:14 +08:00
wandering1 a92baa269e docs(boot_log_data): f3rounds 验收两轮日志存档 + id-check 二进制工件跳过
道F task-22 commit 2/2(F1 票收尾)。素材 = 2026-10-25 最终主干 1a624b1(含看门狗
v1.5 按位分账 + F3 推流心跳边界)上的两轮 30min 判据轮;serial-assistant live 日志
按字节偏移切片(不 clear、行边界对齐),gz 前置 ASCII 头行记录偏移窗/负载定义/
v1.1 判据结论。原 megawin 16:18-16:48 摘录因 @test clear 轮转灭失(全盘无副本,
lead 核定非事故),归档位按裁改存这两只(v1.1 判据下的达标基线 + 残留真信号)。

轮①(:7003 relisten_stress 单独 30min,2200 connect/close 零拒绝)= PASS:
stall=0;MISS 758 条 NET 缺席=0(旧 12 条 NET 参与组合消失达成);uisn 在途峰
103ms / uis 完成峰 183ms / UI 周期最坏 254ms——F2 复合零误报 + F3 阻塞型治愈的
定案样本。sha256 前 16 = 383dd291f37c6a5d(gz 165KB / raw 1.87MB)。

轮②(e02_probe 单独 30min,50 掉线窗)= FAIL(如实申报,零放水):stall=8 = 3
事件(20:06:05/20:16:54/20:20:30;mask=0x1E7 纯 UI×7 + 0x167 UI+I104×1,h= 环全部
>=8 连窗真申报);饿死型证据链:每样本点 uisn=0 + mg=217/262 + 拖点在 feed/port
墙钟而非推流段——「reconcile 突发饿死 uiTask」登记行与 E-27/28 批 3 的直接立项
证据(lead 裁定单列,处置方向 = 优先级矩阵复核 / reconcile 突发分片让路两条)。
全窗无 IWDG 复位。sha256 前 16 = b44eb3371c25e04c(gz 79KB / raw 0.75MB)。

README §3 表首两行沿用 B6/B7 验收轮先例(第三列放判据摘要)+ 表后存档说明行
(判读证据存档 != [STACK] 水位快照;判据口径指针 §7.2/工具名)。

【配套门禁修复(越界申报,因果耦合)】id-check 对二进制工件按文本 errors=replace
扫描:gz 乱码流随机拼出「字母-数字」形态伪编号,把无关存量顶成校验 1 台账外新账
(本 gz 入库实测拦下提交;png 属同类侥幸未撞形态)。iter_files 增加二进制嗅探跳过
(gzip 魔数或头 2KB 含 NUL → binary_skipped),与 noise_literals/盲区同口径;
docs/门禁说明/id-check.md §6 第 9 条 + 变更记录同步。教训自含:修复说明里引用噪声
示例本身会被再扫一遍——文档措辞只描述形态不举例(本次真实返工一次)。
scripts/check_ids.py 可写工具面,非登记簿/单写者文件;.pre-commit-config.yaml 未动。

【门禁】本树补跑 @build 0/0 落 .map;--all-files 48 绿 0 红;uvprojx UV4 抖动未入库;
登记簿双销项 + 新语义行 = lead 单写,本提交不碰 docs/任务规划/**。
2026-10-25 20:51:44 +08:00
wandering1 15aa08552c docs(问题记录): 删除项目审查与优化建议报告,结论并入模块文档与编号规范
用户裁定:该报告大部分内容已闭环,可删除;仍有价值的迁到合适文档。删前逐条核对,
确认绝大多数结论在仓内早已有权威副本(LV_DRAW_SW_COMPLEX / osFlagsNoClear / SPI 分频 8
/ 分层反向依赖存量基线等),只迁真正独有的四类内容:

1. 暂缓理由与重开条件(三条量化门槛)→ RAM 使用分析与优化方案 §4,并明确「本节是唯一
   权威」,其它文档只留指针;同时把 10 处指向报告 §5.3 的重开条件引用改指该节。
2. 2026-10-22「常驻 vs 动态」三项诊断(静态前五块 43,462 B = 58%;动态面只有 heap_4,
   故栈余量=CCM 余量;栈深主因是日志/配置写链)→ 同文档 §2.5。
3. `_fp_digits` 1,018 B 删不掉的机理与 F-6 根因修法(Q10 宏改单精度,−332 B,4.49e6 例
   逐位等价)→ §2.6.4。
4. 「UI 侧缓冲进 CCM」要按 DMA 可达性二分(LVGL 池可进,帧缓冲/推流缓冲不可)→ 暂缓清单。

编号侧(报告曾是 6 个族的属主登记处):
- 原报告 §9 的 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md 新增 §4.5,6 族
  owner_docs 改指该节。规范正文含大量写法示例,直接当定义集会误伤,故 check_ids.py
  新增 `_def_owners`:snapshot_only 族剔除规范正文,只恢复可判定、不参与悬空/撞号/裸形
  /紧邻判定(实测若不分,裸形 S1 误报 238 条、S-3 与登记簿 S-3 误判重复定义)。
- 11 个已死号(N-03b/N-10~N-13/N-20/N-21/N-24/N-26/S-1/S-2)在 id_aliases.json 登记
  status=void 并写明去处——它们被约 110 处代码注释与文档引用,原先只靠「报告里顺带提过
  一句」才算有定义,报告一删就集体悬空。N-21/S-1/S-2 一号两义,注记已分别标明。
- 顺带修 id_aliases.json 的 note 被脚本累积重复 26 次;修 registry 里 3 处仍指向改名前的
  任务卡文件名(W1-采集保护收尾.md / W8-数据可信.md),以及 iec104_master.py 两处同类注释。

门禁:check_ids --strict 通过(可判定 8747/10410 = 84.02%,基线由 82.6% 抬到 84.0%);
check_doc_links --all --sections-strict 通过(177 文档);pre-commit 相关钩子全过。
2026-10-25 02:08:58 +08:00
wandering1 af411866a8 feat(门禁): 批 9 位号规则扩展到引脚名 + 修 --prune-backlog 丢 reason 的 bug
规则扩展(scripts/check_ids.py,两处共用同一正则)
- 原:^[RCDJXUT][0-9]{1,3}(单字母位号)
- 现:再加 ^[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 这类
- 关键边界:带连字符的一字母形态(C-10 / A-9 / N-18 / D-7)与 TC-206、TC1003 **不落在
  新形状里**,照旧判定 → 报告自有条目号这类真编号没被顺手挡掉(实测台账仍留 21 类真债)
- 位号与引脚名都不进 refs_total:错误级 661 → **651**,refs_total 8807 → 8797(同步 −10),
  可判定比例 82.84% → **82.94%**(分母没被噪声灌水,涨幅来自噪声出清而非真进展)

修自己的 bug:--prune-backlog 会静默丢掉 reason 字段
- 症状:收账一次后,那 28 类硬件存量条目的「这笔债为什么该存在」说明全部消失
- 根因:prune 用 dict 字面量重建条目,只写了 file/code/literal/count 四个键
- 修法:改为从原始 JSON 取整条再覆盖 count,其它字段原样保留;已实测幂等
  (再跑一次「还清 0 条、剩 313 条、带 reason 仍 21 类」)
- 21 类真债的 reason 已重新写回,内容含一条判断:器件料号 FOC-817 **不做**形状规则,
  因为 [A-Z]{3}-\d{3} 与真家族 DEF-* 撞形,宁可留一条记账也不制造盲区

验证:id-check --strict 通过(存量 651 全在台账内、无未登记新账);
doc-links --all 失效与待确认均 0;未改 C/H 不需 @build;台账只减不增
2026-10-22 08:49:39 +08:00
wandering1 125140a3c6 feat(门禁): 硬件语料纳入扫描——位号不进编号也不进比例分母
- check_ids.py 扫描循环:位号([RCDJXUT][0-9]{1,3} 无连字符)在 refs_total 之前 continue,
  既不产生结论也不灌分母;add() 里的同一道判定保留作兜底
- 注册表 excluded_paths 移除 docs/硬件平台/(docs/芯片手册/ 仍排除)
- 首次纳入暴露 28 类先前不可见的存量 → 按规矩逐条写 reason 入台账(**不重打快照**,
  台账只增带理由的条目);错误级 626 → 661,可判定 82.84%(基线 82.6 仍守住)
- 遗留噪声已在 designator_rule 记明:引脚名 PB12-15 / PG0-15 / DB0-15(两字母+数字+区间)
  不是编号,但位号规则不覆盖这种形状,先记账、待加 pin-name 类型规则后清除
- 验证:--strict 通过(无未登记的台账外新账);未改 C/H 不需 @build
2026-10-22 06:43:58 +08:00
wandering1 11c82c0d99 feat(门禁): 位号类型识别机制落地(暂不纳入硬件语料)
- check_ids.py 的 add() 加一道类型判定:硬件类语料(docs/硬件平台/、docs/芯片手册/)里
  匹配「单个大写字母 + 1~3 位数字、无连字符」的字面量判为**位号**(R 电阻 / C 电容 /
  D 二极管 / J 接插件 / X 晶振 / U 芯片 / T 变压器),直接不产生编号结论,并计数到
  stats[designator_skipped],不是静默放过
- 两处刻意收窄:字母集**不含 B**(V0.0 网表报告里的 B1 是真专项条目);要求 fullmatch
  无连字符,所以 D-7 / N-18 / TC-206 / TC1003 这些真编号与违规形态一律照旧判
- 注册表新增 designator_rule 说明口径;**本批不解除 excluded_paths 里的硬件目录排除**:
  粗测该目录约 4200 处位号,会灌进可判定比例的分母 refs_total,把真实变化盖掉——
  解除排除必须先把位号从分母里减掉,那是下一件事
- 因此本批对现有数字零影响:错误级仍 626、可判定比例不变、--strict 通过
2026-10-22 06:38:29 +08:00
wandering1 858434492c feat(门禁): id-check 关闸——按债务台账增量拦截,warn-only 时代结束
机制(--strict 不再「有错就失败」,而是只拦台账外的新账)
- scripts/id_known_backlog.json:340 条指纹覆盖 710 处存量(②167 类 / ⑥135 / ③38)
- 指纹 = (文件, 校验号, 字面量) → 计数,故意不含行号:行号每改必漂,
  用它当指纹会让台账天天假新增,三天后没人敢看 strict,台账失效比没台账更糟
- 带计数而非集合:同一文件里同一个号多出现一次也算新账(复制粘贴式扩散
  正是编号烂掉的主路径,只按「出现过没有」判会放过它)
- 新增 --write-backlog 与 --prune-backlog(只减不增;台账内条目变多当场点名);
  --strict 缺台账返回 2,绝不退化成一次性拦死存量;--only 与 --strict 互斥
- 钩子 entry 加 --strict;--only 与 --strict 互斥
- 顺带修 _scan_malformed 的反向 bug:原条件 (skip and name != "空格形 Trap")
  语义正好写反,带 [示例] 的行反而专被 Trap 规则咬;改为示例行全部不判
- 第一次提交就被自己的台账咬住(id_known_backlog.json 里当然写着 P1-3 等号,
  被当成新引用)→ 台账加入 excluded_paths:登记号的表不是引用号的文档,
  与 id_aliases.json / id_registry.json 同一条道理

为什么不照「清零再升 strict」的原节奏(§8.4 详述)
- 存量 710 处清完要数周,这期间新债一条都不拦,而新增才是烂掉主因
- 「等清零」让人习惯「报红但照样提交」,真关闸那天没人再信门禁;
  本仓已有 mem-budget / mem-numbers 走 --no-verify 的先例,不再开第二个口子

关闸验收三例(临时件当场还原、git diff 干净)
- A 全新前缀 Z-99 → exit 1 点名 ✅ 咬
- B 同号计数 1→2 → exit 1 点名 ✅ 咬
- C 干净态 710 处 → exit 0 放行 ✅ 放(放不住存量就会逼出 --no-verify)

验证:--strict 干净态 exit 0;可判定比例 82.74%(基线 82.6%);
doc-links 失效/待确认 0;未改 C/H 不需 @build。
文档:编号规范 §8 上线节奏改写 + 新增 §8.4 机制表;pre-commit使用说明 §2.25;
AGENTS.md 门禁行由 warn-only 改为已关闸增量拦截。
2026-10-21 11:35:30 +08:00
wandering1 d74cd030ea fix(门禁): 追溯脚本与 B 层口径对齐 + [示例] 行豁免写反的 bug
为什么改(第 1 件,用户裁定的顺序)
- B 层已认 test/host/<模块>/* 为 TC 号属主登记处,但 check_test_traceability.py
  仍按老规矩要求"每个号都必须出现在文档" → 两处判据互相打脸
- 实测矛盾面 284 处里有 173 处属于该口径:照老口径升 --strict 会当场拦死这些
  本不该写文档的号,唯一出路是 --no-verify——门禁公信力就是这么丢的

追溯差异改为三档(口径与编号门禁一致)
- DOC-ONLY:文档声明了、代码没有 → 真断链,38 处
- CODE-ONLY:代码有、母号不在登记处、**且号旁边没写人话意图** → 真未登记,7 处
- IN-CODE:靠"号旁写着意图"放过 → 238 处,**弱于文档的保证,单列示数不算过关**,
  对外举证仍需 C 层模块级说明(脚本里写明这条边界,禁止把它读成"已登记")
- 小写子项后缀(TC-TIMESYNC-003b)按母号算,与 check_ids 的 subitem_ok 同口径
- 真差异从 284 降到 45(38 + 7)

顺带修两个自己的 bug
- TC_RE 模块码上界停在 {0,4}:批 2 模块码单词化(ADCHEALTH 9 位)后代码侧集合
  从 556 悄悄缩到 217(339 个号隐形)→ 放宽到 {0,8}。**同一个坑第二次踩**,
  第一次是 check_ids.py 的候选正则——改名必须复核**所有**识别面,已写进 §8.1
- _scan_malformed 的豁免条件写成 `(skip and name != "空格形 Trap")`,语义正好反了:
  带 [示例] 的行反而专门被 Trap 规则咬。改为示例行**全部**形态规则不判,
  并给引用示例号的两行文档补 [示例] 标记

验证
- 编号门禁:错误级 712 → 710,可判定比例 82.73%(基线 82.6% 未跌破),校验 1/4/5 仍 0
- 追溯:代码侧 578 / 文档侧 298 / 交集 260 / 差异 45;--board-only 回退口径不变
- check_doc_links.py --all 文档路径与章节引用均通过;字节卫生复查 BOM=否、CR=0
- 未改 C/H,不需 @build

文档:docs/编号规范.md §8「顺带收编」条目改写 + §8.1 口径修正记录补两行 + 变更记录;
docs/代码规范/pre-commit使用说明.md §2.25「顺带收编」行同步三档口径
2026-10-21 11:24:05 +08:00
wandering1 4b9a4f4e24 refactor(编号): B 层口径落地——主机侧单测认代码为属主登记处
为什么不是"补 7 篇文档"
- 实测这些号在代码目录外**零消费者**(NANDPORT 47 / PROTELEM 13 / PROTSET 11 /
  FREQ 11 / FTPAUTH 10 / SHA256 8 / SOE 7 / ADCHEALTH 11 / IEC104 23,共 141 号),
  唯一"外部引用"是 scripts/id_aliases.json 自己 → 逐号写文档等于造一份没人读、
  还要跟着代码同步改的复述层(违反"同一事实只在一处详述")

判据与注册表改动
- 新增 9 族 TC-HOST-<模块码>:class 仍为 TC(跨模块同号照旧由校验 4 抓)、
  owner_docs_glob = test/host/<目录>/*、每模块游标做号段不越界(含 IEC104 补漏:
  它上批改名前是纯数字 TC-104-*,没进当时的悬空普查所以漏建族)
- 新旗标 allow_orphans(不补该旗标会让 141 号全变孤儿告警)、
  subitem_ok(小写子项后缀母号在册即算已定义,差异仍由双向追溯如实报)
- snapshot_only:§4.3 冻结快照族不参与"定义位优先"——先试无差别生效时,已销项的
  登记簿 N-21 被审计报告同号接管,校验 6 从 266 暴涨到 1437、可判定比例假崩 68.7%,
  且提示会教人补错文档名(正是 §1.2 的 N-31 撞号制造方式),故回退并改为快照族豁免
- excluded_paths 加 scripts/id_aliases.json 与 scripts/id_registry.json:
  别名表/注册表自身不得制造引用面
- T-2 / T-3 / T-4 / T-6 入别名表标 void(2026-10-02 复审专项条目,销项只删行没清引用)

修自己的漏配(这条是 bug 修复,不是口径)
- N / S-LDG / T-LDG 族漏登记 docs/任务规划/README.md(活登记处,N-21 在其中出现 2 次),
  只登记了 docs/任务规划/登记簿.md(N-21 为 0)→ 74 处真条目被误判

数字与诚实交代
- 错误级 1318 → 711(②398 + ③44 + ⑥269);可判定比例 82.74%(基线 82.6%)
- ⚠ 其中 504 处属**口径修正**、74 处属**修 bug**,**真正变好 0 处**;已在
  docs/编号规范.md §8.1 写口径修正记录表,禁止拿 711 与 1318 直接比
- 文档:§4.1 补 TC-HOST 说明、§8.1 口径修正记录、§8.3 批 3 行、变更记录;
  pre-commit使用说明 §2.25 判定口径与最新实测同步
- 未改任何 C/H,不需 @build;提交钩子即 L0 + L0.5 全量验证
2026-10-21 10:51:25 +08:00
wandering1 bda7ab2b50 refactor(编号): 16 个测试模块码单词化 + 门禁识别面连带放宽
批 2(用户授权改名 + 「新名要一眼看懂」裁定)
- 16 个有歧义模块码单词化,共 1,146 处随 scripts/rename_ids.py 改写:
  AI→ADCIN、AH→ADCHEALTH、PS→PROTSET、PE→PROTELEM、PH→PHASOR、
  TS→TIMESYNC、VL→VOLLOCK、NP→NANDPORT、CFG→CONFIG、CLK→SYSCLK、
  WD→WATCHDOG、STO→STORAGE、SH→SHA256、FA→FTPAUTH、FR→FREQ、104→IEC104
- 不动 NET/GD5F/RTC/SOE/UI/ADC/LOG/RS485/TOOL(已是单词、芯片名或业界通用词,
  改了纯属 churn)
- 别名按全局登记:这批字面量已完全限定(TC-<码>-<nnn>),不存在裸形多义
- 映射表存档 scripts/rename_maps/batch2.json 作审计轨迹;§6 模块码表同步

连带修门禁(关键教训)
- 模块码涨到 9 位(ADCHEALTH/WATCHDOG)后,候选正则与族正则的 {0,4} 上界
  会让改名后的号**整批从门禁眼里消失**:实测编号字面量从 8271 掉到 7315、
  悬空假降 490 处。已放宽到 {0,9} 并写进 §6 注记
- 结论:改名批次必须连带复核识别面,只改数据不改判据 = 静默放行;
  这次是靠「可判定比例跌破基线即失败」那条线拦下来的

现状与遗留
- 校验 1 未登记前缀 0 处;可判定比例 82.71%(基线 82.6%,只涨不跌成立)
- 遗留:7 个模块的「单元测试说明.md」仍缺(PROTSET 116、NANDPORT 109、
  PROTELEM 65、FREQ 48、FTPAUTH 45、SHA256 25、SOE 14 处悬空)——改名不解决
  缺文档,处置方式待议
- 遗留:T-2/T-3/T-4/T-6 历史任务号悬空(别名表未收全,属本工具批次漏项)
- 未改任何 C/H 可编译语义(仅注释与宏名内的编号),故不需 @build
2026-10-21 09:53:28 +08:00
wandering1 301c3e5183 feat(门禁): 编号门禁 id-check 落地(36→37 钩子)+ 批 1 编号单词化改名
新增门禁本体
- scripts/check_ids.py:实现 docs/编号规范.md §8 八项校验;默认 warn-only,
  唯一硬拦项是「可判定比例跌破基线」(防回退的本体)
- scripts/id_registry.json:66 个前缀族,逐项来自 §4 总表 + 全库实测游标,
  偏差一律写进 cursor_note,不凭记忆编造
- scripts/id_aliases.json:旧号 → 新号 / 作废标记(照搬 section_aliases.json 范式)
- 顺带收编 check_test_traceability.py:正则补齐大写后缀与无模块码形态,
  比对范围扩到 test/host 与 7 篇「单元测试说明.md」,另加 --board-only 回退旧口径

批 1 改名(用户授权解禁「不改写存量号」)
- 代码规范条款 S1~S19 → CODE-RULE-nn:78 处 / 2 文件
- UI 像素回归状态 S0~S7 → MENU-STATE-nn:61 处 / 3 文件(冻结在 07)
- 两族属主登记处 = 脚本自身的规则表 / STATES 表,文档只作引用方
- 新增 scripts/rename_ids.py(§7.3 规划脚本):映射表驱动、显式 scope、默认干跑、
  自动写 scoped 别名,跳过 [示例]/[计划] 行与变更记录表,按原字节读写保 BOM 行尾
- 已应用映射表存档 scripts/rename_maps/batch1.json 作审计轨迹

有牙实测(证明门禁不是空转)
- 注入 Z-99 / 裸形 / 悬空 / 越游标 / 未紧邻 / 跨文档重复定义 六例,
  分别被校验 1/2/3/5/6/4 点名,--strict 退出码 1;临时档删除后工作树干净

验证与同步
- 可判定比例基线 82.3% → 82.7%(已 --update-baseline 入档);错误级 1312 → 1291
- ci_local.py 全绿(L0 + L0.5 共 1104 断言);ui-golden Passed;
  check_doc_links.py --all 无法判定 0
- 未改任何 C/H 源文件,故本次不需 @build
- 文档:AGENTS.md 与 pre-commit使用说明.md 计数 36→37 并新增 §2.25 详解;
  编号规范 §4.1 补两行、§8.1 落地记录、§8.2 规范与仓库偏差、§8.3 迁移批次记录
2026-10-21 09:33:54 +08:00