Skip to content

test: real L1⊆L2⊆L3⊆L4 monotonicity gate + neo4j↔json count parity #27

Description

@rahlk

Type: test · Branch:test/issue-27-monotonicity-gate · Part of epic #26 · Lands first

Problem

CLAUDE.md and README.md:279 advertise L1 ⊆ L2 ⊆ L3 ⊆ L4 as a CI-checkable gate, but the only monotonicity test (test/schema-v2.test.ts:405-424) asserts a partial L3 ⊆ L4 diff — and L1/L2 run on sample-app while L3/L4 run on dataflow-app, so no single fixture is diffed across the full chain. Neo4j↔JSON count parity (testing-and-validation.md:107-108) is never asserted. This is the correctness claim the whole v2 migration rests on, and it becomes the regression net for the rest of the cluster.

Change

Add a gate in test/schema-v2.test.ts on one fixture (test/fixtures/dataflow-app): run the analyzer at -a 1/2/3/4; for each N → N+1 assert the symbol-table id sets, body-node key sets, and edge-key sets (call_graph, per-callable cfg/cdg/ddg/summary, root param_in/param_out) are supersets. The only permitted value change is the sanctioned callee: null → id. Second clause: --emit neo4j (full-depth L4) node/edge counts equal the -a 4 JSON, modulo HAS_*/DECLARES containment.

Acceptance

  • All four levels on one fixture, green.
  • Removing any lower-level node/edge from the emitter makes it fail (whitelist: the callee refinement).
  • Neo4j overlay relationship counts match the L4 JSON edge-list lengths.

Files:test/schema-v2.test.ts (test-only — no production code).

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