Skip to content

v2.31.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 14:17
· 5 commits to main since this release

2.31.0 (2026-09-29)

Bug Fixes

  • binders: bind a call site by its receiver, imports and package (1252319)
  • cache: reject a persisted ref whose soft flag is not true (52a858d)
  • ci: read pre-epoch --since windows on newer git, detect ripgrep directly (f80c222)
  • cli: warn when a read command answers from an empty scan (2188218)
  • complexity: count code only, skip containers, score nested functions apart (5a593f1)
  • deadcode: per-symbol reference evidence, callables by default, manifest roots (21042be)
  • delta,complexity: review the first commit, and refuse unknown file targets (5e5beac)
  • delta: trace importers of deleted and renamed files (6d0b296)
  • edit: follow operator continuations in regex-tier spans (50e605e)
  • edit: never insert above Rust inner docs and attributes (2b15c03)
  • edit: verify symbolic edits instead of splicing guessed spans (ee6ad1c)
  • embed: degrade a broken model.json to lexical instead of exiting 2 (e06391f)
  • extract: choose capped call sites in source order, not name order (e0393e8)
  • extract: declare every name of a multi-name declaration (9b794c0)
  • extract: index bundles without their copies of the sources' symbols (42eb965)
  • extract: index Elixir definitions with a when guard (48e50b2)
  • extract: index minified JavaScript without its symbols, and flag it (8ffefb5)
  • extract: index Ruby singleton-class, inline-visibility and factory-class methods (f3c31c2)
  • extract: keep comments and bodies out of signatures (8e59545), closes #define
  • extract: keep one-letter callees in the AST tier (a251b76)
  • extract: make a Lua table function a member of its table (58f5cb1)
  • extract: name CommonJS default exports and walk anonymous default classes (6343f9c)
  • extract: read declarations, docs and spans on the regex tier (7c4a77f)
  • extract: read Python strings and non-leaf strings in the AST tier (feb54a3)
  • extract: read setext headings and skip indented code in markdown (49b9125)
  • extract: record each config scalar once, as a number or a string (8877c5c)
  • extract: recover declarations the AST walk dropped or misread (bedb420), closes #define
  • extract: scan imports from code only, in linear time, on both tiers (37ad6d6)
  • extract: scope export { … } lists to the bindings they name (42cab94)
  • extract: stop indexing Dart call sites and keywords as functions (0074519)
  • extract: summarize a file from its description, not its license (57ad935), closes #pragma
  • git: read history and diffs relative to --repo, immune to user config (48810e5)
  • grep: bound time and output, share one universe and dialect across backends (abaebb9)
  • grep: pass rg only exclusions it reads the way the engine does (a99cb56)
  • impact: no impossible Go dependents, and a package's files have importers (e8646c5)
  • index: make persisted-index reuse honour everything it depends on (814af1f)
  • integration: a symbolic edit also revokes the --watch proven walk (1230771)
  • integration: align navigation's tests with resolve, extract-imports and mcp (6379aa6)
  • integration: delta's narrowing hint and churn's path filter (8e6ca4b)
  • integration: drop mcp.ts searchIndex import left over from the merge (a08497f)
  • integration: edit-safety's regex-tier premise after extract-imports (a74af0f)
  • integration: keep two tests' premises true after extract-imports (15ac352)
  • integration: one --scope reading and one universe for grep (0eaa51b)
  • integration: retry a pooled LSP query whose server died unseen (7ea4710)
  • literals: read Go build variants as one holder, drop CI and manifest boilerplate (088aa5e)
  • lsp: anchor requests on the declared identifier (b1516c8)
  • lsp: report the server's own stderr when it fails to start (789ce11)
  • mcp: answer ping during a tool call and honour cancellation (c8ddfa4)
  • mcp: keep deleted files out of watched sessions (6f4f137)
  • mcp: look symbols and profiles up by own key only (91f5edc)
  • mcp: make every result honour the official SDK's schema contract (17f41cd)
  • mcp: normalize file arguments and enforce enum-like options (f169fa0)
  • mcp: offer a persisted artifact only when it is the answer (a608060)
  • mcp: validate every tools/call before the repo is walked (13fd914)
  • neighbors: report every relation to a neighbour, strongest first (eeb9241)
  • onboard: take the tagline from the top of the README, not a release banner (87763ea)
  • playground: give the rules command the scan, so the literals gate is complete (f8081e8)
  • repomap: rank production code, and show each file's public surface first (4052c52)
  • resolution: count the new language resolvers as supported (268151e)
  • resolve: fix Python roots and TS, Go and doc-link resolution gaps (a79e1ef)
  • resolve: Rust lib names, renamed deps, uniform paths and #[path] mods (c7b3611)
  • rewrite: restate grep/rg/git grep faithfully, or refuse (6e963bb)
  • rewrite: smart case on fixed strings, refuse an empty path (e825db7)
  • rules: gate literals on the full list and reject configs that check nothing (9017eae)
  • rules: stop reporting live package files and unimportable languages as orphans (e64d0af)
  • scan: apply --scope/--include/--exclude inside the walk, as an intersection (22894f7)
  • scip: nest symbols by their real parent and map every kind (ffd4b61)
  • search: demote fixture and snapshot trees below tests (e69e12f)
  • search: index re-exports as prose, not as declarations (6adce9d), closes #1
  • search: let the stem bridge reach a word that is its own stem (84385f4)
  • search: make --rank graph a real, scale-free prior, and say it is a wash (7e299f6)
  • search: make --semantic honour --exact/--rank/--explain and keep lexical fields (3bef7ff)
  • search: search a stopword that is the whole query or a declared name (d46a603)
  • search: whole-number result limits everywhere, and "appears" for one term (43b875f)
  • symbols: keep symbols named proto in symbols.json (47807d9)
  • tests-map: Go tests cover their package, and a test its namesake (907158a)
  • viz: keep mermaid node ids clear of flowchart keywords, label nodes by path (e495d11)
  • walk: keep build/out/target/tmp directories that git tracks (3117448)
  • walk: skip in-repo file symlinks as aliases of their target (2c83d25)

