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
{{ message }}
Repository navigation
Schema v2 conformance gaps vs keystone — stage-5 gate before v0.4.0 (edge keys, mixed identity, containment names) #98
Stage-5 pre-release conformance check (2026-07-14, branch feat/v2-stage5-docs-release @ 3d39bbf) against the canonical schema-v2 keystone, run side-by-side with codeanalyzer-typescript-v2 (conformant reference) on paired fixtures at -a 1 and -a 4. Both pass levels 1-4 and the L1⊆L4 superset gate — but five deviations from the keystone remain, two of them load-bearing. These must land BEFORE the 0.4.0 tag, or they bake into v2 goldens and force per-language special cases in the SDK's shared cpg models (parity-clause violation).
GAPS (evidence: paired analysis.json runs; fixtures available on request)
BLOCKING — edge keys: call_graph edges emit {source, target, type: "CALL_DEP", provenance, weight}. Keystone: {src, dst, prov, weight}; the list name IS the type (no type field). TS-v2 emits the keystone form.
BLOCKING — mixed identity: edge source is a can:// id (can://python/pyfix/pkg/mod.py/entry()) while target is an old dotted signature (pkg.mod.ResUsers.init). Violates "no dangling endpoints" — the target matches no node id; id-joins and cross-projection checks fail.
BLOCKING — containment vocabulary: module carries classes{} and type carries methods{}. Keystone: types{} and callables{} (shared names, never renamed — this is what lets one SDK model set parse every analyzer).
INVESTIGATE — param_in/param_out empty at -a 4 on a fixture where TS-v2 emits both (entry -> method -> method chain with args + returns). Possibly downstream of gap 2 (identity mismatch breaks interprocedural linking); confirm after 1-3 land.
MINOR — envelope: analyzer{name,version} absent; k_limit emitted at -a 1 (keystone: present at L4).
Verified RESOLVED on the current mainline (1b34292), clean --eager L4 run of the paired fixture:
edge keys now src/dst/prov/weight (was source/target/type:CALL_DEP/provenance); zero CALL_DEP remnants
identity: every edge src AND dst is a can:// id; zero dotted targets (was mixed)
containment: module types/functions, type callables (was classes/methods)
envelope: analyzer.name present; param_in(3)/param_out(2) populated at L4
L1 ⊆ L4 superset gate holds
My original report was filed against a stale sample (feat/v2-stage5-docs-release @ 3d39bbf); mainline has since converged to the keystone. Remaining lockstep step is a conformant 0.4.x RELEASE so the SDK can pin it (python-sdk F4 #242) — tracked by the analyzer's own release, not this issue.
Activity
feat(schema)!: keystone conformance sweep — edge keys, id-homed endpo…
chore(release): re-stage the schema-v2 release as 1.0.0
rahlk commentedon Jul 15, 2026
Verified RESOLVED on the current mainline (1b34292), clean
--eagerL4 run of the paired fixture:src/dst/prov/weight(wassource/target/type:CALL_DEP/provenance); zeroCALL_DEPremnantssrcANDdstis acan://id; zero dotted targets (was mixed)types/functions, typecallables(wasclasses/methods)analyzer.namepresent;param_in(3)/param_out(2) populated at L4My original report was filed against a stale sample (feat/v2-stage5-docs-release @ 3d39bbf); mainline has since converged to the keystone. Remaining lockstep step is a conformant 0.4.x RELEASE so the SDK can pin it (python-sdk F4 #242) — tracked by the analyzer's own release, not this issue.