mirror of
https://github.com/stablyai/orca.git
synced 2026-10-08 00:02:38 +00:00
* perf: bound wildcard segment work in nested repository scans * perf: bound the ** path walk in nested repository scans, not just one segment The wildcard-segment fix left the larger blowup in place. A short .gitignore line made only of `**` segments still costs exponential work in the outer path walk: `**/**/.../z` at 24 segments and 73 characters, against an eight-segment candidate, takes about 49 million recursive calls and ~150 ms here — larger than the 25 ms single-segment case this branch removes. Rules are inherited down the tree and re-checked for every directory, so that price is per directory, the runtime's 15s scan timeout fires, and the user silently gets a short repo list. Two independent bounds, both kept: - `**` spans zero or more segments, so `**/**` accepts exactly what `**` accepts. Parsing now collapses a run of them to one segment, taking the reported shape from 49M recursive calls to 26 matcher steps. - The walk memoizes on (pattern index, candidate index), so no other arrangement of `**` can reintroduce the blowup. A rule holding at most one `**` is already linear and skips the table, because allocating it costs more than the walk it would save on the shapes real ignore files contain. The budget suite's process-CPU ceiling is replaced by a matcher step counter read through `readNestedRepoGlobMatchSteps`, so an algorithmic regression fails the suite rather than passing on a fast machine. Each bound has its own budget case, and each fails when only the other is applied. The equivalence oracle now also covers multi-segment and anchored patterns including `**`, checked against the pre-change per-segment expression walking uncollapsed segments. Code-unit and metacharacter cases are unchanged. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>