Daily harness signal · September 27, 2026

Did the search
actually run?

One implementation lesson · Tool-result integrity

“No matches” is evidence only if the search completed. Keep startup failures distinct from empty results, or an agent may recreate existing code or declare an unfinished migration complete.

Fresh · source September 18, 2026

Make search failure a third outcome

Use when

A coding agent uses file or content search to decide whether an implementation exists. Claude Code 2.1.277 fixes Grep/Glob reporting no matches when process, memory, or file-handle exhaustion prevented the search from starting.

Action

Require that repair or a reviewed equivalent before trusting these negative results. In an owned search adapter, expose status=matches|empty|error. Preserve the executable, query, root, filters, exit/signal, stderr, and truncation flag. For direct, non-quiet ripgrep, normal exit 0 means matches; 1 means no matches; 2 means error. Failed spawn, timeout, and signal termination are errors—not empty results. Never infer success from empty stdout or convert a rejected execution into an empty list. Block absence-dependent edits until the error is resolved; retain permissions and intended search scope.

Acceptance check

Use an authorized disposable fixture containing an included SEARCH_SENTINEL. Its query must match; an absent token must return completed empty. An invalid regex, missing executable, and injected EAGAIN/ENOMEM/EMFILE startup failures must return error and prevent absence-driven changes. Mock resource failures; do not exhaust the host. A deliberately broken error-to-empty adapter must fail the same oracle. Exercise the actual parent and applicable child search paths. Retain the deployed version, raw receipts, query/scope, and resulting file state—not just the assistant’s explanation.

Evidence

Anthropic’s dated release explicitly names the startup-failure repair. Ripgrep’s tagged source and manual make exit-status semantics inspectable. Issue 27171 provides older comparative search transcripts and versioned musl startup diagnostics. Those reports illustrate additional false-empty paths; they do not independently validate this release or establish its root cause.

Caveat

The Claude repair has no public implementation or regression output inspected here. Native builds may search through Bash’s embedded ugrep/bfs instead; do not transfer ripgrep’s contract without checking the actual backend. Quiet-mode ripgrep can suppress error status after a match. Ignored files, wrong roots, and pagination can still hide content; empty means only empty within the searched scope. The proposed adapter and fixtures were not executed. No upgrade, installation, or evaluation is authorized by this issue.

Compact source notes

  1. Claude Code 2.1.277, published September 18, 2026, 18:06 UTC. Vendor-confirmed repair, not a local passing receipt. The inspected September 19 release has no search-repair reversal; this does not establish the latest version.
  2. Official Grep/Glob reference, undated, retrieved today: rejected input already has a separate error contract; content offsets can yield “No entries at this offset”; Grep and Glob differ on ignore handling. August 17 maintainer-account clarification, signed by Claude Code, explains intentional native-build tool availability. Inspect the actual execution surface.
  3. Ripgrep 15.1.0 dispatch source and manual, whose header is dated October 22, 2025: errors include unreadable files; quiet mode is exceptional. Avoid a truncating pipeline as evidence of full completion; source also handles broken pipes as success.
  4. Historical failure discussion, February 20–April 16, 2026. The contributor retracts the initial nested-session theory and supplies 2.1.50 musl loader diagnostics. Closed for inactivity, not an established 2.1.277 fix. No blanket tool ban or installation workaround adopted.
  5. Anchor lens: explicit release claim, tagged exit branches and diagnostic artifacts. Unity lens: preserve the distinction between unavailable evidence and negative evidence; proposed invariant. Source contracts: confidence_confirmed; operational adaptation: confidence_likely. An accepted absence claim after failed execution falsifies the gate.