v0.50.2
v0.50.2
Patch release: correctness and performance fixes across search, glob, editing, the executor, and code-health reporting. No tool surface changes.
Fixes
-
Glob ordering restored and made deterministic.
globresults are sorted by modification time (newest first) again — a regression had re-sorted them lexicographically before applying the result cap, silently dropping the newest files on truncation. Equal-mtime ties now break by a stable root-relative path order, identical on every platform. -
Dead-code counts are honest. Two reporting defects inflated the dead-code headline: functions referenced only as values (e.g. passed to
map) were invisible to liveness analysis and reported dead, and Rust symbols whose only callers live in#[cfg(test)]code were counted in the headline instead of the test-only bucket. On this repository the headline dropped by 162. Cached Tier-2 aggregates rebuild once on first scan after upgrading. -
ast_replaceis atomic over mixed file sets. When any target file was unreadable (non-UTF-8, permissions), the bulk replace previously skipped it silently and wrote the rest; it now validates every target before writing anything, matchingast_grep_search's reporting. -
Search results no longer starve under test filtering.
aft_searchwith test files excluded could return zero production results when high-ranking test files consumed the candidate window; filtering now happens before selection. -
Executor backpressure. Maintenance queues have a per-actor ceiling with a typed
maintenance_backpressureanswer instead of unbounded growth; duplicate queued drains coalesce. Interactive tool calls are never capped. Configure cancellation now lands promptly even while git probes are running. -
Pipeline exit-status notes preserved on chained commands. The compressor's failure-preservation guard was also rewritten for speed (below) with byte-identical output.
Performance
- Multi-root grep decomposes the query regex once instead of per root (~2× on 4-root searches).
- Search index delta updates insert postings at a binary-searched position instead of re-sorting the whole list (50× at 1k out-of-order postings, the git-diff refresh path).
- The project root is canonicalized once per configuration instead of on every path validation (~45 call sites on every file-touching command).
editwithreplaceAllbuilds output linearly (4.4× at 1MiB / 1000 matches).- Bash output compression's failure-preservation guard is 5.5× faster on large failed-build output.
- Callgraph impact queries batch their frontier lookups (4.2× at depth 5).
Internal
- Fleet status publishing (CortexKit daemon deployments only): AFT can publish a status segment to the fleet status plane when a daemon advertises it. Inert in standalone/NDJSON and MCP setups — no behavior or output changes.
- Test infrastructure: fixture executables are warmed at install time, making the suite immune to macOS security-assessment latency.