Skip to content

v0.47.3

Choose a tag to compare

@github-actions github-actions released this 20 Jul 16:45
· 1904 commits to main since this release

A correctness-and-performance patch. Every change is a fix, a speedup, or a stability improvement to existing behavior — no new features, no config changes. Safe drop-in upgrade from v0.47.x.

Correctness fixes (tools returning wrong results)

  • aft_search could report zero results when the match existed. With the default includeTests: false, hidden test-file matches consumed the result cap before production files were reached, so a real match in source could come back empty. Test files are now excluded during candidate selection, before the cap.
  • Bash ls no longer exposes hidden dotfiles that a plain ls would hide — ls DIR invocations rewritten to the internal reader now preserve native hidden-file visibility.
  • aft_conflicts kept conflicts with non-ASCII or unusual filenames. Filenames with accents, CJK characters, or control bytes were silently dropped from the conflict list; they are now parsed from raw NUL-delimited git output.
  • aft_import no longer deletes sibling imports when removing one name from a comma-separated PHP use A, B; declaration (removing A used to take B with it). Java static-member import removal is fixed the same way.
  • aft_safety restore preserves Unix permission bits (including the executable bit) when restoring from the durable backup store, even if the metadata sidecar is unavailable.
  • aft_callgraph trace_data no longer reports a flow after the variable was overwritten. let x = raw; x = "other"; sink(x) no longer claims raw reaches sink; conditional overwrites are marked approximate rather than dropped.
  • aft_inspect reports self-import cycles (a file importing itself) that were previously omitted from the cycle count and drill-down.
  • aft_inspect no longer counts TODO/FIXME markers inside string literals — markers are read from real comments (via the syntax tree), not from comment-looking text in strings.
  • Bash cat/redirect rewrites read and write the correct file when a double-quoted path contains a backslash before a non-special character.
  • aft_zoom finds HTML headings by their id= anchor. Real anchors set via id attributes previously returned symbol_not_found.
  • aft_refactor move/inline preserve namespace-consumer imports on moves and reject ambiguous qualified inline call sites instead of rewriting the wrong one.

Performance

  • Faster indexed search: postings decode directly into the filtered result without a throwaway allocation per query trigram.
  • Faster tool dispatch: tool-call arguments are moved through translation rather than deep-cloned, and the request is built without re-materializing the parameter tree.
  • Faster aft_callgraph call_tree: converging call graphs no longer re-query the same node's edges per path.
  • Faster aft_inspect duplicate rollups: cached contributions are read by reference instead of deep-cloned.
  • Lower allocation on the hot path: per-call path resolution borrows ordinary paths, and background completion pushes share one serialized body across routes.
  • Faster background bash status lookups and lower unbounded growth: the task table is indexed and old delivered tasks are reclaimed.

Stability and resource use

  • Closed a route leak that kept dead projects bound. Failed requests could leave route handles open, so long-lived daemons accumulated actors (and their memory) for worktrees deleted long ago; routes are now closed on discard and a connection exit releases its projects.
  • Daemon restarts no longer trigger a re-embedding storm — post-restart semantic refreshes are capped through the shared concurrency limiter instead of all projects re-checking at once.
  • Health reporting now exposes live watcher/actor/route counters and a compact per-root memory rollup, and borrow-only worktrees report an honest ready/disabled status instead of a permanent "building".

Language support

  • Perl now uses the ts-parser-perl grammar (contributor PR #126, thanks @M0Rf30).