Repository navigation
GFQL deletion: retire residual unplanned Cypher chain-execution fallback #1468
Copy link
Copy link
Closed
Labels
Description
Summary
Follow-up deletion lane after #1419/#1466/#1467. The generic compat executor wrapper is gone, but graphistry/compute/gfql_unified.py still admits compiled Cypher queries with logical_plan is None by routing them directly through _execute_compiled_query_chain_non_union().
This issue asks for a fresh reachability audit of that residual unplanned-chain path and a deletion/shrink PR where safe.
Current evidence
On current origin/master:
graphistry/compute/gfql_unified.py:_execute_compiled_query_non_union()checkscompiled_query.logical_plan; whenNone, it still seeds a dispatch graph and runs_execute_compiled_query_chain_non_union().- GFQL compat-executor reachability shrink #1467 intentionally removed
_execute_compiled_query_compat_non_union()but left this narrower direct fallback for future logical-planner feature gaps.
Goal
Reduce or eliminate the residual runtime path for logical_plan is None by either:
- planning remaining supported shapes through logical/physical routes, or
- rejecting unsupported feature-gap shapes at compile/preflight with clear
GFQLValidationErrors instead of runtime fallback.
Scope
- Enumerate current
logical_plan is Noneproducers with tests/repros. - Classify each as supported-but-unplanned vs unsupported feature gap.
- Add native logical planning for any small supported shape that is safe to route.
- Delete/shrink the runtime fallback in
gfql_unified.pyif no supported path needs it. - Update runtime cutover tests so they assert the new boundary.
Out of scope
- Reopening [META] GFQL deletion wave: remove 2K+ LOC of obsolete compatibility paths #1419 or chasing its old >=2K LOC target.
- Public deprecated validation API removal (GFQL deprecated validation API removal policy and release gate #1440 excluded that).
- Typed schema stack (GFQL type system follow-on A: public declarative schema model + stable exports #1337/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).
Acceptance
- Fresh audit lists all remaining
logical_plan is Noneproducers. - Any supported producer either gets a logical route or is documented as intentionally deferred.
- If the fallback remains, it is narrowed with explicit tests and rationale.
- If removed, all string-Cypher execution tests pass without it.
- CI,
tck-gfql, and relevant GFQL/cuDF validation pass.
Related
Reactions are currently unavailable
Activity
lmeyerov commentedon May 17, 2026
Coordinator note from refreshed pyg-bench
origin/mainresearch/readiness docs (#26): this lane should treat the remaining SNB direct-Cypher blocker map as audit input before deleting the residuallogical_plan is Nonechain path.Relevant official-query blockers recorded in
docs/snb-interactive-readiness.mdinclude #973, #981, #982, #983, #994, #996, #997, #998, #999, #1000, and #1031. Most are feature gaps, not deletion targets. Before removing the residual unplanned-chain route, classify whether any of those future direct-Cypher lanes still require the fallback for currently-supported behavior versus should fail fast with a structured compiler/preflight error.Priority implication: keep #1468 last among the deletion lanes, and let its first deliverable be an audit/classification table. Do not make it a blind deletion PR.
lmeyerov commentedon May 17, 2026
Closeout receipt for #1468:
769e3f48ec5c5a86e5e8f96415f3e6bbe7a4b2266fd66a4b0b0825133e5cc35b613d41ca86bc315dWhat changed:
compiled_query.logical_plan is NoneCypher producers.multiple_match_stages: 37non_top_level_optional_match: 10anonymous_match: 1scalar_projection_alias_match: 1None, unknown, and unapproved defer classifications.Validation:
21 passed985 passed, 12 skipped, 112 deselected2383 passed, 22 skipped, 15 xfailed2383 passed, 22 skipped, 15 xfailedtck-gfqland Read the DocsNote: this did not delete the residual chain executor outright. The audit showed supported shapes still rely on it, so the merged change is a fail-closed shrink/guardrail: arbitrary new
logical_plan is Nonepaths can no longer silently execute through chain fallback without an explicit reviewed defer code.lmeyerov commentedon May 17, 2026
Update from #1480 / PR #1481: anonymous_match residual bucket is closed.
Merged commit: 67833b1
Validation: focused local GFQL tests, ruff, typecheck, PR CI, and DGX RAPIDS/cuDF 25.02 + 26.02 GFQL checks were green.
Remaining residual lanes remain the non-anonymous buckets already tracked separately, including multiple MATCH, non-top-level OPTIONAL MATCH, and scalar/projection alias fallback.
lmeyerov commentedon May 17, 2026
#1479 / PR #1482 follow-up receipt for the residual fallback audit:
0efa2d0a1754e9b71ff17a7ea09ff9d7427fa6fcImpact on #1468 residual buckets:
scalar_projection_alias_matchbucket is now retired.MATCH (a) RETURN a.id IS NOT NULL AS a, a IS NOT NULL AS bcompiles with a logical plan and dispatches through the physical planner instead of the approved unplanned-chain fallback._APPROVED_UNPLANNED_CHAIN_FALLBACK_CODESno longer includesscalar_projection_alias_match.PathTypealiases from MATCH entity validation without weakening node/edge checks.Validation receipt:
46 passed, 1 deselected54 passed, 1013 deselectedruff,typecheck, andgit diff --check: green4 passedon each imagetck-gfqland ReadTheDocsRemaining residual work should exclude both recently retired native-planning buckets:
anonymous_matchwas retired by GFQL deletion: native-plan anonymous MATCH scalar/count fallback bucket #1480 / PR fix(gfql): plan anonymous MATCH count projection #1481.scalar_projection_alias_matchis retired by GFQL deletion: native-plan scalar projection alias MATCH fallback bucket #1479 / PR Fix scalar projection alias MATCH planning #1482.lmeyerov commentedon May 17, 2026
Update from #1489 / PR #1493:
PathTypealiases inBoundQueryPart.inputsas path-carrying residuals.multiple_match_stages:42multiple_match_stages:1581MATCH path = shortestPath((a)-[*]-(b)) MATCH (b)-->(c) RETURN c, i.e. path alias already carried into a later MATCH.multiple_match_stages=35bucket down to the single path-alias carry shape in this branch's broader corpus probe.Validation:
2399 passed, 22 skipped, 15 xfailed.2399 passed, 22 skipped, 15 xfailed.tck-gfql.PR: #1493
lmeyerov commentedon May 17, 2026
Merged follow-up for #1489 / PR #1493:
d0d66d517c45e6df87d1724f0720d2e964f21952Residual fallback impact:
logical_plan is Nonefallback.multiple_match_stagesfrom42 -> 1and literal occurrences from58 -> 1.MATCH path = shortestPath((a)-[*]-(b)) MATCH (b)-->(c) RETURN c.Validation was green before merge:
2399 passed, 22 skipped, 15 xfailed.tck-gfql.lmeyerov commentedon May 17, 2026
Merged follow-up for #1478 / PR #1487:
c7d73c762ba9a26c1266ecb93c100e0fa242b785tck-gfql/mainvia Align direct-Cypher contract for pygraphistry #1489 tck-gfql#133; Promote with5-2 direct cypher xfail tck-gfql#128 rebased empty/closed.Residual fallback impact:
non_top_level_optional_matchis retired from the approved residual fallback set.MATCH ... OPTIONAL MATCH ...aggregate/scalar shapes now route through logical/physical planning.Validation was green before merge:
ruff/typecheck, diff check.2 passedeach.tck-gfqland ReadTheDocs.lmeyerov commentedon May 17, 2026
#1486 prep/audit follow-up receipt
PR: #1501
Commit: 4ceb9fe
CI: green, including ReadTheDocs and tck-gfql.
This is audit/checklist only, not the final fallback deletion. Current inventory on origin/master @ c7d73c7 found only multiple_match_stages=2, both from the #1495 path-alias carry guard query variants, and found no optional_match_reentry corpus hits. logical_plan_none_without_code=0.
Meta implication: #1468's guarded fallback shrink remains intact. The final deletion lane is still #1486, blocked on #1495 plus coordinator approval. #1469 is closed and not a current unplanned-chain deletion blocker.
lmeyerov commentedon May 18, 2026
Final #1486 deletion receipt:
65016323c0925e46d4a327910865ee2bb3af3697defer_codes=none; only UNIONlogical_plan=Nonebookkeeping remains and does not reach non-union chain execution.logical_plan_defer_code/logical_plan_defer_reasoncontext keys, with tests avoiding prose-string matching.This completes the final deletion-train target tracked by #1486.