Skip to content

F5: Neo4j backends → schema-v2 projection (CanNode reconstruct, contract-driven) #243

Description

@rahlk

PROBLEM

The Neo4j backends and reconstruct.py read the old node labels and properties. Schema v2 projects a different graph (:CanNode families, containment as HAS_*/DECLARES edges, overlay relationships), published as a machine-readable schema.neo4j.json per analyzer.

SCOPE BOUNDARY

TS + Python graph backends; Java's is the Java-lane child (#228). Read-only backends — ingestion stays the analyzers' --emit neo4j job (#160's split stands).

GOALS

  1. Reconstruct the cpg models/views from the v2 node/relationship families, driven by each analyzer's published schema.neo4j.json (not hand-maintained label lists).
  2. Read capabilities off the :Application node (schema_version, max_level) — same capability model as the local backends.
  3. Backend parity vs the F1 fixtures "modulo documented lossiness": body text is absent when source was not projected — documented, never silently absorbed.
  4. Closes the TSNeo4jBackend.get_call_graph() omits synthesized anonymous-callback nodes — backend parity gap #176 class of parity gaps by construction (one reconstruct path from one schema contract).

CAVEATS AND KNOWN RISKS

  • The graph is always full-depth per the keystone (levels gate the JSON path only) — do not level-gate graph reads.
  • Requires a seeded Neo4j fixture in CI (container or recorded sessions); coordinate with F1's harness.

DEFINITION OF DONE

Part of #238

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions