v0.52.2
v0.52.2
Reliability and governance patch. Background tasks now survive what used to kill them silently, gh runs governed for agent processes without any setup, and storage placement gets an explicit override for network-home environments.
Background task durability
- Post-restart orphan sweep: if the daemon restarts while background tasks are running, persisted tasks are reconciled on the next bind — live children keep running and keep their completion contract; dead or unknown processes get an explicit
fate_unknownterminal notice through the normal completion channel instead of vanishing. New sessions in the same project see prior tasks honestly rather thantask_not_found. - GC liveness refusal: task garbage collection and quarantine now refuse destructive action on any bundle whose recorded process is alive — a running task's state can no longer be swept by a concurrent cleanup pass, regardless of what triggered it.
- Kill-path test hardening: a test-support pattern that could terminate the Windows test harness was eliminated; kill-path tests now use disposable child processes.
gh governance
- Agent child-environment injection: AFT's bash layer now prepends a managed shim directory to agent child PATH (
gh_shim.enabled), so baregh— including inside scripts, pipes, and subshells — routes through the governance shim with zero per-agent setup. User terminals and dotfiles are untouched. - Git co-authorship (
git.co_author:off|auto| explicit"Name <email>"): agent commits gain a co-author trailer derived from the same signed manifest identity that governs GitHub speech;autois silently inert on ungoverned repositories. Project-tier configurable. - Monotonic manifest validity: routing manifests no longer expire on a wall-clock TTL; validity is version-monotonic (rollback-refusing), eliminating the class of scheduled outages when a manifest aged out.
- Classifier fixes:
--body-file/-F/stdin bodies now classify and route for issue/PR comments and reviews; flags-only invocations (--version,--help) pass through as mechanical; full git remote URL forms parse to owner/name; zero-work error paths exit nonzero; a manifest that is present but invalid prints one loud notice before ambient-credential passthrough instead of silently switching identity.
Storage and locking
AFT_STORAGE_DIRenvironment override: relocate AFT's storage root (indexes, SQLite databases, writer leases) with one variable, honored identically at every entry point through a single shared resolver per side. Built for NFS-home environments where lock files and WALs must live on local disk. Explicitly configured paths are preserved byte-identical;AFT_CACHE_DIRretains its historical rank.- Lease liveness under PID reuse: filesystem lock leases now record process start time (plus boot id on Linux); a recycled PID is reclaimed immediately instead of blocking forever — fixes permanent writer-lease deadlocks in PID-namespaced sandboxes (bubblewrap and similar).
Navigation and inspection
- LSP navigation deferral: definition/references/implementations/type-definition requests that need a cold language-server start no longer hold their execution lane — they defer like inspect does, keeping binds and sibling tools responsive (#259).
- Checkpoint hygiene: empty per-project lock directories are cleaned up after release and swept during maintenance.
- Doctor removal answer:
doctornow reports what removing AFT would leave behind — recent usage, running background tasks that would orphan, and undo history that becomes unreachable.
Fixed
- Pi tool renderers honor the collapse/expand contract (Ctrl+O) with informative one-line summaries (#261).
- Python-family LSP resolution is virtualenv-aware and uses the computed nested workspace root (#258, contributed fix).
bash_regex_matchadmitted through the subc route gate; the plumbing drift guard now derives its required set from plugin call sites (#195-class).- Windows CI shard flake from missing SQLite
busy_timeoutordering on callgraph background paths; transient lock contention no longer fails inspect requests terminally. - CI test infrastructure: nextest installs pinned and installer-action-independent; archive extraction clears cached target collisions.