Skip to content

Schema v2 conformance gaps vs keystone — stage-5 gate before v0.4.0 (edge keys, mixed identity, containment names) #98

Description

@rahlk

PROBLEM

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)

  1. 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.
  2. 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.
  3. 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).
  4. 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.
  5. MINOR — envelope: analyzer{name,version} absent; k_limit emitted at -a 1 (keystone: present at L4).

DEFINITION OF DONE

  • Paired fixture re-run shows key-for-key envelope/edge/containment parity with codeanalyzer-typescript-v2 modulo language-specific additive fields.
  • L1⊆…⊆L4 superset gate still green after the renames.
  • param_in/param_out non-empty on the interprocedural fixture (or an explained, documented reason).
  • Lands before the v0.4.0 tag.

Part of the schema-v2 migration epic #69 (stage 5 gate). Blocks python-sdk 2.0.0-rc.1 F2 (codellm-devkit/python-sdk#240 / epic codellm-devkit/python-sdk#238).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions