Repository navigation
Tags: maxgfr/codeindex
Tags
chore(release): 2.31.0 [skip ci] # [2.31.0](v2.30.1...v2.31.0) (2026-09-29) ### Bug Fixes * **binders:** bind a call site by its receiver, imports and package ([1252319](1252319)) * **cache:** reject a persisted ref whose soft flag is not `true` ([52a858d](52a858d)) * **ci:** read pre-epoch --since windows on newer git, detect ripgrep directly ([f80c222](f80c222)) * **cli:** warn when a read command answers from an empty scan ([2188218](2188218)) * **complexity:** count code only, skip containers, score nested functions apart ([5a593f1](5a593f1)) * **deadcode:** per-symbol reference evidence, callables by default, manifest roots ([21042be](21042be)) * **delta,complexity:** review the first commit, and refuse unknown file targets ([5e5beac](5e5beac)) * **delta:** trace importers of deleted and renamed files ([6d0b296](6d0b296)) * **edit:** follow operator continuations in regex-tier spans ([50e605e](50e605e)) * **edit:** never insert above Rust inner docs and attributes ([2b15c03](2b15c03)) * **edit:** verify symbolic edits instead of splicing guessed spans ([ee6ad1c](ee6ad1c)) * **embed:** degrade a broken model.json to lexical instead of exiting 2 ([e06391f](e06391f)) * **extract:** choose capped call sites in source order, not name order ([e0393e8](e0393e8)) * **extract:** declare every name of a multi-name declaration ([9b794c0](9b794c0)) * **extract:** index bundles without their copies of the sources' symbols ([42eb965](42eb965)) * **extract:** index Elixir definitions with a `when` guard ([48e50b2](48e50b2)) * **extract:** index minified JavaScript without its symbols, and flag it ([8ffefb5](8ffefb5)) * **extract:** index Ruby singleton-class, inline-visibility and factory-class methods ([f3c31c2](f3c31c2)) * **extract:** keep comments and bodies out of signatures ([8e59545](8e59545)), closes [#define](https://github.com/maxgfr/codeindex/issues/define) * **extract:** keep one-letter callees in the AST tier ([a251b76](a251b76)) * **extract:** make a Lua table function a member of its table ([58f5cb1](58f5cb1)) * **extract:** name CommonJS default exports and walk anonymous default classes ([6343f9c](6343f9c)) * **extract:** read declarations, docs and spans on the regex tier ([7c4a77f](7c4a77f)) * **extract:** read Python strings and non-leaf strings in the AST tier ([feb54a3](feb54a3)) * **extract:** read setext headings and skip indented code in markdown ([49b9125](49b9125)) * **extract:** record each config scalar once, as a number or a string ([8877c5c](8877c5c)) * **extract:** recover declarations the AST walk dropped or misread ([bedb420](bedb420)), closes [#define](https://github.com/maxgfr/codeindex/issues/define) * **extract:** scan imports from code only, in linear time, on both tiers ([37ad6d6](37ad6d6)) * **extract:** scope `export { … }` lists to the bindings they name ([42cab94](42cab94)) * **extract:** stop indexing Dart call sites and keywords as functions ([0074519](0074519)) * **extract:** summarize a file from its description, not its license ([57ad935](57ad935)), closes [#pragma](https://github.com/maxgfr/codeindex/issues/pragma) * **git:** read history and diffs relative to --repo, immune to user config ([48810e5](48810e5)) * **grep:** bound time and output, share one universe and dialect across backends ([abaebb9](abaebb9)) * **grep:** pass rg only exclusions it reads the way the engine does ([a99cb56](a99cb56)) * **impact:** no impossible Go dependents, and a package's files have importers ([e8646c5](e8646c5)) * **index:** make persisted-index reuse honour everything it depends on ([814af1f](814af1f)) * **integration:** a symbolic edit also revokes the --watch proven walk ([1230771](1230771)) * **integration:** align navigation's tests with resolve, extract-imports and mcp ([6379aa6](6379aa6)) * **integration:** delta's narrowing hint and churn's path filter ([8e6ca4b](8e6ca4b)) * **integration:** drop mcp.ts searchIndex import left over from the merge ([a08497f](a08497f)) * **integration:** edit-safety's regex-tier premise after extract-imports ([a74af0f](a74af0f)) * **integration:** keep two tests' premises true after extract-imports ([15ac352](15ac352)) * **integration:** one --scope reading and one universe for grep ([0eaa51b](0eaa51b)) * **integration:** retry a pooled LSP query whose server died unseen ([7ea4710](7ea4710)) * **literals:** read Go build variants as one holder, drop CI and manifest boilerplate ([088aa5e](088aa5e)) * **lsp:** anchor requests on the declared identifier ([b1516c8](b1516c8)) * **lsp:** report the server's own stderr when it fails to start ([789ce11](789ce11)) * **mcp:** answer ping during a tool call and honour cancellation ([c8ddfa4](c8ddfa4)) * **mcp:** keep deleted files out of watched sessions ([6f4f137](6f4f137)) * **mcp:** look symbols and profiles up by own key only ([91f5edc](91f5edc)) * **mcp:** make every result honour the official SDK's schema contract ([17f41cd](17f41cd)) * **mcp:** normalize file arguments and enforce enum-like options ([f169fa0](f169fa0)) * **mcp:** offer a persisted artifact only when it is the answer ([a608060](a608060)) * **mcp:** validate every tools/call before the repo is walked ([13fd914](13fd914)) * **neighbors:** report every relation to a neighbour, strongest first ([eeb9241](eeb9241)) * **onboard:** take the tagline from the top of the README, not a release banner ([87763ea](87763ea)) * **playground:** give the rules command the scan, so the literals gate is complete ([f8081e8](f8081e8)) * **repomap:** rank production code, and show each file's public surface first ([4052c52](4052c52)) * **resolution:** count the new language resolvers as supported ([268151e](268151e)) * **resolve:** fix Python roots and TS, Go and doc-link resolution gaps ([a79e1ef](a79e1ef)) * **resolve:** Rust lib names, renamed deps, uniform paths and #[path] mods ([c7b3611](c7b3611)) * **rewrite:** restate grep/rg/git grep faithfully, or refuse ([6e963bb](6e963bb)) * **rewrite:** smart case on fixed strings, refuse an empty path ([e825db7](e825db7)) * **rules:** gate literals on the full list and reject configs that check nothing ([9017eae](9017eae)) * **rules:** stop reporting live package files and unimportable languages as orphans ([e64d0af](e64d0af)) * **scan:** apply --scope/--include/--exclude inside the walk, as an intersection ([22894f7](22894f7)) * **scip:** nest symbols by their real parent and map every kind ([ffd4b61](ffd4b61)) * **search:** demote fixture and snapshot trees below tests ([e69e12f](e69e12f)) * **search:** index re-exports as prose, not as declarations ([6adce9d](6adce9d)), closes [#1](#1) * **search:** let the stem bridge reach a word that is its own stem ([84385f4](84385f4)) * **search:** make --rank graph a real, scale-free prior, and say it is a wash ([7e299f6](7e299f6)) * **search:** make --semantic honour --exact/--rank/--explain and keep lexical fields ([3bef7ff](3bef7ff)) * **search:** search a stopword that is the whole query or a declared name ([d46a603](d46a603)) * **search:** whole-number result limits everywhere, and "appears" for one term ([43b875f](43b875f)) * **symbols:** keep symbols named __proto__ in symbols.json ([47807d9](47807d9)) * **tests-map:** Go tests cover their package, and a test its namesake ([907158a](907158a)) * **viz:** keep mermaid node ids clear of flowchart keywords, label nodes by path ([e495d11](e495d11)) * **walk:** keep build/out/target/tmp directories that git tracks ([3117448](3117448)) * **walk:** skip in-repo file symlinks as aliases of their target ([2c83d25](2c83d25)) ### Features * **analytics:** couple indexed files by confidence, rank only changed hotspots ([6f84f1e](6f84f1e)) * **callers:** opt-in caller id per site (--with-caller, MCP withCaller) ([6adfefc](6adfefc)) * **callgraph:** overrides edges and dispatch, and deadcode honours them ([ba8bc68](ba8bc68)) * **cli:** add `status`, a freshness report for the persisted index ([2de09cc](2de09cc)) * **cli:** find, refs and outline commands ([b44fe61](b44fe61)) * **delta:** serve the review over MCP and gate CI with --fail-on ([dfcced9](dfcced9)) * **embed:** embed each symbol's doc comment and skip re-exports ([29da123](29da123)) * **extract:** extract Vue, Svelte and Astro components from their script ([0f01302](0f01302)) * **extract:** honour a Python module's `__all__` ([4f1d3f6](4f1d3f6)) * **extract:** index reStructuredText docs like markdown ([40ccbde](40ccbde)) * **extract:** index TypeScript parameter properties and PHP promoted properties ([d22432e](d22432e)) * **graph:** resolve soft refs only when they land on an in-repo file ([e97f12b](e97f12b)) * **graph:** resolve soft refs only when they land on an in-repo file ([cbf64ac](cbf64ac)) * **grep:** export grepRepoEx and keep a timed-out answer consistent ([40a0f65](40a0f65)) * **hierarchy:** Go interface implementations by assertion and method set ([cd3499e](cd3499e)) * **mcp:** add a memory profile and place every tool in one ([414a39a](414a39a)) * **mcp:** impact and neighbors tools ([a30c442](a30c442)) * **mcp:** keep a member's parent in concise declarations ([868a900](868a900)) * **mcp:** send progress notifications during a call's scan phases ([5c47083](5c47083)) * **navigation:** callpath <A> <B> and MCP call_path ([370cc78](370cc78)) * **navigation:** one symbol syntax, explained misses, honest CLI flags ([5632500](5632500)) * **navigation:** symbol-at file:line, on the CLI and as MCP symbol_at ([f52cb83](f52cb83)) * **resolve:** import edges for Kotlin, Scala, Dart, Lua, shell and Elixir ([11c26f1](11c26f1)) * review every feature for correctness, performance and new capabilities ([#22](#22)) ([3ea8183](3ea8183)) * **scan:** explain skipped paths with `scan --why` and `scan --skipped` ([6ae0363](6ae0363)) * **scip:** emit implementation relationships and package identity ([420ddf7](420ddf7)) * **search:** split all-lowercase compound file names into corpus words ([c99098d](c99098d)) * **workspaces:** check declared deps, report resolution health, fix detection gaps ([aafde96](aafde96)) ### Performance Improvements * **binders:** group defs once and intersect with import targets ([8d758a9](8d758a9)) * **delta:** read the diff before the index, and leave the index out of it ([7cd5760](7cd5760)) * **edit:** skip the outline re-extraction for capped files ([113cfb3](113cfb3)) * **embed:** reuse stored vectors instead of re-embedding the corpus per search ([263d652](263d652)) * **ignore:** answer gitignore rules without a full-path regex ([0edc2d5](0edc2d5)) * **index:** prove freshness from freshness.json, not the 142MB cache.json ([0ec52df](0ec52df)) * **index:** restamp graph.json when only the commit moved ([a925f7b](a925f7b)) * **lsp:** pool language-server sessions for the MCP server's lifetime ([88424cc](88424cc)) * **mcp:** forget only the edited file after a symbolic edit ([5369d44](5369d44)) * **mcp:** key every call on one canonical spelling of its repo ([f1e66cf](f1e66cf)) * **mcp:** let --watch prove freshness instead of re-walking every call ([764e960](764e960)) * **pool:** hash before extracting a stat-changed file ([ad9ae3a](ad9ae3a)) * **preload:** read a fresh index one artifact at a time ([4f25b51](4f25b51)) * **resolve:** index Java types and C# namespace prefixes ([756f8b7](756f8b7)) * **resolve:** sort only the manifests, not the whole file set ([23465aa](23465aa)) * **scan:** let docs take the stat fastpath and read their text lazily ([b3170cf](b3170cf)) * **search:** score only candidate files and dress only the kept rows ([1e8c781](1e8c781))
PreviousNext