Round-005 path probe (76 queries × both engines @ d8668fd, hand-computed trail-semantics oracles, twice-verified; scripts in session scratchpad probe-paths/). Fixtures: diamond, directed 3-cycle, self-loop, parallel edges, typed, disconnected.
SILENT-WRONG:
- Lane-dependent cardinality — three answers for one MATCH (diamond
[*2]): RETURN y.id→1 row, count(*)→2, RETURN x.id, y.id→2. Single-alias endpoint projections compile to a reachability lane that collapses path multiplicity.
- Single-alias lane BFS visited-pruning drops valid k-trails to nearer nodes (3-cycle undirected
[*2] → [] vs oracle [b,c]); the two-alias row lane gets it right — pandas disagrees with itself.
- Row/agg lane uses WALK semantics on self-loops (edge reused within a path:
[*2] on self-loop returns (s,s), count 2 vs oracle 1; yet [*3] → 0 — neither walk nor trail).
- Relationship uniqueness not enforced across pattern elements:
(x)-[]->(m)-[]-(y) on a single-edge graph reuses the edge → 1 row vs oracle 0; parallel-edge 2-hop 6 vs 4.
- Undirected self-loop: projection lane drops it, agg lane double-counts orientations.
- shortestPath unreachable in PLAIN MATCH → null row instead of no row (pandas; indistinguishable from OPTIONAL).
- polars
[*0..1] silently drops the zero-hop seed (pandas correct; polars' own NIE text lists include_zero_hop_seed as must-error, but these forms don't raise).
TYPED-GAP: 8. [*..3] (valid openCypher omitted-lower-bound) → GFQLSyntaxError; parser grammar (~904-953) lacks the *..M production; also blocks bounded shortestPath.
Honest NIEs and a solid correct inventory (cycle termination exact, typed alternation, shortestPath ties/typed/min-bound) in the probe report. Net: path counting is only trustworthy via multi-alias row projections or grouped aggregates on acyclic neighborhoods. Successor context: #1748 (polars var-length), #1658 (CSR engagement).
Round-005 path probe (76 queries × both engines @ d8668fd, hand-computed trail-semantics oracles, twice-verified; scripts in session scratchpad probe-paths/). Fixtures: diamond, directed 3-cycle, self-loop, parallel edges, typed, disconnected.
SILENT-WRONG:
[*2]):RETURN y.id→1 row,count(*)→2,RETURN x.id, y.id→2. Single-alias endpoint projections compile to a reachability lane that collapses path multiplicity.[*2]→ [] vs oracle [b,c]); the two-alias row lane gets it right — pandas disagrees with itself.[*2]on self-loop returns (s,s), count 2 vs oracle 1; yet[*3]→ 0 — neither walk nor trail).(x)-[]->(m)-[]-(y)on a single-edge graph reuses the edge → 1 row vs oracle 0; parallel-edge 2-hop 6 vs 4.[*0..1]silently drops the zero-hop seed (pandas correct; polars' own NIE text lists include_zero_hop_seed as must-error, but these forms don't raise).TYPED-GAP: 8.
[*..3](valid openCypher omitted-lower-bound) → GFQLSyntaxError; parser grammar (~904-953) lacks the*..Mproduction; also blocks bounded shortestPath.Honest NIEs and a solid correct inventory (cycle termination exact, typed alternation, shortestPath ties/typed/min-bound) in the probe report. Net: path counting is only trustworthy via multi-alias row projections or grouped aggregates on acyclic neighborhoods. Successor context: #1748 (polars var-length), #1658 (CSR engagement).