chore(deps): move the sibling analyzer pins to codeanalyzer-python 1.5.2 and codeanalyzer-typescript 1.6.0 - #398
Merged
Conversation
…5.2 and codeanalyzer-typescript 1.6.0 Both releases are Neo4j-projection-only conformance fixes — the divergence codeanalyzer-java 3.2.0 closed for Java, closed for the siblings. python 1.5.2 adds :PyModule.source, all six span properties wherever a span is declared, :PyVariable.value_json, :PyBodyNode.callee_signature, PY_IMPORTS.positions_json and a span on PY_DECORATED_BY; typescript 1.6.0 adds :TSModule.source and the four new span properties across ten labels. Neither touches analysis.json, and the TypeScript fixtures prove it: regenerated with the 1.6.0 wheel at all four levels, they are byte-identical to the 1.5.3 generation apart from the analyzer.version stamp, compared by parsing both and masking that one field. Neither Neo4j floor moves — 1.5.0 for Python, 1.5.2 for TypeScript. Raising a floor is what would let the SDK read the new text, and that is uptake work the size of #394, tracked in #396 (Python) and #391 (TypeScript). The pin is what the SDK installs; the floor is what it requires of a graph. The prose those releases make false is corrected rather than deleted: every place that said "the graph does not carry this" now says the SDK does not read it, and names the issue that will. That covers the TypeScript lossiness rows and the cross-language locate gotcha in docs/agent-api-reference.md (which claimed :PyModule nodes "genuinely do not store source text"), the module_source_unavailable row in the diagnostics table, four module docstrings, callsite()'s claim that columns are not projected, CLAUDE.md's TypeScript row, and the fixtures README. One improvement is free on a re-emitted Python graph: reconstruct.callsite reads start_column with a -1 default, so 1.5.2 supplies real columns and an older graph still answers -1 — no version branch. Gate: 1601 passed, 370 skipped, coverage 85.11%, run solo on this commit. Closes #397.
This was referenced Sep 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #397.
Two sibling analyzers shipped on 2026-09-10; this moves the pins to them and corrects the prose the
move makes false. No read path changes.
The pins
codeanalyzer-pythoncodeanalyzer-typescriptBoth releases are Neo4j-projection-only conformance fixes — the same divergence codeanalyzer-java
3.2.0 closed for Java (#394), closed for the siblings. python 1.5.2 adds
:PyModule.source, all sixspan properties wherever a span is declared,
:PyVariable.value_json,:PyBodyNode.callee_signature,PY_IMPORTS.positions_jsonand a span onPY_DECORATED_BY; typescript 1.6.0 adds:TSModule.sourceand the four new span properties across ten labels. Neither touches
analysis.json.Measured, not assumed. The TypeScript fixtures are regenerated with the 1.6.0 wheel at all four
levels and are byte-identical to the 1.5.3 generation apart from the
analyzer.versionstamp —compared by parsing both and masking that one field. That is the evidence the bump is not a read-path
change: had 1.6.0 moved anything in the JSON, this diff would show it.
No floor moves
The Neo4j floors stay
(1, 5, 0)for Python and(1, 5, 2)for TypeScript. Raising a floor is whatwould let the SDK read the new text, and that is separate uptake work — #396 for Python, #391 for
TypeScript, each the size of #394. The pin is what the SDK installs; the floor is what it requires of
a graph; they are different numbers and this PR moves only the first.
The one thing that shifts on a re-emitted Python graph is a call site's columns:
python/neo4j/reconstruct.py:155already readsstart_columnwith a-1default, so a 1.5.2 graphsupplies real values and an older one still answers
-1. Data-driven and self-healing, no branch.The prose
Every sentence corrected here was true when written and stopped being true upstream. Each now says
the SDK does not read it rather than the graph does not carry it, and names the issue that will:
docs/agent-api-reference.md— the TypeScript lossiness rows (codeon any node, module-scopelocate,get_sourceon a body-node id,LocateResult.span), the cross-languagelocategotcha(which claimed
:PyModulenodes "genuinely do not store source text"), and themodule_source_unavailablerow in the diagnostics table, which now distinguishes the threelanguages instead of saying "(Neo4j)".
typescript/neo4j/reconstruct.py,python/neo4j/reconstruct.py,python/neo4j/neo4j_backend.py,typescript/neo4j/neo4j_backend.py— the module docstrings' lossiness lists, pluscallsite'sclaim that columns are not projected.
CLAUDE.md— the TypeScript row names the pinned binary (1.6.0); the floor (≥ 1.5.2) stays theseparate fact it is.
tests/resources/typescript/analysis_json/v2/README.md— regenerated-by line, and what 1.6.0changed in this output (nothing).
Gate
uv run --all-groups --extra neo4j pytest -q -p no:cacheprovider -rs, run solo on this commit:1601 passed, 370 skipped, 11 warnings in 151.74s, coverage 85.11%. The TypeScript and Python E2E tiers ran the new binaries rather than skipping.