diff --git a/docs/FRAMEWORK_RULES.md b/docs/FRAMEWORK_RULES.md index 38266a2..789e877 100644 --- a/docs/FRAMEWORK_RULES.md +++ b/docs/FRAMEWORK_RULES.md @@ -367,6 +367,24 @@ ROS 构建对非 ASCII 路径会出各种问题。工作目录保持 ASCII(推 再比对 —— 必须完全相同。这条检查会抓出"顺手改名""顺手调整语句顺序""漏掉一个 f-string 插值"这类问题;而"为了中文语序把两个插值换个显示顺序"属于允许的改动。 +工具:`python3 scripts/check_text_only.py`(基准是 `git HEAD`,所以要在提交前跑)。 + +### R6.6 行尾一律 LF;验脚本要**真跑**,不能只看 `bash -n` + +行尾由 `.gitattributes` 兜住(`* text=auto eol=lf`,厂商上游 `-text` 不动)。 + +为什么专门立一条:`scripts/run_hole_detect.sh` 和 `scripts/run_dual_gripper.sh` +曾经是 CRLF,于是 bash 把行尾的 `\r` 当成标识符的一部分, +`case "$1" in\r`、`set -eo pipefail\r` 全部变成非法记号 —— +**文件在、五处文档说能用、命令一敲就死**,而报错信息里的 `\r` 根本看不出来。 + +更坑的是:`bash -n` 对其中一个还返回 OK,实际执行立刻死在第 6 行。 +所以"静态检查通过"不等于"脚本能用": + +- 验语法:`bash -n`(必要但不充分,CRLF 会漏报) +- 验能用:`bash <脚本> --help` +- 验行尾:`file <文件>`,或看 `.gitattributes` 有没有覆盖到 + --- ## 7. 改动前的检查清单 @@ -416,6 +434,9 @@ f-string 插值"这类问题;而"为了中文语序把两个插值换个显示 | `pkill -f gz` 秒返回、什么都没停 | 它先匹配到调用它的 shell | R4.10 | | 换了台臂却连错机器 | 硬编码的 `Rizon4-063989` 默认值 | R1.1 | | `assets_root()` 指向从未存在的 `assets/` | 零调用者的死代码,没人发现 | R5.5 | +| 脚本报 `$'\r': 未找到命令`、`set: pipefail: 无效的选项名` | 脚本是 CRLF 行尾,`\r` 被当成标识符的一部分 | R6.6 | +| `bash -n` 说没问题,真跑立刻死 | `bash -n` 对 CRLF 会漏报 —— 静态检查≠能用 | R6.6 | +| 代码里一半英文 docstring 一半中文注释 | 没有统一口径,谁写谁定 | R6.5 | ---