Skip to content

Commit 6c697bc

Browse files
committed
release: v0.12.0
1 parent ef97808 commit 6c697bc

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.12.0] - 2026-07-26
9+
10+
Pick-discipline and lane-parity release. Every bare-name resolution pick is evidence-gated: import bindings resolve exact-first then exactly-one at every surface, member picks require containment or kind evidence, and candidate order never decides an edge — insertion-order dependence is gone. Incremental re-indexing keeps the edges pointing into a changed file: cleanup captures inbound edges and rebinds them to the replacement symbols by containing type, then peer ordinal, then line, so re-indexing a file no longer sheds its callers' edges (previously up to 8.8% of a corpus call graph after two file touches). `serve --watch` indexes newly created files and directories.
11+
12+
### Breaking Changes
13+
14+
- Emission-semantics version 3 (was 1): indexes built by earlier binaries refuse before any tool runs — read commands exit `7` with the heal command; `codanna index` rebuilds from scratch automatically with a message. One rebuild per workspace crosses the gap.
15+
- `indexing.ignore_patterns` setting removed. No code path ever consumed it; exclusion is `.gitignore` + `.codannaignore` (gitignore syntax, per-directory chains), honored identically by batch indexing and the watcher. Settings files still carrying the key load clean.
16+
- `module_path` round-trips absent-vs-empty faithfully: a symbol without module identity persists the field absent instead of `""`. JSON consumers treating the empty string as the no-module sentinel must read absence; Java rows are the main visible surface.
17+
- Resolved-relationship counts drop where the new gates refuse unevidenced picks: ktor 22132 -> 20451 composed (-7.6%), MediatR 267 -> 139 (-48%), three.js -892 in the import-binding class. Stratified source reads of the dropped masses: the three.js src-side sample is 20/20 wrong cross-bundle picks; the ktor sample is 4/20 wrong (stdlib and cross-module captures) and 16/20 correct-by-luck single-candidate picks the resolver could not evidence. Dropped recall returns through evidence supply (receiver inference), not through restored guessing.
18+
19+
### Added
20+
21+
- Self-form and bare calls in a class body resolve to inherited members, and self-form calls resolve to cross-file members of the same type (split definitions), extending the class-membership evidence channel.
22+
- `builder_commit` in `index.meta` and `get_index_info --json`: the commit the building binary was compiled from, suffixed `-dirty` when built from a modified tree. Descriptive only; absent for tarball builds and indexes written before the stamp existed.
23+
24+
### Fixed
25+
26+
- Incremental re-index preserves cross-file edges into the changed files across all three entry points (`codanna index`, `serve --watch`, `mcp <tool> --watch`), including under range-shifting edits. Indexes built by earlier versions heal the accumulated loss at the forced rebuild. File renames are outside this guarantee: a renamed file's inbound edges still drop until a force re-index.
27+
- `serve --watch` indexes created files and directories: registered roots are watched directly, a directory created under one extends the watch set to its traversable subtree with catch-up, and eligibility is decided by the batch walker itself, so `.gitignore`/`.codannaignore` bind identically on both lanes. Previously a file created during a watch session stayed out of the index until a manual re-index.
28+
- Recorded workspace paths load canonicalized: a symlink component in a hand-edited or copied `settings.toml` no longer disables the workspace-root module-path tier or forks single-file re-index identity from the batch lane.
29+
- PHP enum declarations are containers with class evidence and enum cases are `Constant` members; calls resolve through enum receivers.
30+
- `self` in Python nested defs binds to the lexical enclosing method's class, recovering calls the 0.11.1 veto refused.
31+
- Defines cards count members of every kind, not methods only.
32+
- `codanna index` on an already-registered path reports registration state instead of a claim about index contents.
33+
834
## [0.11.1] - 2026-07-24
935

1036
### Fixed

‎Cargo.lock‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "codanna"
3-
version = "0.11.1"
3+
version = "0.12.0"
44
authors = ["Angel Bartolli <bartolli@gmail.com>"]
55
edition = "2024"
66
description = "Local code intelligence MCP server and CLI for AI coding agents"

0 commit comments

Comments
 (0)