🐛 fix(sdk): grep native 隐藏文件口径对齐 rg 回退 + bash 只读测试去 shell 发现竞态 - #470
Conversation
native 层 Rust 侧 options.hidden 默认 true,会把 .git/HEAD、packed-refs 等当普通文件命中:count/total 虚高、分页偏移错位。rg/grep 回退默认跳过 隐藏且显式排除 EXCLUDED_DIRS(全部点前缀),native 通道无独立 exclude 参数,hidden:false 即同等口径。抽出 buildNativeSearchOptions 纯函数并 补参数口径测试。 Fixes #337 Co-Authored-By: Claude Fable <noreply@anthropic.com>
无 natives 时 "git status" 走 parse-unavailable 回退,回退方言取决于 resolveShellInvocation 的解析结果:Windows CI 的 where.exe bash 发现逐 候选 1s 超时,runner 慢时全部超时回退 powershell.exe,"git status" 命中 PowerShell 白名单翻转成 true,断言随 runner 快慢漂移。注入确定性 LUME_BASH_PATH(形态匹配即返回、不做存在性检查)把回退 shell 钉在 bash 形态上,结论与探测快慢无关;finally 恢复原值不影响真实 spawn 测试。 Fixes #463 Co-Authored-By: Claude Fable <noreply@anthropic.com>
Review结论Approve。两处修复方向正确、实现干净,核心口径主张经本地 natives 二进制 + 真实 rg 双通道对照实测证实。1 条流程性 P2(不阻塞)+ 2 条 P3 记录。 发现[P2] "Fixes #463" 合并即关闭 issue,正文里的深层问题会失去跟踪载体。 #463 正文明确指出比 flaky 更值得修的一层: [P3] commit/#337 的动机案例与二进制实测行为不符(不影响修复正确性)。 本地 win32-x64 dist 实测(临时目录造 [P3] "同等口径"严格说仅对 rg 回退成立。 GNU grep 回退既不跳 EXCLUDED_DIRS 之外的隐藏项也不尊重 .gitignore(会搜到 已核实(逐条实证)
|
改动
#337 grep native 隐藏文件口径
runNativeSearch给 native 层显式传hidden: false:native 引擎此前默认搜隐藏文件,搜提交信息/邮箱/分支名时会把.git/HEAD、packed-refs 当普通文件命中,count/total 虚高、分页错位hidden:false一并跳过它们——native 通道无独立 exclude 参数,此即同等口径;补不变量测试钉住(清单加入非隐藏目录时测试失败即为提醒)buildNativeSearchOptions纯函数,测试直接断言 native 调用参数(hidden/gitignore/mode/offset/max_count/context)#463 bash 只读测试去 shell 发现竞态
isReadOnly("git status")走 parse-unavailable 回退,回退方言取决于 shell 发现结果:Windows CI 慢 runner 上 where.exe 探测逐候选超时会翻进 PowerShell 白名单使断言翻转LUME_BASH_PATH(形态匹配即返回、不做存在性检查),结论与 runner 快慢无关;finally恢复,不影响真实 spawn 测试验证
bun run typecheck绿bun test src/tools/grep.test.ts6/6 绿bash.test.ts分类测试绿(durable worker 类测试存在与本改动无关的预存环境 flaky)Fixes #337
Fixes #463
🤖 Generated with Claude Code