Repository navigation
Meta: benchmark coverage unlock plan for GFQL and GFQL/Cypher #992
Description
Activity
New measured benchmark state from
pyg-benchas of March 31, 2026:- official SNB query floor measured:
7(interactive-short-1/2/3/4/5/6+interactive-complex-2) GFQL:ok=2,supported_with_workaround=5Cypher:ok=3,blocked=3,semantic_mismatch=1
New issue from that floor:
#994direct Cypher undirected peer binding mismatch on incoming edges- blocks
interactive-short-3correctness even though the query now executes
- blocks
Current local next queue from the translation analyzer:
interactive-complex-8interactive-short-7interactive-complex-13interactive-complex-4
- official SNB query floor measured:
Priority recommendation from the current measured SNB benchmark floor (
8official queries measured on March 31, 2026):Coverage unlock order:
#981+#880together- biggest unlock by far: each touches
13official SNB queries - current measured manifestations include:
interactive-complex-2blocked on direct Cypher multi-binding projectioninteractive-complex-8semantic corruption on direct Cypher row lowering- multiple GFQL paths still relying on local join workarounds instead of direct row materialization
- biggest unlock by far: each touches
#973- next official-query unlock for connected varlen patterns
- currently blocks the official
interactive-short-2/interactive-short-6family
#982- narrower than the row-binding work, but still needed to remove the current direct GFQL edge-projection workaround on
interactive-short-3
- narrower than the row-binding work, but still needed to remove the current direct GFQL edge-projection workaround on
Run in parallel as a correctness fix:
#994- narrower query impact than the three unlocks above, but it is a wrong-answer bug in a query shape that already executes
- current measured manifestation:
interactive-short-3returns the seed node as the peer alias on incoming undirectedKNOWSedges
So the benchmark recommendation is:
- main unlock track:
#981/#880->#973->#982 - correctness fast-path:
#994in parallel
New measured benchmark state from
pyg-benchas of March 31, 2026 after addinginteractive-short-7:- official SNB query floor measured:
9interactive-short-1/2/3/4/5/6/7interactive-complex-2/8
GFQL:ok=2,supported_with_workaround=7Cypher:ok=3,blocked=4,semantic_mismatch=2
Important change:
interactive-short-7is the first measured query that clearly opens a new post-row-shaping feature lane.Measured result:
- GFQL: workaround-backed
partial - direct Cypher:
primitive_gapvia new issue#996MATCH ... OPTIONAL MATCH ... RETURN CASE ...- current error:
Only node-only pre-binding MATCH clauses are supported before the final connected MATCH in this phase
Updated benchmark priority recommendation:
#981+#880#973#982#996as the first clearly new feature-lowering lane beyond row shaping#994in parallel as the narrower wrong-answer bug
Current next translation queue:
interactive-complex-13interactive-complex-4interactive-complex-7interactive-complex-11
- official SNB query floor measured:
Updated benchmark coverage status from
pyg-benchon March 31, 2026 using explicitpygraphistry mastersnapshot7095102df:- SNB Interactive official query texts inventoried:
29 - Measured today:
12 - Current measured floor:
interactive-short-1/2/3/4/5/6/7plusinteractive-complex-2/4/8/11/13 - Dataset-backed GFQL status on the measured floor:
ok=2,supported_with_workaround=10 - Dataset-backed Cypher status on the measured floor:
ok=3,blocked=7,semantic_mismatch=2
Newly added measured queries in this pass:
interactive-complex-4/ new-topics: GFQL workaround passes; direct Cypher blocked by#981interactive-complex-11/ job-referral: GFQL workaround passes; direct Cypher blocked by#981
Updated next translation queue from the analyzer:
interactive-complex-3interactive-complex-7interactive-complex-5interactive-complex-1interactive-complex-10
Priority order still holds:
#981/#880, then#973, then#982, with#996,#997, and#994as the next measured side lanes.- SNB Interactive official query texts inventoried:
Updated measured benchmark state from
pyg-benchon March 31, 2026 after addinginteractive-complex-3and reproducing the expanded floor ondgx-sparkCPU:- SNB Interactive official query texts inventoried:
29 - measured today:
14 - current measured floor:
interactive-short-1/2/3/4/5/6/7interactive-complex-2/3/4/7/8/11/13
- dataset-backed GFQL status on the measured floor:
ok=2,supported_with_workaround=12 - dataset-backed Cypher status on the measured floor:
ok=3,blocked=9,semantic_mismatch=2 - latest remote reproduction:
dgx-sparkCPU runsnb-interactive-358480dd77- status mix:
ok=5,partial=12,planner_gap=3,primitive_gap=4,result_mismatch=2,parser_gap=2
- status mix:
New measured query in this pass:
interactive-complex-3/ cross-country-messages- GFQL: workaround-backed
partial - direct Cypher: new issue
#999- multi-stage
MATCH ... WITH ... MATCH ... WITH ... MATCHread-query reentry - current error:
Cypher WITH after post-WITH MATCH is not yet supported in the current GFQL Cypher compiler
- multi-stage
- GFQL: workaround-backed
Updated benchmark unlock order from the current floor:
#981+#880#999#973#982#996#997#998#994in parallel as the narrower wrong-answer fix
Updated next translation queue from the analyzer:
interactive-complex-1interactive-complex-10interactive-complex-12interactive-complex-5interactive-complex-9interactive-complex-6
- SNB Interactive official query texts inventoried:
Benchmark update from
pyg-benchon 2026-03-31:- Measured SNB Interactive floor is now
15/29official queries. - Latest remote artifact on
dgx-sparkCPU:results/runs/dgx-spark-snb-interactive-master-7095102df-v11/ - Current remote status mix on the
15-query floor:ok=5,partial=13,planner_gap=3,primitive_gap=5,result_mismatch=2,parser_gap=2.
New measured blocker from
interactive-complex-9(Recent messages by friends or friends of friends):- direct Cypher is blocked by
WITH collect(...) -> UNWIND -> MATCHcontinuation after graph aliases are introduced - tracked separately in
#1000 - GFQL still covers the query via a 1..2-hop friend plus local message-join workaround under
#880
The current measured unlock order is now:
#981+#880#1000+#999#973#982#996/#997/#998#994
- Measured SNB Interactive floor is now
Another benchmark update from
pyg-benchon 2026-03-31:- Measured SNB Interactive floor is now
16/29official queries. - Latest remote artifact on
dgx-sparkCPU:results/runs/dgx-spark-snb-interactive-master-7095102df-v12/ - Current remote status mix on the
16-query floor:ok=5,partial=14,planner_gap=3,primitive_gap=5,result_mismatch=2,parser_gap=3.
New measured query added:
interactive-complex-6(Tag co-occurrence)- GFQL:
partialvia 1..2-hop friend plus local tag co-occurrence aggregation workaround under#880 - Cypher:
parser_gapunder#1000
- GFQL:
Analyzer state after adding
complex-6andcomplex-9:#1000now affects6official queries with2already measured- next lowest-novelty queue is now
interactive-complex-12,interactive-complex-5,interactive-complex-1,interactive-complex-10
- Measured SNB Interactive floor is now
Benchmark update from
pyg-benchon 2026-03-31:- Measured SNB Interactive floor is now
17/29official queries. - Latest remote artifact on
dgx-sparkCPU:results/runs/dgx-spark-snb-interactive-master-7095102df-v13/ - Current remote status mix on the
17-query floor:ok=5,partial=15,planner_gap=3,primitive_gap=5,result_mismatch=2,parser_gap=4.
New measured query added:
interactive-complex-12(Expert search)- GFQL:
partialvia direct-friend plus local tag-class-expanded reply aggregation workaround under#880 - Cypher:
parser_gapunder#983
- GFQL:
Important correction:
#984improved the earlierREPLY_OF*0..manifestation, but#983remains active for relationship-alternation zero-hop forms such as[:HAS_TYPE|IS_SUBCLASS_OF*0..].
Next queue from the analyzer is now:
interactive-complex-5interactive-complex-1interactive-complex-10interactive-complex-14
- Measured SNB Interactive floor is now
Benchmark coverage update from
pyg-benchon March 31, 2026:- official SNB Interactive query inventory:
29 - measured floor:
18 - backend status on the measured floor:
- GFQL:
ok=2,supported_with_workaround=16 - direct Cypher:
ok=3,blocked=13,semantic_mismatch=2
- GFQL:
- latest remote conformance artifact:
dgx-spark-snb-interactive-master-7095102df-v14- status mix:
ok=5,partial=16,planner_gap=3,primitive_gap=6,result_mismatch=2,parser_gap=4
- status mix:
New measured query this pass:
interactive-complex-5/new-groups- GFQL:
partialvia friend-membership + forum-post-count workaround - direct Cypher: blocked by existing
#999lane, no new issue family needed
- GFQL:
Current read-side next queue from the translation analyzer:
interactive-complex-1interactive-complex-10interactive-complex-14
- official SNB Interactive query inventory:
Benchmark coverage update from
pyg-benchon March 31, 2026:- official SNB Interactive query inventory:
29 - measured floor:
19 - backend status on the measured floor:
- GFQL:
ok=2,supported_with_workaround=17 - direct Cypher:
ok=3,blocked=14,semantic_mismatch=2
- GFQL:
- latest remote conformance artifact:
dgx-spark-snb-interactive-master-7095102df-v15- status mix:
ok=5,partial=17,planner_gap=3,primitive_gap=6,result_mismatch=2,parser_gap=5
- status mix:
New measured query this pass:
interactive-complex-1/named-shortest-friends- GFQL:
partialvia bounded-shortest-path + profile-history join workaround - direct Cypher: blocked by confirmed
#997shortestPath(...)parser/front-end lane
- GFQL:
Current read-side next queue from the translation analyzer:
interactive-complex-10interactive-complex-14
- official SNB Interactive query inventory:
Benchmark status update from
pyg-benchafter rerunning the measured#1000lane against isolated ambientgraphistry v0.53.11.Artifact:
results/runs/local-snb-interactive-v05311-rerun/
Outcome split:
interactive-complex-9/recent-network-messagesnow clears the oldWITH collect(distinct friend) -> UNWIND -> MATCHblocker and fails later at#981interactive-complex-6/tag-cooccurrencestill reproduces#1000, but on a narrower carried-scalar shape:WITH knownTagId, collect(distinct friend) AS friendsUNWIND friends AS fMATCH ...
Practical priority implication for benchmark coverage:
#981/#880stay the main unlocks#999remains the broaderMATCH/WITH/MATCHcontinuation family#1000is now a narrower residual benchmark blocker, not a blanket blocker for every measuredWITH -> UNWIND -> MATCHquery
Benchmark-driven priority update from
pyg-benchas of 2026-03-31.Measured state:
- DGX CPU
sf1core slice is still badly behind current baselines:- PyGraphistry GFQL:
13037.569 ms - PyGraphistry Cypher:
6081.106 ms - Kuzu:
38.894 ms - Neo4j:
342.673 ms
- PyGraphistry GFQL:
- DGX GPU now has a completed SNB-shaped subset, but it is still conformance-limited:
- single-query GFQL
seed-lookup:221.807 ms - core 3-query GFQL total:
612.941 ms - core 3-query Cypher total:
565.969 ms - still not apples-to-apples because
one-hop-expandmismatches andexpand-order-limitstill lands on#973
- single-query GFQL
What the language/runtime team should prioritize first:
#880+#981- not just for coverage; the current benchmark path is forced into multi-pass local row joins and that is killing both correctness and performance.
#994- wrong-answer bug on
interactive-short-3/one-hop-expand; until this is fixed, the core comparison slice is semantically dirty.
- wrong-answer bug on
#973- still blocks official
interactive-short-2/expand-order-limiton the direct Cypher path.
- still blocks official
#982- still forces the GFQL side into the edge-row workaround path for
interactive-short-3.
- still forces the GFQL side into the edge-row workaround path for
Important nuance: not all current slowness is a PyGraphistry issue.
pyg-benchis still doing too much CPU-side fixture prep before queries.- We fixed one harness bug where narrow GPU runs still instantiated unrelated probe specs.
- The remaining big bench-side task is reducing CPU-heavy fixture prep and keeping GPU slices narrow until semantics are clean.
So the short version is:
- for PyGraphistry, prioritize
#880/#981, then#994, then#973, then#982 - for
pyg-bench, we will keep reducing adapter/harness overhead so runtime numbers are less polluted by bench-side workarounds
- DGX CPU
Warmup-aware DGX
sf1core slice update frompyg-bench.Methodology:
- load/setup split from query timing
- untimed warmup rounds =
1 - PyGraphistry rows remain
official-query-grounded custom adapter - Kuzu and Neo4j rows remain
custom reduced baseline
Current steady-state query-only numbers on the reduced 3-intent slice:
- PyGraphistry CPU:
9350.831 ms- direct query:
2252.492 ms - result materialization:
0.193 ms - adapter overhead:
7098.146 ms
- direct query:
- PyGraphistry GPU:
530.804 ms- direct query:
178.301 ms - result materialization:
4.293 ms - adapter overhead:
348.209 ms
- direct query:
- Kuzu CPU:
32.996 ms - Neo4j CPU:
41.937 ms
Important read:
- GPU is materially better than PyGraphistry CPU on this slice.
- The current PyGraphistry timed path is still dominated by workaround cost, not direct engine execution.
- On the current 3-intent slice, the only direct GFQL timing contribution is still the reduced
expand-order-limitlane. - The core blockers are still product-side:
#880,#981,#982, plus correctness gap#994. The benchmark harness is cleaner now, so the remaining gap is harder to dismiss as measurement noise.
Latest artifacts in
pyg-bench:- CPU:
results/runs/dgx-spark-snb-interactive-core-sf1-timing-v5/ - GPU:
results/runs/dgx-spark-snb-interactive-core-sf1-gpu-timing-v9/ - Kuzu:
results/runs/dgx-spark-kuzu-snb-conformance-sf1-timing-v4/ - Neo4j:
results/runs/dgx-spark-neo4j-snb-conformance-sf1-timing-v4/
Update: v0.53.15 shipped (#994, #997, #998)
PR #1009 merged and tagged
v0.53.15.Resolved
- Cypher undirected MATCH can bind the seed node as the peer alias on incoming edges #994 (correctness): Undirected MATCH wrong-answer fix —
orient_edgesnow correctly doubles undirected edges in both directions for connected bindings. - Cypher parser rejects shortestPath((a)-[:REL*]-(b)) official shortest-path syntax #997 (parser):
shortestPath()/allShortestPaths()now parse and fail-fast with clear validation error. Execution tracked in feat(cypher): implement shortestPath execution with igraph/cugraph backends #1010. - Cypher parser rejects boolean pattern existence expressions in RETURN #998 (parser): Pattern existence expressions (
not((a)-[:R]-(b)),exists { ... }) now detected and fail-fast with clear validation error.
Test coverage added
- 14 new tests including undirected edge cases (incoming, outgoing, bidirectional, multi-edge, star, self-loop), shortestPath/allShortestPaths fail-fast, pattern existence fail-fast (RETURN + WHERE), and historic regression for parameterized LIMIT in reentry.
- GPU validated on dgx-spark (pandas + cudf).
Impact on measured floor
interactive-short-3(Cypher undirected MATCH can bind the seed node as the peer alias on incoming edges #994) should now return correct rows on direct Cypher pathinteractive-complex-13(Cypher parser rejects shortestPath((a)-[:REL*]-(b)) official shortest-path syntax #997) now fails with clear message instead of generic syntax errorinteractive-complex-7(Cypher parser rejects boolean pattern existence expressions in RETURN #998) now fails with clear message instead of generic syntax error
Remaining top blockers (unchanged)
- Direct Cypher row lowering rejects scalar multi-alias projections from a single MATCH #981/[FEA] GFQL bindings_table (row bindings) from chain using Yannakakis prune #880 — multi-binding row materialization (13 queries)
- Cypher multihop: expand direct variable-length support beyond endpoint-only patterns #973 — connected-pattern variable-length lowering (4 queries) — partially addressed by feat(cypher): support variable-length rels in connected patterns (#973) #995
- AST row select cannot reference edge alias properties after traversal #982 — native AST edge alias projection (5 queries)
- feat(cypher): implement shortestPath execution with igraph/cugraph backends #1010 — shortestPath execution (blocked by feat(cypher): support comma-separated MATCH patterns (cartesian product) #990 path variable support)
- Cypher undirected MATCH can bind the seed node as the peer alias on incoming edges #994 (correctness): Undirected MATCH wrong-answer fix —
Update: re-measurement needed after v0.53.13–v0.53.15
Since the last measured floor (March 31), several features shipped that likely change the benchmark status:
Version PR What shipped v0.53.13 #1008 Connected multi-alias row bindings, WITH...MATCHreentryv0.53.14 #1013 Multi-stage WITH...MATCH...WITH...MATCH...RETURNreentryv0.53.15 #1009 Undirected MATCH correctness fix (#994), shortestPath/pattern-existence fail-fast (#997/#998) Queries that may have graduated
The measured floor had
GFQL/Cypher: ok=2, blocked=4across IS1–IS6. With the above features:- IS3: Should now return correct rows (was wrong-answer due to Cypher undirected MATCH can bind the seed node as the peer alias on incoming edges #994, now fixed)
- IS1, IS4, IS5, IS6: Multi-alias scalar projection (Direct Cypher row lowering rejects scalar multi-alias projections from a single MATCH #981) and multi-stage reentry (Cypher/GFQL rejects multi-stage MATCH ... WITH ... MATCH ... WITH ... MATCH read queries #999) both shipped — these were the stated blockers for these queries. Need re-measurement to confirm.
- IS2: Connected varlen (feat(cypher): support variable-length rels in connected patterns (#973) #995) shipped — may now work depending on exact query shape
Queries still known-blocked
Query Blocker Issue Status IS7 OPTIONAL MATCH + CASE #996 Not started Q7 Pattern existence execution needs issue Not started Q13 shortestPath execution #1010 → #990 Blocked on path variables Recommended unlock order after re-measurement
- Cypher/GFQL cannot lower MATCH + OPTIONAL MATCH reply-author flag queries after a connected MATCH #996 (OPTIONAL MATCH) — unlocks IS7, first new query beyond IS1–IS6
- Cypher multihop: expand direct variable-length support beyond endpoint-only patterns #973 (remaining varlen gaps) — may unlock additional complex queries
- feat(cypher): implement shortestPath execution with igraph/cugraph backends #1010/feat(cypher): support comma-separated MATCH patterns (cartesian product) #990 (shortestPath/path variables) — unlocks Q13
Action needed
Benchmarking team: please re-run IS1–IS6 on
v0.53.15and update the measured floor. Several queries that wereblockedmay now beok. This will clarify where to focus next.56 remaining items
Coordinator dispatch update: filed #1466 for the final #1419 compat-executor reachability audit and deletion/shrink decision.
Updated priority:
- Main goal: D8 final GFQL compat-executor reachability audit and deletion/shrink decision #1466 to get [META] GFQL deletion wave: remove 2K+ LOC of obsolete compatibility paths #1419 to closeable state and pursue mass GFQL code deletion.
- Existing feat(gfql): add public declarative schema model #1457/GFQL type system follow-on A: public declarative schema model + stable exports #1337 typed schema PR can continue as review/merge, but the broader typed schema work (GFQL type system follow-on B: schema inference API + typed topology extraction #1338/GFQL type system follow-on C: public schema-Arrow APIs + plottable boundary enforcement #1339/GFQL remote: send bound typed GraphSchema with gfql_remote requests #1465/GFQL schema tutorial: infer, refine, bind, and validate Cypher #1464) is a PR stack/side track, not the main deletion pipeline.
- Do not assign new schema workers ahead of D8 final GFQL compat-executor reachability audit and deletion/shrink decision #1466 if the objective is mass GFQL deletion.
Queue-meta sync after #1466 / PR #1467 merged:
- D8 final GFQL compat-executor reachability audit and deletion/shrink decision #1466 is closed by GFQL compat-executor reachability shrink #1467
- Merge commit:
bccf9f4789625854446811db8c57b15c1796999e _execute_compiled_query_compat_non_union()is deleted.- Projection-level
WITH/RETURN DISTINCTnow plans natively through logicalDistinct. - DGX RAPIDS 25.02 and 26.02 full GFQL/cuDF suites passed:
2377 passed, 22 skipped, 15 xfailedon both versions. - PR CI was green, including both
tck-gfqlruns.
#1419 queue implication:
- D1-D8 deletion-wave children are now complete.
- Final D8 source delta was net
-24, confirming the remaining safe deletion surface was far below the original >=2K LOC target. - [META] GFQL deletion wave: remove 2K+ LOC of obsolete compatibility paths #1419 is revised/de-scoped and closed for this wave.
- Do not assign more workers to [META] GFQL deletion wave: remove 2K+ LOC of obsolete compatibility paths #1419/D8 final GFQL compat-executor reachability audit and deletion/shrink decision #1466; future deletion work needs a new concrete target.
Current queue remains:
- feat(gfql): add public declarative schema model #1457/GFQL type system follow-on A: public declarative schema model + stable exports #1337 review/merge only.
- Typed schema stack after that: GFQL type system follow-on B: schema inference API + typed topology extraction #1338 -> GFQL type system follow-on C: public schema-Arrow APIs + plottable boundary enforcement #1339 -> GFQL remote: send bound typed GraphSchema with gfql_remote requests #1465 -> GFQL schema tutorial: infer, refine, bind, and validate Cypher #1464.
- Support sidecars: Direct-Cypher residual: reconcile with2-1 setup/join contract tck-gfql#115 and
match5-8bookkeeping.
Coordinator catch-up after #1467:
- D8 final GFQL compat-executor reachability audit and deletion/shrink decision #1466 is no longer an active dispatch lane; it closed via GFQL compat-executor reachability shrink #1467 (
bccf9f4789625854446811db8c57b15c1796999e). - [META] GFQL deletion wave: remove 2K+ LOC of obsolete compatibility paths #1419 D1-D8 child work is complete.
- [META] GFQL deletion wave: remove 2K+ LOC of obsolete compatibility paths #1419 remains a coordinator/accounting closeout until the aggregate LOC receipt is posted or the >=2K deletion target is explicitly revised/de-scoped.
- Active pygraphistry PR in this GFQL planning surface: feat(gfql): add public declarative schema model #1457/GFQL type system follow-on A: public declarative schema model + stable exports #1337 in
/home/lmeyerov/Work/pygraphistry5; review/merge only, do not duplicate. - Next issue-backed pygraphistry implementation stack after feat(gfql): add public declarative schema model #1457: GFQL type system follow-on B: schema inference API + typed topology extraction #1338 -> GFQL type system follow-on C: public schema-Arrow APIs + plottable boundary enforcement #1339 -> GFQL remote: send bound typed GraphSchema with gfql_remote requests #1465 -> GFQL schema tutorial: infer, refine, bind, and validate Cypher #1464, with GFQL schema tutorial: infer, refine, bind, and validate Cypher #1464 deferred until inference lands.
- D8 final GFQL compat-executor reachability audit and deletion/shrink decision #1466 is no longer an active dispatch lane; it closed via GFQL compat-executor reachability shrink #1467 (
New issue-backed pygraphistry deletion lanes filed from current
origin/mastersurfaces:- GFQL deletion: retire residual unplanned Cypher chain-execution fallback #1468 — residual
logical_plan is Noneunplanned Cypher chain-execution fallback. - GFQL deletion: shrink row-pipeline string-expression fallback for map/list AST values #1469 — row-pipeline string-expression fallback for map/list AST values.
- GFQL deletion: carry spans on primitive Cypher literals and remove boolean text fallback #1470 — primitive Cypher literal span fallback /
_cypher_literal_fallback_text(). - GFQL deletion: remove Cypher reentry compiletime lowering-symbol shim #1471 — Cypher reentry compiletime lowering-symbol shim.
- GFQL deletion: remove obsolete M1 differential scaffold legacy-baseline tests #1472 — obsolete M1 differential scaffold legacy-baseline tests.
Dispatch note: #1457/#1337 remains active separately in
/home/lmeyerov/Work/pygraphistry5. These five are deletion-focused pygraphistry worker issues and should be assigned from fresh/recycled checkouts on currentorigin/master.- GFQL deletion: retire residual unplanned Cypher chain-execution fallback #1468 — residual
Meta sync for #1471:
- GFQL deletion: remove Cypher reentry compiletime lowering-symbol shim #1471 is closed by merged PR Remove Cypher reentry compiletime lowering shim #1474.
- Merge commit:
423a586e04e03e3bef4e528838e0816d0a8318af. - Receipt: reentry compiletime broad lowering-symbol shim removed; explicit imports added; split/entrypoint guards added; local, DGX RAPIDS 25.02/26.02, review-skill, and CI validation all green.
- Dispatch state: no further GFQL deletion: remove Cypher reentry compiletime lowering-symbol shim #1471 worker needed.
Fresh #1353 sync:
- pygraphistry
origin/master:592e34a66e40b79f79029d1620911f63158c99ed - tck-gfql
main:0fbaa42eb36c047370b6d8dd0337c8a5996c6f32 python -m tests.cypher_tck.report: tracked non-validation debt 1;success_matches_expected1 (match5-8);success_wrong_rows0;unexpected_success_expected_error0- focused report/contract tests:
13 passed in 2.55s - broader direct-Cypher xfail contract found
with5-2now returns expected rows while contract expectsGFQLValidationError
No pygraphistry wrong-row runtime bug found. #1353 remains open pending graphistry/tck-gfql#129, the narrow tck-gfql promotion/accounting child for
match5-8+with5-2.- pygraphistry
Meta sync for #1073:
- chore(tests): DRY remaining cudf factory twins in test_lowering.py (~97 LOC) #1073 is closed by merged PR DRY cuDF/pandas lowering test factory twins #1494: DRY cuDF/pandas lowering test factory twins #1494
- Merge commit: f3e0e2b
- Final rebased PR head before squash: 251ee02
- Scope: mechanical test-only DRY cleanup in graphistry/tests/compute/gfql/cypher/test_lowering.py; no runtime code changed.
- Result: eight remaining pandas/cuDF fixture factory twin pairs now share _mk_X_data() helpers while preserving existing _mk_X_graph() / _mk_X_graph_cudf() call sites and semantics.
- LOC receipt: 57 insertions, 137 deletions, net -80 overall.
- CHANGELOG.md conflict after master moved was resolved and the branch was rebased on current master before merge.
Validation receipts:
- focused non-cuDF touched factories: 16 passed
- broad non-cuDF lowering: 943 passed, 12 skipped
- ruff / typecheck / compileall / diff-check passed
- DGX RAPIDS 25.02 touched cuDF subset: 24 passed
- DGX RAPIDS 26.02 touched cuDF subset: 24 passed
- review protocol converged with no findings
- pre-rebase PR CI green, including tck-gfql: 4007 passed, 717 xfailed
Queue implication: no further #1073 worker needed. This was cleanup/LOC reduction only and does not change #1353 or benchmark residual accounting.
tck-gfql#129 follow-up is open and green:
- PR: Promote direct-Cypher bookkeeping for match5-8 and with5-2 tck-gfql#134
- Branch:
fix/direct-cypher-bookkeeping-129 - Commit:
8f8aaca Promote direct-Cypher bookkeeping for issue 129 - GitHub CI:
testspassed in 4m50s: https://github.com/graphistry/tck-gfql/actions/runs/25998264571/job/76416567973
Scope/result:
- Promoted
match5-8andwith5-2from direct-Cyphersuccess_matches_expectednon-validation debt into row support bookkeeping. - Moved both keys into promoted-from-xfail history.
- Removed
with5-2from the row-pipeline tranche-2 xfail lane. - No pygraphistry runtime changes were needed.
- No pygraphistry#1490 blocker was found.
PR-head receipts:
- promoted-only direct-Cypher:
928 (rows 789, errors 139) - direct-Cypher total:
2888 / 3627 - status accounting:
supported 2905,xfail 722 - tracked non-validation debt:
0 - non-validation sweep:
shown: 0 / 0 - local full CI:
4011 passed, 722 xfailed
Because the tck-gfql change is not merged yet, leaving this metaissue open for now. After PR #134 lands, pygraphistry#1353 should be closable from the direct-Cypher non-validation/wrong-row tracking perspective.
tck-gfql#129 has landed via graphistry/tck-gfql#134.
- Merge commit:
b78ffd4aa90dced98796bf231717683c27fae749 - Merged at:
2026-05-17T18:49:05Z - GitHub CI before merge:
testspassed in 4m50s: https://github.com/graphistry/tck-gfql/actions/runs/25998264571/job/76416567973
Final result:
- Promoted
match5-8andwith5-2from direct-Cyphersuccess_matches_expectednon-validation debt into row support bookkeeping. - Direct-Cypher non-validation debt is now zero: report tracked debt
0; sweepshown: 0 / 0. - No pygraphistry runtime change was needed.
- No pygraphistry#1490 blocker was found.
- pygraphistry#1353 was closed from the direct-Cypher non-validation/wrong-row tracking perspective after the tck-gfql PR landed.
- Merge commit:
#1490 is complete.
- pygraphistry fix: Fix Cypher node identity column handling #1504, merge commit
5ddf66f9a947a184009bad1c0c23b7744ec66dca. - TCK sidecar: Update direct Cypher match7-24 xfail contract tck-gfql#135, merge commit
fccb5a46627f888802423a21600e434ecba8f4d8. - Result: direct-Cypher no longer conflates a user
idproperty with internal graph node identity for the fixed lowering paths.
Any remaining metaissue planning should refresh from current
master/TCKmain; the old pre-#1490 drift snapshot is stale.- pygraphistry fix: Fix Cypher node identity column handling #1504, merge commit
Closeout update for IC4 direct-Cypher residual: pygraphistry#1502 merged at 3c5af8e and closed #1496.
Receipts: local pandas/regression subset, ruff/typecheck/diff-check, DGX RAPIDS 25.02 + 26.02 targeted cuDF regression, and full PR CI are green. tck-gfql initially failed due stale match7-24 xfail contract; graphistry/tck-gfql#135 landed on main and duplicate graphistry/tck-gfql#136 was closed as superseded, after which tck-gfql CI passed.
Remaining benchmark gate: graphistry/pyg-bench#4 needs a fresh IC4/new-topics rerun on latest pygraphistry master to confirm direct-Cypher ok / expected tag rows / cleared #1496 issue refs.
Coverage/deletion support update:
- GFQL cleanup: add CPU/GPU coverage audit for dead-code candidates #1517 completed via merged PR Add coverage audit profiles with GFQL lock-ins #1518 at
961be820b41ef6585a9d3265ba57f82ee5a6f9b0. - The new
bin/coverage_audit.py --profile gfqlrunner provides CPU CI artifacts and DGX RAPIDS 25.02 / 26.02 coverage lock-in support for GFQL cleanup triage. - This does not reopen the old [META] GFQL deletion wave: remove 2K+ LOC of obsolete compatibility paths #1419 LOC target. It provides evidence for narrower follow-ups.
Current follow-up split:
- GFQL deletion tranche: coverage-backed zero-hit helper removals #1522: coverage-backed zero-hit helper deletion tranche.
- Increase GFQL audited-target coverage from coverage audit reports #1534: GFQL audited-target coverage uplift for live low-hit paths.
- Add changed-line coverage hygiene gate for Python PRs #1533: repo-wide changed-line coverage hygiene.
Baseline receipts from #1518:
- CPU expanded GFQL/core audit:
11984/15136 = 79.18%. - RAPIDS 26.02 cuDF wrapper profile:
6209/15136 = 41.02%. - RAPIDS 25.02 cuDF wrapper profile:
6218/15136 = 41.08%.
- GFQL cleanup: add CPU/GPU coverage audit for dead-code candidates #1517 completed via merged PR Add coverage audit profiles with GFQL lock-ins #1518 at
Meta sync for #1533 / PR #1535:
- Add changed-line coverage hygiene gate for Python PRs #1533 is closed by merged PR Add changed-line coverage hygiene gate #1535.
- Merge commit:
4cfda5d968546595937e29c44116e9dbbcd0f024. - Final PR head before merge:
8121232c16dcdd36b8b25e8bacfb598b56e1439b. - Result: repo-wide Python changed-line coverage hygiene has landed on
master. - Scope remains CI hygiene, not benchmark residual evidence and not GFQL deletion proof.
- Final CI shape: no 5->10 minute timeout expansion;
test-minimal-pythonstays at 5 minutes and uninstrumented,test-core-python (3.14)emits the general coverage artifact, GFQL py3.12 emits the GFQL artifact, andchanged-line-coverageis a 5-minute combiner/gate.
Queue implication: #1533 should move from follow-up split/open work to completed infrastructure. Continue to treat #1522 as the deletion lane and #1534 as the GFQL audited-target coverage uplift lane; #1533 adds changed-line PR hygiene only.
Summary
Meta-tracker for benchmark-impacting GFQL/Cypher compiler/planner gaps.
Closed Residual / Benchmark Wave
.to_pandas().to_dict()test-hardening via Harden cuDF to_pandas to_dict lowering tests #1444.Direct-Cypher Residual Cleanup (#1353)
Fresh #1353 snapshot after graphistry/tck-gfql#125, against pygraphistry
592e34a6+ tck-gfql0fbaa42e:success_matches_expected: 1 (match5-8bookkeeping)success_wrong_rows: 0unexpected_success_expected_error: 0with5-2now returns expected rows while its direct-Cypher xfail contract still expectsGFQLValidationErrorCompleted:
Remaining support only:
match5-8+with5-2GFQL Deletion Wave (#1419)
OPTIONAL MATCHnative route via Route simple OPTIONAL MATCH through native physical dispatch #1463Post-#1419 concrete deletion follow-up:
Final #1419 receipt:
_execute_compiled_query_compat_non_union()after D1-D7 eliminated the known generic compat-executor blockers.WITH/RETURN DISTINCTdefer now plans natively through logicalDistinct.-24; full PR net-24.Dispatch Guidance
Priority pygraphistry lanes
/home/lmeyerov/Work/pygraphistry5; review/merge only, do not duplicate.Typed schema stack
Support sidecars
match5-8/with5-2promotion bookkeeping only.Do not assign