# 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_search` instead 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.
