Highlights
- Documentation Enhancements: Module-level documentation is now captured for all languages, and doc comments are captured as docstrings on every definition label.
- UTF-8 Handling: Improved handling of invalid UTF-8 bytes prevents file definitions from being dropped.
- Neo4j Backend Support: Added support for Neo4j as a graph backend through a pluggable dialect seam.
- CI Improvements: Enhanced CI processes include auto-review of stacked PRs, failure for PRs without CI runs, and validation of configuration files.
- Gloss Node & Notes: Introduced the Gloss node for agent-authored notes and enabled writing and reading Gloss notes via the MCP server.
What's Changed
- feat: capture module-level documentation on the Module node, for every language by @vitali87 in #1790
- fix: one invalid UTF-8 byte no longer drops a whole file's definitions by @vitali87 in #1812
- feat: support Neo4j as a graph backend behind a pluggable dialect seam by @vitali87 in #1814
- fix: warn when a symbol name is truncated by an invalid byte by @vitali87 in #1816
- fix: pin UV_PYTHON_INSTALL_DIR so the built image's venv actually runs by @Victor-johnsson in #1788
- docs: pin why a reachability probe must query, not just connect by @vitali87 in #1818
- ci: auto-review stacked PRs whose base is a feat/ or fix/ branch by @vitali87 in #1822
- ci: fail a PR that has no CI run at its head commit by @vitali87 in #1819
- ci: validate .coderabbit.yaml in pre-commit and CI by @vitali87 in #1829
- feat: add the Gloss node for agent-authored notes (#1808) by @vitali87 in #1830
- fix: walk every parsed file for calls, not only those with call or function captures (#1837) by @vitali87 in #1838
- docs: state both guarantees safe_decode_text provides, and test them (#1811) by @vitali87 in #1841
- refactor: remove the callerless register_parsed_file and pin the invariant it implied (#1784) by @vitali87 in #1842
- fix: select Cypher prompt graph-algorithm guidance by backend (#1813) by @vitali87 in #1839
- fix: keep a surviving stem-sharing file's definitions when its sibling is deleted (#1773) by @vitali87 in #1844
- fix: a successful marker clear settles only the project that owns the flag (#1774) by @vitali87 in #1846
- fix: find the CI run by head SHA, not in a window of recent runs by @vitali87 in #1847
- fix: flag a review whose own checks could not execute (#1824) by @vitali87 in #1826
- fix: rebuild findings and endpoint links on the scoped re-ingest path (#1670) by @vitali87 in #1852
- fix: stop the staleness warning promising a rebuild it does not perform (#1649) by @vitali87 in #1853
- fix: sweep glosses whose subject a project delete removed (#1828) by @vitali87 in #1856
- fix: key the incomplete-run marker per run so a concurrent clear cannot remove it (#1709) by @vitali87 in #1850
- fix: a proven-restricted aggregate alias is refused twice (#1843) by @vitali87 in #1851
- fix: distinguish CI still running from CI never ran (#1827) by @vitali87 in #1855
- fix: read the durable incomplete-run marker on the structural-delta path too (#1783) by @vitali87 in #1845
- fix: key a single-file run against the project root, not the target's parent (#1775) by @vitali87 in #1860
- docs: state what the single-file prune guard is actually protecting (#1776) by @vitali87 in #1861
- fix: a queued CI run is not a missing one (#1848) by @vitali87 in #1858
- test: add a fixture-coverage assertion so a vacuous empty-result test fails (#1859) by @vitali87 in #1862
- test: use the shared fixture-coverage helper in test_pr_gate_check (#1863) by @vitali87 in #1864
- fix: count context tokens for every provider, not only Anthropic (#1500) by @vitali87 in #1832
- fix: a file parsing to no definitions must retract its stale call sites (#1794) by @vitali87 in #1833
- test: isolate the startup key tests from ambient provider keys (#1871) by @vitali87 in #1874
- fix: reingest re-evaluates a directory's package-ness in both directions (#1798) by @vitali87 in #1835
- feat: postcondition contract for edit operations, enforced on rename (#1531) by @vitali87 in #1547
- fix: re-ingest hydration derives the package map without emitting containers (#1872) by @vitali87 in #1875
- feat: write and read Gloss notes through the MCP server (#1808) by @vitali87 in #1890
- fix: a doc above a function-valued const documents the function, not the file by @vitali87 in #1889
- feat: capture doc comments as docstring on every definition label, for all languages by @vitali87 in #1888
- fix: keep a receiver's type through or/ternary/operator assignment (#1868) by @vitali87 in #1870
- feat: grade a gloss stale when its definition's content changes (#1808) by @vitali87 in #1894
- feat: Parameter node label and Python emitter behind +parameters (#1804) by @vitali87 in #1891
- fix: key the stale type-fact filter on the fact's file, not its module qn (#1892) by @vitali87 in #1895
- fix: a typed first-party receiver whose class lacks the method is a non-edge, not a trie match (#1897) by @vitali87 in #1902
- fix: type an inline call-site receiver by the same rules as an assigned one (#1893) by @vitali87 in #1898
- feat: add a Field node for declared fields, attributes and properties in every language by @vitali87 in #1899
- fix: type a tuple-unpacked local from the call's tuple annotation (#1896) by @vitali87 in #1905
- fix: type a local assigned from self.method() or cls.method() as the enclosing class's return (#1901) by @vitali87 in #1904
- feat(gloss): repair tiers by content hash: MOVED, AMBIGUOUS, LOST (#1808) by @vitali87 in #1909
- refactor: split the Python source-root helpers (#1669) by @vitali87 in #1923
- refactor: split the C# field-map and member-name helpers (#1669) by @vitali87 in #1924
- refactor: extract the NEWS.md entry parser (#1669) by @vitali87 in #1933
- fix: unpack a tuple-annotated name into typed locals (#1900) by @vitali87 in #1919
- fix: a local binding of an imported module's name shadows the module (#1907) by @vitali87 in #1927
- fix: walk a function nested in a method by the class pass only (#1903) by @vitali87 in #1906
- test: assert the closure's receiver edge is the only one (#1903) by @vitali87 in #1937
- fix: make cgr doctor report what the runtime needs (#1910) by @vitali87 in #1920
- fix(ci): recognize fork PR runs with unambiguous source history by @lllleolin-max in #1877
- fix: separate rename success from rollback status by @lllleolin-max in #1883
- fix: retain failed node batches for retry by @lllleolin-max in #1876
- fix: make the release news pipeline's outcome observable (#1605) by @vitali87 in #1869
- fix: count special token spellings as ordinary text by @lllleolin-max in #1865
- fix(evals): scope incremental rehydration to the requested project by @lllleolin-max in #1878
- fix(trace): preserve UNC hosts in CPU profile file URLs by @lllleolin-max in #1879
- fix: declare nested empty containers during rename by @lllleolin-max in #1880
- fix: reject incomplete protobuf index layouts by @lllleolin-max in #1884
- fix: a recorded nameless function owns its references (#1932) by @vitali87 in #1940
- fix: close and order the definition lookups (#1925) by @vitali87 in #1930
- docs: document all enabled security measures in SECURITY.md by @vitali87 in #1959
- build(deps): bump httpx2 from 2.10.0 to 2.12.0 in the uv group across 1 directory by @dependabot[bot] in #1961
New Contributors
- @Victor-johnsson made their first contribution in #1788
- @lllleolin-max made their first contribution in #1877
Full Changelog: v0.0.895...v0.0.945