Skip to content

v0.50.1

Choose a tag to compare

@github-actions github-actions released this 14 Aug 11:39
· 1509 commits to main since this release

v0.50.1

Patch release: correctness and performance fixes accumulated since v0.50.0, including four fixes for issues reported by the community.

Fixes

  • aft_search / grep: indexed case-insensitive regex search no longer loses Unicode case-folding matches. The trigram index decomposed patterns without the case-insensitive flag, so matches like the Kelvin sign vs K were pruned before regex verification — the indexed path returned zero results where the fallback found them.

  • aft_search: test-file filtering no longer starves results. Candidate selection now excludes test files before the top-K window, so heavily test-matched queries can't crowd eligible production results down to zero.

  • Oversized tool responses now resolve instead of hanging (#215). A response over the daemon transport's frame limit previously vanished with only a log line, leaving the call unanswered. Oversized text is now truncated server-side with an explicit notice, and anything still too large returns a structured response_too_large error with steering.

  • Post-edit diagnostics no longer serialize the LSP manager (#216). Edits with diagnostics: true held a process-wide lock for up to 10 seconds while waiting on the language server. The wait now runs lock-free; concurrent LSP operations across roots proceed immediately.

  • Edits mixing line-range fields with empty find/replace sentinels are accepted (#217). Models that emit oldString: "" / occurrence: 1 alongside a valid line-range edit no longer get rejected with a mixed-modes error; meaningful mixed fields still reject.

  • Interrupted downloads no longer block subsequent launches (#213). A lock left by an interrupted first download could brick every launch for up to 8 minutes. Locks held by dead processes are now reclaimed immediately, and the waiter budget outlasts the stale window.

  • Edit diagnostics honesty: warming-phase language-server output is no longer reported as authoritative. Inline diagnostics during rust-analyzer startup stay pending until the server reports quiescence.

  • aft_safety undo reports created-file removals. Undoing an operation that created a file removes the file but previously reported files 0, reading as a no-op.

  • bash_watch pattern offsets are exact under invalid UTF-8. Match offsets were computed on lossily-decoded text, shifting positions after undecodable bytes and occasionally double-delivering sticky watches.

  • aft_conflicts no longer misses index-only deleted-file conflicts.

Performance

  • Health probe replies are constant-time. Daemon health replies assembled per-root detail on every probe (~888ms at 50 roots, and slower under load). Diagnostic detail is now served from an off-path cached rollup with a freshness stamp; replies measure ~0.3ms warm and stay sub-millisecond under CPU starvation.

  • aft_callgraph impact/callers queries are up to 4x faster. Reverse-adjacency lookups now prefetch each traversal frontier in bounded batches instead of one query per visited symbol (2.7s to 0.6s at depth 5 on a 51k-edge graph).

  • aft_zoom is ~44% faster per call by borrowing source lines instead of copying every line of the file.

  • Daemon response envelopes are ~44% cheaper to build by encoding rendered text once and reusing the bytes.

  • Bash output compression is 17-19% faster on large outputs by eliminating a redundant ANSI-stripping pass and unnecessary short-circuit scans.

  • Session binds skip irrelevant package-manifest scans when callgraph warming is disabled, roughly halving warm bind acknowledgment time.

  • Background scans skip dead-code passes when the callgraph store is disabled, and Tier-2 dead-code projections are cached across unchanged callgraphs (#209).