You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
codeanalyzer-python v1.5.3 shipped on 2026-09-14 with two fixes (codellm-devkit/codeanalyzer-python#216, #217). Neither reaches an SDK user until this pin moves: an analyzer release and a consumable analyzer release are two different claims, and the pin is the gate between them.
The analyzer no longer ingests its own output (codeanalyzer-python#207). discover_artifacts walked the project with no idea where the run writes, so an output or cache directory inside the input made run N inventory run N-1's analysis.json and embed it whole. The SDK's default cache_dir is <project>/.codeanalyzer, inside the input, so every local SDK run was exposed.
One body node per call site, even when two calls share a start position (codeanalyzer-python#215). body was keyed on the call site's start position; in getattr(o, n)(x) the outer application and the inner getattr share it, so the dynamic invocation was dropped from the payload, the L3/L4 graphs and the Neo4j projection. A key now carries a /2, /3 disambiguator, outermost first. On the flask fixture this recovers 68 call nodes.
Describe the solution you'd like
dependencies pin → codeanalyzer-python==1.5.3.
[tool.backend-versions] table → 1.5.3 (both must move together; they are read independently).
uv.lock regenerated.
Python test tier green with 1.5.3 actually installed.
Describe alternatives you've considered
Not stated in the original issue.
Additional context
Scope boundary
Pin bump only, in both places the version appears. No facade change, no new accessor.
Neither fix moved the schema contract: payload schema_version and graph SCHEMA_VERSION both stay 2.0.0. PyNeo4jBackend._ANALYZER_FLOOR stays (1, 5, 0); nothing on the read path needs 1.5.3 to answer.
codeanalyzer-python#219 (http_methods carries HTTP methods only) is merged on main but not in 1.5.3. It is not part of this bump.
1.5.3's changelog states python-sdk needs no change for the suffixed body key because body_key_column already parses it. Verify, do not assume: cldk/analysis/commons/keys.py is the parser.
A body key that used to collide now resolves to the outer call. A call whose callee is itself a call now carries callee_signature: null and method_name: "<unknown>" instead of being labelled a call to the inner callee. Any SDK test asserting an exact call-site count or an exact callee signature on such a site will move, and that movement is correct; check before treating it as a regression.
The own-output fix can change artifact inventories for a project that already holds a stale .codeanalyzer/analysis.json from an earlier run: those entries disappear from get_artifacts()-style results. That is the fix working.
Definition of done
Both pins read 1.5.3, uv.lock matches, the mocked and local-analyzer Python tiers are green with the 1.5.3 wheel installed, and any fixture expectation that changed is updated with a comment naming the analyzer release that changed it.
Is your feature request related to a problem? Please describe.
pyproject.tomlhard-pins the Python analyzer:codeanalyzer-python v1.5.3 shipped on 2026-09-14 with two fixes (codellm-devkit/codeanalyzer-python#216, #217). Neither reaches an SDK user until this pin moves: an analyzer release and a consumable analyzer release are two different claims, and the pin is the gate between them.
discover_artifactswalked the project with no idea where the run writes, so an output or cache directory inside the input made run N inventory run N-1'sanalysis.jsonand embed it whole. The SDK's defaultcache_diris<project>/.codeanalyzer, inside the input, so every local SDK run was exposed.bodywas keyed on the call site's start position; ingetattr(o, n)(x)the outer application and the innergetattrshare it, so the dynamic invocation was dropped from the payload, the L3/L4 graphs and the Neo4j projection. A key now carries a/2,/3disambiguator, outermost first. On the flask fixture this recovers 68 call nodes.Describe the solution you'd like
dependenciespin →codeanalyzer-python==1.5.3.[tool.backend-versions]table →1.5.3(both must move together; they are read independently).uv.lockregenerated.Describe alternatives you've considered
Not stated in the original issue.
Additional context
Scope boundary
schema_versionand graphSCHEMA_VERSIONboth stay2.0.0.PyNeo4jBackend._ANALYZER_FLOORstays(1, 5, 0); nothing on the read path needs 1.5.3 to answer.http_methodscarries HTTP methods only) is merged onmainbut not in 1.5.3. It is not part of this bump.Caveats and known risks
python-sdkneeds no change for the suffixed body key becausebody_key_columnalready parses it. Verify, do not assume:cldk/analysis/commons/keys.pyis the parser.callee_signature: nullandmethod_name: "<unknown>"instead of being labelled a call to the inner callee. Any SDK test asserting an exact call-site count or an exact callee signature on such a site will move, and that movement is correct; check before treating it as a regression..codeanalyzer/analysis.jsonfrom an earlier run: those entries disappear fromget_artifacts()-style results. That is the fix working.Definition of done
Both pins read
1.5.3,uv.lockmatches, the mocked and local-analyzer Python tiers are green with the 1.5.3 wheel installed, and any fixture expectation that changed is updated with a comment naming the analyzer release that changed it.