# Changelog

## Score

- CAI 64 → 66 (+1.2)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.17) — scores are not directly comparable.

## Lenses

- Code Health 58 → 58 (-0.1)
- Architecture 100 → 98 (-2.0)
- Maturity 68 → 66 (-2.4)
- Readiness 73 → 71 (-1.5)
- Security 63 → 74 (+11.0)
- Performance 100 (new)

## Resolved (27)

- BigramQuery::evaluate_cow (cognitive 23) (crates/fff-core/src/index/bigram_query.rs)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (crates/fff-core/src/score.rs)
- Duplicated block (12 lines × 2) (crates/fff-core/src/index/bigram_query.rs)
- Duplicated block (34 lines × 2) (crates/fff-core/src/score.rs)
- Duplicated block (5 lines × 2) (crates/fff-core/src/simd_path.rs)
- Duplicated block (6 lines × 2) (crates/fff-core/src/score.rs)
- Duplicated block (6 lines × 2) (crates/fff-core/src/score.rs)
- Duplicated block (7 lines × 2) (crates/fff-core/src/score.rs)
- Duplicated block (8 lines × 2) (crates/fff-core/src/index/bigram_filter.rs)
- Duplicated block (8 lines × 2) (crates/fff-core/src/index/bigram_filter.rs)
- FunctionTooLong: fff_search::score::match_and_score_in_arena (crates/fff-core/src/score.rs)
- Hotspot: crates/fff-core/src/dbs/env_pool.rs (crates/fff-core/src/dbs/env_pool.rs)
- Hotspot: crates/fff-core/src/file_picker.rs (crates/fff-core/src/file_picker.rs)
- Hotspot: crates/fff-core/src/index/bigram_query.rs (crates/fff-core/src/index/bigram_query.rs)
- Hotspot: crates/fff-mcp/src/server.rs (crates/fff-mcp/src/server.rs)
- Hotspot: crates/fff-query-parser/src/parser.rs (crates/fff-query-parser/src/parser.rs)
- Hotspot: packages/fff-bun/src/finder.ts (packages/fff-bun/src/finder.ts)
- Hotspot: packages/fff-node/src/finder.ts (packages/fff-node/src/finder.ts)
- …and 7 more

## New (32)

- BigramIndexBuilder::compress (cyclomatic 19) (crates/fff-core/src/index/bigram_filter.rs)
- Dependency hygiene PARTLY measured — Cargo dependencies read, dependency currency not (crates.io unreachable)
- Duplicate function signatures in the same module. The second signature uses an underscore-prefixed parameter `_bytes`, which in Rust usually indicates an unused variable, but having two functions with the same name and signature in the same scope is a compilation error or indicates a copy-paste error in the API surface provided.
- Duplicated block (10 lines × 2) (crates/fff-core/src/score.rs)
- Duplicated block (18 lines × 2) (crates/fff-core/src/score.rs)
- Duplicated block (6 lines × 2) (crates/fff-core/src/index/bigram_filter.rs)
- Duplicated block (7 lines × 2) (crates/fff-core/src/index/bigram_filter.rs)
- Duplicated block (9 lines × 2) (crates/fff-core/src/watcher/background_watcher.rs)
- Duplicated block (9–11 lines × 2) (crates/fff-core/src/dbs/frecency.rs)
- FunctionTooLong: fff_search::score::match_and_score_in_arena_inner (crates/fff-core/src/score.rs)
- High CVE: [GHSA redacted] (Cargo.lock)
- Hotspot: crates/fff-core/src/index/bigram_filter.rs (crates/fff-core/src/index/bigram_filter.rs)
- Hotspot: crates/fff-nvim/src/bin/grep_profiler.rs (crates/fff-nvim/src/bin/grep_profiler.rs)
- Inconsistent method naming for search variants. `fuzzy_search` is the default, but `fuzzy_search_directories` and `fuzzy_search_mixed` are explicit. However, `fuzzy_search` takes a `query_tracker` while `fuzzy_search_directories` does not. The naming doesn't clearly indicate that `fuzzy_search` is 'files only' vs 'mixed'.
- Inconsistent return type for path lookup. One returns the item directly (implying it always exists or panics/returns default), while the other returns an Option. This creates confusion about whether the item is guaranteed to exist.
- Medium CVE: [GHSA redacted] (packages/bun.lock)
- Members sharing a duplicated core (4 members, 50+ identical tokens) (crates/fff-c/src/lib.rs)
- Members sharing a duplicated core (4 members, 50+ identical tokens) (crates/fff-c/src/lib.rs)
- Members sharing a duplicated core (4 members, 50+ identical tokens) (crates/fff-nvim/src/bin/bench_grep_query.rs)
- Off the main sequence: @ff-labs/fff-bun
- …and 12 more

## Changes since last survey

- 25 commits — 15 feature/other, 10 fixes

## By area

- crates/fff-core — 9 commits
- packages/pi-fff — 5 commits
- (root) — 3 commits
- doc/fff.nvim.txt — 3 commits
- lua/fff — 2 commits
- packages/fff-bun — 2 commits
- packages/fff-python — 1 commit

## Notable commits

- fix: fix(fff-mcp): apply --max-cached-files as a cap, not a repo size (#847) (#848)
- fix: fix(nvim): keep grep match bg on preview target line (#886)
- fix: fix(pi-fff): drop stale mode tool names on reload (#855) (#856)
- fix: fix(pi-fff): fall back to fff-node when fff-bun cannot be imported (#779)
- fix: fix(pi-fff): preserve FFF tool renderers across reload (#854)
- fix: fix(pi-fff): skip the picker instead of erroring when cwd scanning is opted out (#857) (#858)
- fix: fix(sdk): decode FffGrepMatch and FffScore with the real C layout in fff-node and fff-bun (#891)
- fix: fix(windows): rename events paths arrive correctly (#881)
- fix: fix: Do not start fallback grep if index is not ready (#880)
- fix: fix: refuse home dir when base path has a trailing separator (#890)
- change: chore: add RapidProxy as a sponsor (#877)
- change: chore: bump fff-mcp release artifacts to v0.11.0
- change: chore: regenerate Neovim vimdoc (#871)
- change: chore: regenerate Neovim vimdoc (#876)
- change: chore: regenerate Neovim vimdoc (#882)
- change: chore: release 0.11.0
- change: feat(c): support cargo-c and install pkg-config file (#879)
- change: feat(pi-fff): add compact clickable rendering for search tools (#852)
- change: feat(sdk)!: add case_mode:  smart, sensitive, insensitive option (#609)
- change: feat: Catch renames during watcher (#767)
- …and 5 more
