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
Is your feature request related to a problem? Please describe.
A new codeanalyzer-python release (v1.4.0) is published. Update the codeanalyzer-python pin in this repo and adapt the integration to the changes below (see PyCodeanalyzer._run_analyzer).
Describe the solution you'd like
Not stated in the original issue.
Describe alternatives you've considered
Not stated in the original issue.
Additional context
[1.4.0] - 2026-09-02
Removed
BREAKING: the artifact-text byte cap, its --artifact-text-max-bytes flag, and the PyArtifact.text_truncated field (also the Neo4j :Artifact property). An artifact's source is now the whole file, or "" because it is binary or --no-artifact-text was passed -- never a prefix. A truncated source read exactly like a complete small file, and the flag meant to distinguish them conflated "whole file" with "capture off"; measured on microsoft/vscode the cap fired on 32 of 4,953 artifacts (0.6%). Matches codeanalyzer-typescript, which removed both in its Update get_all_docstrings to return dict #117. --no-artifact-text is unchanged. python's dependency-manifest exemption from the cap is gone with the cap -- every decodable file is captured in full (Reachability API: reverse reachability (given a sink, find all sources that reach it) #172).
Fixed
Neo4j incremental push no longer deletes a sibling analyzer's nodes. The per-module purge matched MATCH (x {_module: $m}) with no label, and _module is a shared convention -- codeanalyzer-java and codeanalyzer-typescript set it on their nodes too -- so where a file key collided, a python push silently detach-deleted their graph. Both statements are now anchored on the python-owned labels, derived from the schema catalog (MODULE_OWNED_LABELS) so a new module-scoped label is covered automatically (Reachability API: forward reachability (given a source, find all reachable sinks) #171).
Changed
A Neo4j Bolt push no longer deletes anything by default. The per-module purge and the full-run orphan prune are the only destructive steps, and both now run under --eager only; a default --lazy push is purely additive. The cost of the default is staleness -- a declaration or call edge the source no longer has survives until an --eager push reconciles it -- and the gain is that an incremental push into a shared database cannot destroy anything (Reachability API: forward reachability (given a source, find all reachable sinks) #171).
Is your feature request related to a problem? Please describe.
A new
codeanalyzer-pythonrelease (v1.4.0) is published. Update thecodeanalyzer-pythonpin in this repo and adapt the integration to the changes below (seePyCodeanalyzer._run_analyzer).Describe the solution you'd like
Not stated in the original issue.
Describe alternatives you've considered
Not stated in the original issue.
Additional context
[1.4.0] - 2026-09-02
Removed
--artifact-text-max-bytesflag, and thePyArtifact.text_truncatedfield (also the Neo4j:Artifactproperty). An artifact'ssourceis now the whole file, or""because it is binary or--no-artifact-textwas passed -- never a prefix. A truncatedsourceread exactly like a complete small file, and the flag meant to distinguish them conflated "whole file" with "capture off"; measured on microsoft/vscode the cap fired on 32 of 4,953 artifacts (0.6%). Matches codeanalyzer-typescript, which removed both in its Update get_all_docstrings to return dict #117.--no-artifact-textis unchanged. python'sdependency-manifestexemption from the cap is gone with the cap -- every decodable file is captured in full (Reachability API: reverse reachability (given a sink, find all sources that reach it) #172).Fixed
MATCH (x {_module: $m})with no label, and_moduleis a shared convention --codeanalyzer-javaandcodeanalyzer-typescriptset it on their nodes too -- so where a file key collided, a python push silently detach-deleted their graph. Both statements are now anchored on the python-owned labels, derived from the schema catalog (MODULE_OWNED_LABELS) so a new module-scoped label is covered automatically (Reachability API: forward reachability (given a source, find all reachable sinks) #171).Changed
--eageronly; a default--lazypush is purely additive. The cost of the default is staleness -- a declaration or call edge the source no longer has survives until an--eagerpush reconciles it -- and the gain is that an incremental push into a shared database cannot destroy anything (Reachability API: forward reachability (given a source, find all reachable sinks) #171).Added
_moduleindex per module-owned Neo4j label. The per-module purge ran as an unindexed scan once per changed module -- quadratic on a full push (Reachability API: forward reachability (given a source, find all reachable sinks) #171).