Skip to content

codeanalyzer-java: Neo4j v2 projection — L4 SDG overlay (after L4; base+L3 landed via #198) #182

Description

@sinha108

Status (updated 2026-08-28)

Base relabel (L1/L2) + L3 overlay landed via #198 (PR #201); only the L4 SDG overlay remains here. The projection was de-consolidated and shipped pre-L4: #198 projected the base v2 families and the L3 dataflow overlay (J_CFG_NEXT/J_CDG/J_DDG), bumped the graph catalog to 2.0.0 (with the L4 families declared but not projected), and performed the v2 default-output flip (--schema defaults to v2, released as 3.0.0). This issue now tracks only the remaining L4 SDG overlay (J_PARAM_*/J_SUMMARY projection), to land after L4 (#184).

Original consolidation plan (2026-08-24, superseded)

This issue originally covered all Neo4j v2 projection work as one consolidated pass sequenced after L4 lands (base + L3 + L4), to do the Cypher/schema mapping once against an L4-stable schema, with the default-output flip moving to post-L4. #198 revised that: base+L3 (and the flip) shipped before L4, so only the L4 overlay remains here — two catalog touches (2.0.0 now, an L4 bump later) rather than one.

Spec

https://github.com/codellm-devkit/codeanalyzer-java/blob/main/docs/design/specs/schema-v2-l3-l4-design.md (§11 Neo4j projection)

Problem

neo4j/SchemaCatalog is at v1 1.0.0 with old node families (JCompilationUnit, JType is_* booleans, JCallable with code) and J_CALLS carrying type/weight/source_kind/destination_kind. It must project the full v2 CPG (L1 through L4).

Scope — v2 Neo4j families/relationships (base + L3 landed via #198; L4 overlay remaining)

Reuse the existing GraphProjector/RowBuilder/GraphRows/CypherWriter/BoltWriter machinery; keep the dual-label JSymbol merge pattern and _module provenance.

  • Base (L1/L2): node families JApplication, JModule, JSymbol (+ specific type-kind label), JCallable, JField, JParameter; J_-prefixed relationships (D9) J_HAS_MODULE, J_DECLARES, J_HAS_CALLABLE, J_HAS_FIELD, J_RESOLVES_TO, J_CALLS(weight,prov), J_EXTENDS, J_IMPLEMENTS.
  • L3 overlay: body/CFG nodes (merge key @line:col/@tag, props kind/start_line/end_line/_module) + J_HAS_BODY_NODE, J_CFG_NEXT(kind), J_CDG, J_DDG(var,prov).
  • L4 overlay: formal_in/out + actual_in/out vertices + J_PARAM_IN, J_PARAM_OUT, J_SUMMARY.

Goals

Caveats and known risks

Definition of done

  • --emit schema produces a schema.neo4j.json listing every v2 node family the JSON emits, through L4.
  • --emit neo4j (no URI) writes a graph.cypher that loads clean against an empty Neo4j and is idempotent.
  • Cross-projection gate: Neo4j node/edge counts at full depth match the JSON at max_level (modulo explicit HAS_* containment); no dangling relationships.

Metadata

Metadata

Assignees

Labels

breakingBreaking ChangeenhancementNew feature or requestjavaPull requests that update java code

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions