Skip to content

v0.48.1

Choose a tag to compare

@github-actions github-actions released this 22 Jul 16:17
· 1802 commits to main since this release

v0.48.1

Patch release: correctness and performance fixes. No new features, no config changes.

Sandbox (beta)

  • Fixed the Linux sandbox breaking exit-code recording for every sandboxed bash command. The Landlock launcher's descriptor-hygiene step closed the two file descriptors AFT uses to record a command's exit status, so sandboxed commands finished with no exit code (and a command interrupted mid-git could leave a stale .git/index.lock behind). The hygiene step now preserves those descriptors, and a Linux CI test runs a real sandboxed command end-to-end to verify exit codes are recorded. macOS was unaffected. (#167)

Search

  • Cross-project aft_search on a repository that has no AFT index now returns a bounded lexical scan with a disclosure instead of failing with not_indexed. The error dead-ended agents into shell fallbacks; the same situation in grep already degraded gracefully, and the two tools now behave consistently. Semantic ranking still requires an index built by a session in that project, and the disclosure says so. (#166)

Import management

Three silent-mutation bugs in aft_import, all in the same defect class (import statement shapes modeled too coarsely):

  • Solidity: single-quoted import paths (import './X.sol';) were stored with their quotes, so remove reported module_not_found while the import remained, and add inserted a duplicate with the other quote style. Both quote styles now parse identically across all four Solidity import forms.
  • Scala 2: add in a Scala 2 file never recognized an already-present import (an internal dialect marker made the comparison always fail), so repeated adds accumulated duplicate lines. Deduplication now works; Scala 2 syntax generation is unchanged.
  • Lua: removing an import from a mixed declaration like local x = require("x"), sideEffect() deleted the entire line including the unrelated call, while reporting success. Mixed declarations are no longer treated as imports: remove leaves them byte-identical and reports module_not_found; plain local x = require("x") declarations behave as before.

Performance

  • Call graph extraction no longer rescans the file's AST once per symbol. Cold builds and watcher refreshes of symbol-heavy files scale linearly instead of quadratically (measured: 1,000-symbol file 102ms → 23ms; output byte-identical).
  • Code-health scans (aft_inspect metrics and TODO categories) previously thrashed a fixed-size cache on projects over ~4,000 files, re-reading every file on every scan. The cache now sizes to the project, and unchanged warm scans read nothing (measured: 12,000-file warm scan 101ms → 45ms for metrics, ~90ms → ~40ms for TODOs).
  • Outline generation (also used by aft_zoom container menus and top-ranked search snippets) replaced a quadratic insertion scan with an indexed one. Files with thousands of one-method containers render ~11x faster (measured: 16,000 symbols 65ms → 5.7ms; output byte-identical).

Build

  • Fixed cargo test --release compilation of the library test suite (debug-only test helpers were referenced from tests that compile in release mode).