v0.51.0
v0.51.0
Two changes to how AFT reports code health, built and reviewed as full design campaigns: aft_inspect now blocks until results are provably fresh, and the ambient status bar is replaced by event-driven alerts.
Blocking-fresh aft_inspect
aft_inspect no longer returns provisional numbers. It starts the language servers the project needs, waits for them to settle, runs the health scanners, and returns results that are complete as of the call — or an explicit inspect_not_fresh error naming what could not be collected. The response reports wait time when settling took meaningful time.
- Partial-result disclosure fields (
incomplete_categories,pending_categories, and relatives) are gone from successful payloads: success now means complete. - A root with no applicable language servers is reported as clean by vacuity (nothing to analyze), not as an error.
- Dead-code analysis on roots where the call graph cannot exist (for example read-only worktree borrows) reports
callgraph_available: falsewith no count, instead of a fabricated zero. - Deep scans that need a cold call-graph build wait for it instead of accepting a transient zero.
Event-driven alerts replace the ambient status bar
The per-tool-result [AFT E/W/D/U/C/T] status bar is retired. In its place, AFT emits compact alert blocks only when something actionable changes: new diagnostics after an edit, health-count regressions, verified fixes. Alerts carry version-anchored attribution (which edit introduced what) and render nothing when nothing changed.
- Counts are truthful by construction: a category only reports a number when a scan proved it; unavailable categories are absent, never zero.
- A passive
health.digestoperation serves the same verified values to fleet tooling without starting servers or blocking. - On hosts with a fleet status composer, AFT publishes segments instead of rendering its own bar (unchanged from v0.50.3); on standalone hosts, alerts are the only ambient surface.
Also in this release
worktree.ram_overlay(default off): linked worktrees can apply their own edits to the in-RAM search index delta, so search reflects local changes without writing shared artifacts.- Worktree sessions now describe themselves as sharing the repo index ("shared repo index, built by the main checkout") instead of the alarming "read-only/DEGRADED" wording.
bash.host_fallback(default off, project-tier): when the AFT engine is unreachable, bash can execute in the host with per-command approval — a break-glass path for repairing AFT itself.- rustfmt now receives
--editionfrom the nearest package manifest, fixing silent format skips for async code (#225). cache-keys.jsonprunes dead entries automatically; test runs no longer leak entries into user storage (#224).- Windows CI runs ~16 minutes faster via test sharding (contributor-visible on PRs).
- Crash fix carried from v0.50.3: per-session condvar pairing in the hashline binding registry.