Tool · Qwen Code · Alibaba
grep_search
What matters here1 of 3 invariants hold · 1 fails · 1 unverified
- Regex dialectvaries by backend: Rust regex, git grep, POSIX, or JS RegExpsrconly one of 11
- Announces truncationinvariantholdssrcall 18 hold
- Agrees with readinvariantfailssrc6 of 7 hold
- Gitignoreyes, plus .qwenignoresrclike 2 of 18
The facts the registry marks decision-changing, with how the other implementations answered. An invariant may be shown as pass/fail; a design choice never is, however unusual it looks.
How this differs from most implementations
- Case sensitivityalways insensitive, not configurablevs sensitive, model can ask in 3 of 5
Derived by comparing every recorded value against the other implementations of the same capability. Differing is not a defect unless the row is marked an invariant.
Description, as the model sees it
Not recorded yet — the verbatim description has not been captured for this tool.
Registered schema
Not recorded yet — the schema as registered has not been captured for this tool.
Observed · Code search
compare all →| Fact | This tool | Across all implementations |
|---|---|---|
| Shape | 3 of 3 recorded | |
| What it searches | by-contentsrc | like 9 of 20by-name ×9 · both ×1 +1 |
| Tools per harness | two toolssrc | like 18 of 20no search tool ×1 · one tool ×1 |
| Search engine | ripgrep, else git grep, else grep, else JS regexsrc Two implementations of the same tool name ship side by side (ripGrep.ts and grep.ts); the fallback chain ends in an in-process JavaScript scan. | only one of 19bundled ripgrep ×6 · ripgrep ×2 +101 unverified |
| Query language | 2 of 2 recorded | |
| Regex dialect | varies by backend: Rust regex, git grep, POSIX, or JS RegExpsrc | only one of 11Rust regex ×8 · varies by backend: Rust regex, POSIX, or Python re ×1 +1 |
| Case sensitivity | always insensitive, not configurablesrc --ignore-case is appended unconditionally when building the ripgrep argv. | like 2 of 6sensitive, model can ask ×3 · whatever is on the machine ×113 unverified |
| Result shape | 4 of 4 recorded | |
| Line numbers in results | LN: and path:line:textsrc 1-indexed; the JS fallback numbers with index + 1. | only one of 11Line N: ×3 · path:N: ×2 +5 |
| Result cap | line and character limits, both announcedsrc | only one of 20100 files ×4 · 100 matches ×3 +10 |
| Announces truncationinvariant | holdssrc "[N lines truncated] ..." is appended when either the line or the character budget bites. | all 18 hold1 unverified |
| How "no matches" reads | sentencesrc "No matches found for pattern ..." — the sentence names the pattern and the search location. | like 16 of 17empty stdout ×13 unverified |
| Agreement with read | 2 of 2 recorded | |
| Search line N is read line Ninvariant | failssrc Search reports 1-indexed line numbers; read_file's offset is documented as "the 0-based line number to start reading from". A hit reported at L42 is at read_file offset 41. | 6 of 7 holdtrue ×62 unverified |
| Search counts as having read | yes — matched files are recorded as partial readssrc recordGrepResultFileReads stats every matched path and calls cache.recordRead(..., {full: false}), so a file the model has seen one line of is registered with the read cache. | only one of 2no read tracking at all ×19 unverified |
| Scope | 1 of 3 recorded | |
| Respects .gitignore | yes, plus .qwenignoresrc --no-ignore-vcs is only passed when respectGitIgnore is turned off. | like 2 of 18yes ×8 · no, deliberately ×2 +52 unverified |
| Binary content never enters contextinvariant | ? | 2 of 3 holdtrue ×2 · false ×18 unverified |
| Ordering | 0 of 1 recorded | |
| Result ordering | ? | 16 others recordedmodification time, newest first ×5 · ripgrep traversal order ×5 +64 unverified |