fix(cost): 用今日 4049 条真实命令回放,把门禁误拦从 1.63% 降到 0.07%
用户要求:「用今天其他会话的记录多测试几遍,确保不影响 AI 正常会话」。做法 = **回放机**: 从 `~/.workbuddy/projects/` 的 12 个会话转录里抽出 **4049 条真实 Bash 命令**,逐条灌进门禁比对。 **发现(数据,不是推测)** * 旧版 soft 档 DENY **66 / 4049 = 1.63%**,其中 **62 条是 `递归 grep`** —— 而抽样 **29/29 全是窄范围** (单文件 / 具体目录),**0 条从根**;连 `grep -c`(只输出计数、本来只有几行)也被误伤。 * 根因还有一个正则 bug:`\bgrep\b[^|;]*-[a-zA-Z]*[rR]` 里的 `[^|;]*` 会匹配到**路径里的 `-server`** (`-s`+`erve`+`r`)⇒ **凡路径含 `aliyun-dsh-server` 就必命中**(这正是误拦的主要来源)。 **修法** 1. `grep -r` 规则 **core → loose**(仅 `hard` 模式拦):实测"误伤 >> 收益"——`grep -r` 是日常主力工具、几乎总是窄范围 2. 正则收紧为「**选项必须紧跟命令**」(`\bgrep\s+-[a-zA-Z]*[rR]\b` / `\bls\s+-[a-zA-Z]*R\b`), 杜绝"路径里的 `-xxx`"被当成选项 **复测**:soft 档 DENY **3 / 4051 = 0.07%**(`ls -R` / `find <根>` / `journalctl` 无 `-n` 各 1 条), 逐条核对**全为真阳性**;hard 档 0.79%。
This commit is contained in:
1 parent
3f141c7b4d
commit
88aaf98191
1 file changed
+8
-3
@@ -45,10 +45,15 @@ RULES = [
|
||||
# cat:**按目标文件大小判定**(小文件不拦)—— 这是防日常误伤的关键,见 cat_bigfile()
|
||||
(True, '__CAT_BIGFILE__',
|
||||
'`cat` 大文件', '改用 `head -30 文件` / `sed -n \'1,30p\' 文件` / `wc -l 文件`'),
|
||||
(True, r'\bgrep\b[^|;]*-[a-zA-Z]*[rR]',
|
||||
# ⚠️ 2026-09-15 **回放今日 12 个会话的 4049 条真实命令**:本规则命中 62 次,抽样 **29/29 全是窄范围**
|
||||
# (单文件 / 具体目录),**0 条从根**;连 `grep -c` 这种本来只有几行的也被误伤。
|
||||
# 旧正则 `\bgrep\b[^|;]*-[a-zA-Z]*[rR]` 还有 bug:`[^|;]*` 会匹配到**路径里的 `-server`**
|
||||
# (`-s`+`erve`+`r`)⇒ 凡路径含 `aliyun-dsh-server` 就必命中。
|
||||
# ⇒ **误伤 >> 收益** ⇒ 降为 loose(仅 `hard` 模式拦),并把正则收紧到「选项紧跟 grep」。
|
||||
(False, r'\bgrep\s+-[a-zA-Z]*[rR]\b',
|
||||
'递归 grep', '改用 `grep -rn … | head -30`,或 `grep -rc …`(只要计数)'),
|
||||
# ⚠️ 只拦 -R(递归全树);**不拦 `ls -la`**(含 l 会误伤日常操作 —— 2026-09-15 自查发现)
|
||||
(True, r'\bls\b[^|;]*-[a-zA-Z]*R',
|
||||
# ⚠️ 只拦 `-R`(递归全树);**不拦 `ls -la`**(含 l 会误伤日常);选项必须紧跟 ls(同样防路径误匹配)
|
||||
(True, r'\bls\s+-[a-zA-Z]*R\b',
|
||||
'`ls -R` 递归全树', '改用 `ls -la 目录 | head -20`,或 `ls 目录 | wc -l`'),
|
||||
(True, r'\bfind\s+(/[A-Za-z]|[A-Za-z]:)',
|
||||
'`find` 从盘符/根起全树扫', '改用 `find 具体目录 -maxdepth 3 … | head -20`'),
|
||||
|
||||
Reference in new issue
Block a user