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
A new codeanalyzer-python release (v1.0.1) is published.
Update the codeanalyzer-python pin in this repo and adapt the
integration to the changes below (see PyCodeanalyzer._run_analyzer).
the CLI re-execs once with PYTHONHASHSEED=0 (export the variable to opt out or pin another
seed) — PyCG's capped fixpoint iterates hash-ordered sets, so an unpinned per-interpreter
seed shifted its frontier arbitrarily (observed 1,527 vs 4,712 edges on the same input);
Ray workers get the pinned seed via the runtime env;
the PyCG mini-project root is content-derived instead of a random mkdtemp (PyCG state keys
on absolute module paths), with an exclusive sidecar lock so concurrent analyses of the same
project serialize instead of deleting each other's tree mid-run;
entry points are sorted (was filesystem order) and the emitted call_graph is canonically
ordered by (src, dst);
Jedi inference candidates are tie-broken deterministically (sorted, not set order) — a
union-typed receiver (e.g. IOBase | BufferedRandom | TextIOWrapper) previously resolved to
a different member per run.
Regression gates: test_l2_runs_are_byte_identical plus the Create a builder C project and obtain CompilationDatabase #87 audit gate below.
L2 audit gate (Create a builder C project and obtain CompilationDatabase #87 acceptance): ≥95% of resolved non-constructor callsites must bind to the
invoked attribute name, and no callsite may fall back to a class id when the class declares the
exact method (test_l2_audit_gate_callee_name_equality). The underlying anchoring fix shipped
in 1.0.0 via the v0.3.1 merge.
A new
codeanalyzer-pythonrelease (v1.0.1) is published.Update the
codeanalyzer-pythonpin in this repo and adapt theintegration to the changes below (see
PyCodeanalyzer._run_analyzer).[1.0.1] - 2026-07-15
Fixed
analysis.json. Four independent nondeterminism sources were closed:PYTHONHASHSEED=0(export the variable to opt out or pin anotherseed) — PyCG's capped fixpoint iterates hash-ordered sets, so an unpinned per-interpreter
seed shifted its frontier arbitrarily (observed 1,527 vs 4,712 edges on the same input);
Ray workers get the pinned seed via the runtime env;
mkdtemp(PyCG state keyson absolute module paths), with an exclusive sidecar lock so concurrent analyses of the same
project serialize instead of deleting each other's tree mid-run;
call_graphis canonicallyordered by
(src, dst);union-typed receiver (e.g.
IOBase | BufferedRandom | TextIOWrapper) previously resolved toa different member per run.
Regression gates:
test_l2_runs_are_byte_identicalplus the Create a builder C project and obtainCompilationDatabase#87 audit gate below.CompilationDatabase#87 acceptance): ≥95% of resolved non-constructor callsites must bind to theinvoked attribute name, and no callsite may fall back to a class id when the class declares the
exact method (
test_l2_audit_gate_callee_name_equality). The underlying anchoring fix shippedin 1.0.0 via the v0.3.1 merge.