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

4.9 KiB
Raw Blame History

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 与扫描中间产物收尾删掉,别当交付物留下。