feat: take up codeanalyzer-python 1.5.1, java 3.1.2 and typescript 1.5.3 - #385
Open
rahlk wants to merge 1 commit into
Open
feat: take up codeanalyzer-python 1.5.1, java 3.1.2 and typescript 1.5.3#385rahlk wants to merge 1 commit into
rahlk wants to merge 1 commit into
Conversation
All three analyzers shipped the same fix in lockstep: param_in and param_out edges now name the bound formal in var (codeanalyzer-python#196, codeanalyzer-java#250, codeanalyzer-typescript#197). The schemas had declared that property since the L4 layer landed and the projections wrote nothing, so a consumer predicate on it evaluated to null on every edge crossing a call boundary — and under Cypher's three-valued logic an all() over that null excludes the whole path, so an interprocedural flow read as a proved absence of flow. Indistinguishable from a real negative, which is the failure mode this surface exists to refuse. Measured before the bump, on a graph emitted by the previously pinned codeanalyzer-python 1.5.0: var was null on 4 of 4 PY_PARAM_IN edges and 6 of 6 PY_PARAM_OUT, alongside 10 of 10 PY_CDG and 8 of 8 PY_SUMMARY, while all 44 PY_DDG carried it. So this was the shipped state of rc.4 rather than a legacy-graph edge case. The bump is not only a pin, and the suite said so — 7 failures, two causes. JParamEdge declared only src and dst, so every param edge failed extra="forbid" once 3.1.2 wrote var: 2515 validation errors on daytrader8 and 2841 on the built copy. The field is now Optional, because an analysis.json or a graph from 3.1.1 and earlier carries no such key and both backends attach to artifacts they did not produce. TSParamEdge had already declared it, which is why TypeScript's models needed nothing — the asymmetry was Java's alone. This is extra="forbid" working: the drift failed loudly instead of being dropped. The four TypeScript level fixtures were stamped 1.5.2 and the models test reads the pin from pyproject rather than hardcoding it, so they failed the version tripwire that exists for exactly this. Regenerated all four with 1.5.3 by the recipe their README documents. The diff is the fix and nothing else: on a4, param_in went from 5 of 31 edges carrying var to 31 of 31 and param_out from 0 of 26 to 26 of 26, with no top-level key added or removed at any level. The README's per-generation changelog records it. No analyzer floor moves. Each of the three deltas is the var fix plus release plumbing, with no change to the can:// grammar — java's language-neutral externals merge sits below v3.1.1 and was already in rc.4's pin. Raising a floor would refuse graphs that still work, since the fix only adds a property, and a capability difference belongs in a data-measured probe rather than a version literal. Gate: 1597 passed, 370 skipped, no failures — the same count as before the bump. Closes #384
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.
Takes up the three analyzer releases cut today. All three shipped the same fix in lockstep —
param_inandparam_outedges now name the bound formal invar(codeanalyzer-python#196, codeanalyzer-java#250, codeanalyzer-typescript#197).
codeanalyzer-pythoncodeanalyzer-javacodeanalyzer-typescriptWhy the fix matters, measured rather than argued
The schemas had declared
varon those edges since the L4 layer landed and the projections wrotenothing. A consumer predicate on it is therefore
nullon every edge crossing a call boundary, andunder Cypher's three-valued logic an
all()over thatnullexcludes the whole path — so aninterprocedural flow reads as a proved absence of flow. That is the ambiguous-empty failure this
surface exists to refuse.
Measured on a graph emitted by the previously pinned 1.5.0, before this bump:
varPY_DDGPY_PARAM_INPY_PARAM_OUTPY_CDGPY_SUMMARYSo this was the shipped state of rc.4, not a legacy-graph edge case.
The bump is not only a pin, and the suite said so
7 failures, two causes, neither of them noise.
JParamEdgeneeded widening. It declared onlysrc/dst, so once 3.1.2 wrotevarevery paramedge failed
extra="forbid"— 2515 validation errors on daytrader8, 2841 on the built copy:The field is
Optional, because ananalysis.jsonor a graph from 3.1.1 or earlier carries no suchkey and both backends attach to artifacts they did not produce.
TSParamEdgehad already declared it,so TypeScript's models needed nothing — the asymmetry was Java's alone. This is
extra="forbid"working as designed: the drift failed loudly instead of being silently dropped.
The four TypeScript level fixtures were stale. They were stamped 1.5.2, and the models test reads
the pin from
pyproject.tomlrather than hardcoding it, so they tripped the version guard that existsfor exactly this (its docstring notes leg 2.5b found it stale once already). Regenerated all four with
1.5.3 by the recipe their README documents. The diff is the fix and nothing else — on
a4,param_inwent from 5 of 31 edges carrying
varto 31 of 31 andparam_outfrom 0 of 26 to 26 of 26, with notop-level key added or removed at any level. The README's per-generation changelog records it.
No floor moves
Each delta is the
varfix plus release plumbing, with no change to thecan://grammar — Java'slanguage-neutral externals merge sits below
v3.1.1and was already in rc.4's pin. Raising a floorwould refuse graphs that still work, since the fix only adds a property, and a capability difference
belongs in a data-measured probe rather than a version literal.
(3,1,1)/(1,5,0)/(1,5,2)stay.Gate
1597 passed, 370 skipped, no failures — the same count as before the bump.Not in this PR
Five incorporation issues are open for pins long since taken up: #315 (1.2.0), #316 (1.3.0),
#317 (1.4.0), #325 (1.4.1), #377 (1.5.0). Only
codeanalyzer-python's pipelineauto-creates them and nothing closes them, so they accumulate. Worth closing as done — separately from
this change.
Also worth noting: Java's and TypeScript's release pipelines have no equivalent of Python's
notify-python-sdkjob, so their releases prompt nothing here. That asymmetry is how a pin driftsbehind unnoticed.
Closes #384