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

3.3 KiB
Raw Blame History

回填链上的坑(实测)(自 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 与台账不同源就红,跟这笔提交碰没碰内存文件无关。