Files
STM32F4-Base/.dsh/skills/mem-budget/reference/backfill-pitfalls.md
T
wandering1 4a4ad6bc5f chore(全仓): @build/@test 旧文档别名清退为技能调用名
现状口径:/keil-build 与 /serial-boot-test 是 DSH 会话的技能调用名,
不是 shell 命令;「名 + 命令行参数」的命令形态改为可执行体
run_boot_test.py 的真实调用。

- AGENTS.md:别名说明重写为「技能调用名不是 shell 命令」,两条目改
  「编译(/keil-build)」「串口回归(/serial-boot-test)」
- keil-build / serial-boot-test 两 skill 调用名与示例同步;task-worktree
  方案文档去掉 @build/@test 惯例从句;@task 保留(不在点名范围)
- 123 文件现状陈述全改;台架捕获、变更记录/时间线、rename 映射输入
  等 41 行历史证据保留旧名
- gen_memory_svg.py 6 处措辞随改,3 张 SVG 产物同批重跑
- 顺手补并行方案同行漏网计数 51→52 钩子

验证:提交期快钩子对 123 文件实跑全 Passed;check_doc_links --all
rc=0(3038 处、无法判定 0);check_mermaid --all rc=0;YAML 解析 52
钩子不变;skill-size rc=0;py_compile 全过;字节卫生零漂移。
2026-10-30 13:03:12 +08:00

30 lines
3.3 KiB
Markdown
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.
# 回填链上的坑(实测)(自 SKILL.md 外置)
> 本文由 mem-budget 的 SKILL.md「回填链上的坑(实测)」一节逐字外置而来(渐进展开:主文件只留索引与指针)。步骤号沿用原文,未重编。
- **`--write` 说「已是最新」而钩子还红** ≠ 钩子坏了,是**落点找错了**:tsv / 台账受管区 / 文档快照区
三处各归一个旗标。按上表对号,别把同一个旗标重跑三遍;手改台账数字更不行——下次 `--write` 直接覆盖你,
钩子仍按 .map 判漂移。
- **tsv 落后只 WARN、不拦**:`--gate` 对「tsv 末行落后于当前 .map」只打印 `[WARN] …请跑 --update`
(`ram_baseline.py:232`),**拦下来的是受管区漂移**。所以"钩子绿"绝不等于"趋势行也补了",反之亦然,各查各的。
- **`--gate` 无 .map → SKIP,而脚本自己写明「SKIP 不等于 PASS」**(`ram_baseline.py:177`):
新开的 task-worktree 从没在这棵树上构建过时必然走到这里;同一状态下 `--write` 直接
`[FAIL] 找不到 .map 事实源,先 /keil-build`(`ram_baseline.py:250`)——不是代码缺陷,是这棵树还没测过体积。
无需 Keil 的强制兜底是 `scripts/check_size_gate.py --local`(= `scripts/ci_local.py` 的体积门禁步)与 CI 的 `--ci`。
- **`--map <path>` 只换读、不换写**:`LEDGER`(`ram_baseline.py:45`)与 `TARGETS`(`check_mem_numbers.py:53-54`)
都由 `REPO_ROOT = Path(__file__).resolve().parent.parent` 算出。拿主仓脚本配 `--map <另一棵树>/…map` 去 `--write`,
等于用别的树的数字**改写主仓的台账**——比"半棵树混合数字"更糟,因为它落盘了。回填永远用本树自己的脚本。
- **`--scan` 的散句告警 `--write` 不替你改**:正文里手抄的旧值("现 RW_IRAM1 62.6%" 这类散句)只告警,
脚本明确写着「`--write` 不会自动改写正文」(`check_mem_numbers.py:418`)→ 人工按受管区改那一行
(Edit 精确替换;含中文的文档绝不整文件重写)。
- **`--update` 的盖戳排在索引后面**:它顺带调 `check_size_gate.cmd_stamp()`(`ram_baseline.py:345`),
而凭证指纹按 **git 索引内容**生成,有未 staged 的脏改动时**拒盖**,且这里只 `[WARN]`、不改返回值
→ 现象是 tsv 多了一行而凭证仍是旧的,要等 `ci_local` 的体积门禁步 / CI 体积门禁那一侧才报出来。
要么先 `git add` 再 `--update`,要么补跑 `python scripts/check_size_gate.py --stamp`。
- **改写型钩子当场改文件是流程不是故障**:`trailing-whitespace` / `end-of-file-fixer` 报
`files were modified by this hook`(新建的 .c 最常触发)时,先读 `ci-artifacts/cui.log` 的真实报错确认是哪几条红,
`git add` 被改写的文件后重提。两条改写红 + 两条内存红混在同一次里时,别顺手把内存那条也当"钩子误报"绕过去。
- **`mem-budget` 触发面很宽**:`files:` 覆盖 `App/` `Drivers/BSP/` `Src/` `Inc/` `Lib/lv_conf.h`
`test/board/` `scripts/ram_baseline.` `docs/内存管理/` `.pre-commit-config.yaml`,且 pre-commit 4.x 已无
`always: true` —— 纯 UI / 纯文档提交照样被它拦:盘上 .map 与台账不同源就红,跟这笔提交碰没碰内存文件无关。