Features

  • analytics: couple indexed files by confidence, rank only changed hotspots (6f84f1e)
  • callers: opt-in caller id per site (--with-caller, MCP withCaller) (6adfefc)
  • callgraph: overrides edges and dispatch, and deadcode honours them (ba8bc68)
  • cli: add status, a freshness report for the persisted index (2de09cc)
  • cli: find, refs and outline commands (b44fe61)
  • delta: serve the review over MCP and gate CI with --fail-on (dfcced9)
  • embed: embed each symbol's doc comment and skip re-exports (29da123)
  • extract: extract Vue, Svelte and Astro components from their script (0f01302)
  • extract: honour a Python module's __all__ (4f1d3f6)
  • extract: index reStructuredText docs like markdown (40ccbde)
  • extract: index TypeScript parameter properties and PHP promoted properties (d22432e)
  • graph: resolve soft refs only when they land on an in-repo file (e97f12b)
  • graph: resolve soft refs only when they land on an in-repo file (cbf64ac)
  • grep: export grepRepoEx and keep a timed-out answer consistent (40a0f65)
  • hierarchy: Go interface implementations by assertion and method set (cd3499e)
  • mcp: add a memory profile and place every tool in one (414a39a)
  • mcp: impact and neighbors tools (a30c442)
  • mcp: keep a member's parent in concise declarations (868a900)
  • mcp: send progress notifications during a call's scan phases (5c47083)
  • navigation: callpath and MCP call_path (370cc78)
  • navigation: one symbol syntax, explained misses, honest CLI flags (5632500)
  • navigation: symbol-at file:line, on the CLI and as MCP symbol_at (f52cb83)
  • resolve: import edges for Kotlin, Scala, Dart, Lua, shell and Elixir (11c26f1)
  • review every feature for correctness, performance and new capabilities (#22) (3ea8183)
  • scan: explain skipped paths with scan --why and scan --skipped (6ae0363)
  • scip: emit implementation relationships and package identity (420ddf7)
  • search: split all-lowercase compound file names into corpus words (c99098d)
  • workspaces: check declared deps, report resolution health, fix detection gaps (aafde96)

Performance Improvements

  • binders: group defs once and intersect with import targets (8d758a9)
  • delta: read the diff before the index, and leave the index out of it (7cd5760)
  • edit: skip the outline re-extraction for capped files (113cfb3)
  • embed: reuse stored vectors instead of re-embedding the corpus per search (263d652)
  • ignore: answer gitignore rules without a full-path regex (0edc2d5)
  • index: prove freshness from freshness.json, not the 142MB cache.json (0ec52df)
  • index: restamp graph.json when only the commit moved (a925f7b)
  • lsp: pool language-server sessions for the MCP server's lifetime (88424cc)
  • mcp: forget only the edited file after a symbolic edit (5369d44)
  • mcp: key every call on one canonical spelling of its repo (f1e66cf)
  • mcp: let --watch prove freshness instead of re-walking every call (764e960)
  • pool: hash before extracting a stat-changed file (ad9ae3a)
  • preload: read a fresh index one artifact at a time (4f25b51)
  • resolve: index Java types and C# namespace prefixes (756f8b7)
  • resolve: sort only the manifests, not the whole file set (23465aa)
  • scan: let docs take the stat fastpath and read their text lazily (b3170cf)
  • search: score only candidate files and dress only the kept rows (1e8c781)