Files
STM32F4-Base/.dsh/skills/id-family-semantic-migration/reference/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

31 lines
4.9 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.
# Pitfalls(自 SKILL.md 外置)
> 本文由 id-family-semantic-migration 的 SKILL.md「Pitfalls」一节逐字外置而来(渐进展开:主文件只留索引与指针)。步骤号沿用原文,未重编。
- **拿门禁计数当中文字面量族的口径** → 得出「0 处待改」的假归零(实测该族真实站点 288 处 / 56 文件);先跑自建扫描器报「站点 / 文件」,并在交付里写明该族不在语料内、门禁判不到。
- **给无机器识别面的族登记 `id_aliases.json`** → 中文前缀不进语料,登记了机器也看不见,只制造「有门禁兜底」的错觉;执行面是 §4.1.1 停发行 + §9.3 换算表 + 评审。反过来,有识别面的族不登记别名 → 门禁把旧号引用判成悬空。
- **拿 grep 计数跟人吵口径**:先拿实测三口径,再谈拆单;两套计数不一致不是有人算错(见上表)。**形似噪声号并进总数** → 把 132 处里程碑噪声算进 420 处待改,动手就改坏 `docs/芯片手册/` 原文。
- **heredoc 里嵌 Python 正则 / 中文** → `invalid escape sequence` 与语法错;脚本落文件再跑。中文正则用 **raw 串 + `\uXXXX`**:非 raw 串的 `"\b"` 会被解成退格符,正则**静默失配不报错**。
- **扫描没排除 `.git`** → `.git/COMMIT_MSG_*.txt` 的 GBK 乱码历史被当残留,越清越多;**靠控制台看中文** → 一律写 UTF-8 报告文件再解析,判乱码统计 `EF BF BD` 字节数。
- **凭记忆敲 `old` 串** → 中文引号与 ASCII 双引号形态不同,命中 0;回读原文取真身,断言前先看 `git status` 自证文件未变。
- **替换后不做同句重复检测** → 留下「运行参数段(「数据可信」运行参数段交付)」这类句子(实测 12 行);**同一短语两种空格形态不归一** → 全仓口径漂移(归一前先 `git grep -c -F` 数各形态)。
- **换算表里复述字面量** → 讲规则的文档变成自己的引用站点(规范本身在门禁语料里)。
- **`| head` 之后读 `$?`** → 永远是 0,把「还有残留」当「已归零」。
- **占位符泄漏**:为躲转义把反引号写成 `«` / `»` 再全文替换,落盘后**必须核占位符残留 = 0**(实测 22 行泄漏到本节之外,含不是自己写的行)。
- **删行前不核证据属主、不查当初为什么保留** → 要么删掉唯一记录,要么把已撤销的「✅ 保留行」例外当常态。
- **涨点归因拿 diff 新增行 grep 形态** → 把存量上下文当增量;**把上一轮现值当本回合实测**、未跑净室归因就报具体归因对象 = 猜测。
- **全局查找替换**:跨族撞号(`S3` 三义)。必走 `rename_ids.py` 映射表 + 显式 scope + 干跑;无识别面族则逐处手写 + 断言命中数。
- **未分类就动手**:把变压器位号、Mermaid 节点名、数学记号、gitlint 规则名当编号改坏硬件资料;位号目录进 `excluded_paths`,记号进噪声表。
- **按简称匹配文件清单** → 误报 8 个文件丢失;比对前展开真实路径。
- **复现不了队友的合并指纹就怀疑丢文件**:先问口径(自定义顺序不可复现),改落自有逐文件 16 位基线并把跨道文件单列。
- **替换 token 含 `**` 加粗标记** → 命中数断言 0;取反引号最小形态。
- **只改生成器文案不重跑产物** → `generated-fresh` 必红(实证 `0f7b5a87` 同类);「反正就是注释,不影响图」是错的,该文本进产物。
- **`grep 'A\|B'` 空返回当文件干净**:交替竖线在多层 bash 引号里被吃掉,是探针坏不是文件干净 → 反证为空的搜索必须换 `grep -F` 复测。
- **一次 run_code 串 `5 × wait_agent(118000)` ≈ 590s 整段 abort、进度全丢**;且一次串多条长中文 `send_message` 也撑爆 120s(发出 1 条后 abort,剩余未发)。轮询上限 4×118s,长消息拆开发。
- **游标整型比较静默不生效**(字符串形态);抬完用 `--strict` 与 plain 双验。
- **`git add` 目录路径带进别道文件**、`git add -A` 卷进在飞改动;撤销自己的改动只按文件点名 `git restore scripts/archive/id_gate/id_registry.json`,不碰同树其它道文件。
- **amend 被 gitlint B1 拦**:正文行 >80,别把 ASCII 双引号写成正文首字符。
- **改「只动注释」要拿机器证据**:`/keil-build` 0 错 0 警且 `Program Size` 与改前**逐字节同数**(本回合真跑,引用历史提交正文自报的数字不算证据),别口头承诺。
- **冻结历史与原始证据不改**:boot 串口日志等采集现场是冻结证据,改了就是篡改;历史「修改记录」行按裁定保持改名后形态(号已全仓退役,留一个查无此号的引用比留改过名的条目更坏)。
- **`*.uvprojx` 抖动不入库**;`ci-artifacts/` 里的 spec 与扫描中间产物收尾删掉,别当交付物留下。