Skip to content

v0.56.1

Choose a tag to compare

@github-actions github-actions released this 15 Sep 18:03
· 7421 commits to main since this release

AFT 0.56.1 is a patch release for a crash that made aft doctor unusable when OpenCode's database has grown large, plus two fixes found alongside it.

Fixes

  • aft doctor no longer reads OpenCode's database whole, so a multi-gigabyte opencode.db cannot crash it. Before probing an OpenCode V1 host for its version, doctor snapshots the live ~/.local/share/opencode so the probe can prove it never wrote to real data; that snapshot hashed every byte, which is impossible past Node's 2 GiB whole-file limit. Bytes now pass through a bounded window: files up to 64 MiB are hashed whole, larger ones contribute their head, tail, size, and modification time, which still moves the digest when SQLite rewrites its header page or appends. A file that cannot be read is recorded as a change instead of terminating the run, and the snapshot now also covers the -wal and -shm sidecars, where a write in WAL mode lands first. (#316)
  • Log files whose process ID was recycled are reaped again. The retention sweep judged a log's owner alive by process ID alone, so after a reboot — when the kernel hands low numbers to system daemons — old logs stayed pinned under both the age reap and the storage budget. The sweep now compares the owning process's start time against the file's last write, using a source that answers for processes owned by other users, and reports recycled_pids beside removed_files so a sweep that removes nothing is distinguishable from a verdict that never ran.
  • Dead-code analysis stops falling back to a full projection when an incremental one would be faster. The cost estimator mixed the rollup phase's duration with the projection's file count — two different work sets — so a slow rollup could make a cheap incremental projection look expensive. The estimator now samples projection time only, and tier-2 phase logs report projection_ms separately from the surrounding snapshot.

Changes

  • Repeated identical tool calls are interrupted. When the same tool is called with the same arguments and returns the same output three times across at least thirty seconds, the reply carries a short notice that the call is not returning anything new and names the useful next action; a sixth identical call escalates. Rapid bursts are unaffected, so polling a command five times in twenty seconds still behaves normally.

Internal

  • Release tags land their version commit through the normal CI gate before the tag is pushed, and native end-to-end CI jobs receive the build class's time budget when they carry a release build.