qwen-code/docs/design/tools
Heyang Wang 2e14fa49d6
feat: robust ripgrep (#7888)
* fix(core): improve ripgrep runtime reliability

Make ripgrep failures distinguishable from true no-match results so the
model avoids unsafe conclusions from partial or failed searches. Add a
narrow recovery path for confirmed worker-thread EAGAIN failures.

- Retry confirmed thread EAGAIN once with a single worker thread
- Treat exit code 1 as no-match only when both streams are empty
- Mark partial runtime results as incomplete, separate from display limits
- Add privacy-safe telemetry and focused coverage for recovery behavior

# Conflicts:
#	packages/core/src/utils/ripgrepUtils.test.ts

* fix(core): restore ripgrep runtime recovery tests

Restore the runRipgrep coverage that was lost during the rebase and keep
EAGAIN detection aligned with the runtime reliability design.

- Re-add coverage for strict no-match handling and incomplete output
- Verify single-thread retry behavior for confirmed EAGAIN failures
- Keep spawn, cancellation, timeout, and max-buffer paths covered
- Treat os error 11 as the short EAGAIN marker documented by the plan

* docs(core): document ripgrep recovery boundaries

Clarify the non-obvious runtime reliability edges around ripgrep recovery so
future changes preserve the intended narrow behavior.

- Document why only confirmed worker EAGAIN failures are retryable
- Explain incomplete-output handling for interrupted ripgrep output
- Note the privacy boundary for runtime recovery telemetry

* fix(core): correct exit-1 no-match gate for --json summary output (#7888)

* test(core): remove duplicate mockReset and add telemetry coverage (#7888)

* fix(core): address review feedback on ripgrep recovery semantics (#7888)

- Fix stale `truncated` property in test mock to match RipgrepRunResult
- Narrow `incomplete` flag to genuinely interrupted executions only
- Add test for exit code 1 with both stdout and stderr
- Add test for EAGAIN retry producing partial stdout
- Alias RipgrepRuntimeRecoveryFailureKind to RipgrepFailureKind

* docs(core): align exit-1 no-match spec with stderr-only gate (#7888)

* fix(core): mark exit-failed ripgrep searches with stdout as incomplete (#7888)

---------

Co-authored-by: heyang.why <heyang.why@alibaba-inc.com>
Co-authored-by: Qwen Code Autofix <qwen-code-autofix@users.noreply.github.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev@service.alibaba.com>
Co-authored-by: qwen-code-ci-bot <qwen-code-ci-bot@users.noreply.github.com>
2026-07-29 06:08:22 +00:00
..
ripgrep-runtime-reliability-plan.md feat: robust ripgrep (#7888) 2026-07-29 06:08:22 +00:00