v0.41.0
v0.41.0: search and navigation at any repository size
This release removes the size limits that used to disable AFT's search and call-graph features on large codebases, and extends semantic search to eight more languages. The headline change is structural: the trigram index that powers grep and aft_search is now disk-backed, so it holds a fixed, small amount of memory no matter how large the repository is. On Chromium (176,000 source files) the index dropped from ~14 GB of RAM to under 800 MB — roughly 18x less — with no change to results and no measurable slowdown on normal repositories.
Because memory is no longer the constraint, the file-count caps that existed only to bound it are gone. Search and call-graph navigation now work on repositories of any size, where before they silently switched off above a threshold.
Search works on repositories of any size
The trigram index used to be held entirely in memory, which forced a 20,000-file ceiling: above it, AFT disabled the index and grep/aft_search fell back to a slower full scan. That ceiling is removed.
- The index is now disk-backed. Posting lists live on disk and are read on demand per query; only a small directory and the per-session edits stay in memory. Peak memory is now bounded by the index structure, not the repository size.
- No 20,000-file cap. Monorepo-scale repositories (Chromium, large Java estates, and similar) keep full indexed
grep/aft_searchinstead of dropping to fallback. - Results are unchanged. Output is byte-identical to the previous in-memory index, verified against the full search test suite. On a 1,200-file repository query latency is identical; at 160,000 files it is within single-digit percent — a small cost for working at a scale that previously had no index at all.
- Builds stay incremental. The index builds in the background and updates only changed files, as before.
Call-graph navigation has no file-count limit
aft_callgraph operations (callers, call_tree, impact, trace_to, trace_to_symbol, trace_data) and cross-file symbol moves (aft_refactor move) were capped at 5,000 source files; above that they returned a "project too large" error. That cap is removed. These operations are served from the persisted call-graph store, which scales to large repositories, so they now work regardless of project size.
Semantic search covers more languages
aft_search's semantic lane now indexes eight additional languages that AFT already parsed for outlines and navigation but did not embed for meaning-based search: Java, Kotlin, Ruby, Swift, Scala, Lua, Perl, and R. (PHP was already covered.) Semantic search now spans every language AFT extracts code symbols for; only plain-document formats (Markdown, HTML, JSON) remain text-only. Existing indexes are not rebuilt — the new languages are picked up as files are indexed.