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

    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