Skip to content

Remove pre-strict Cypher binder guards - #1432

Merged
lmeyerov merged 1 commit into
masterfrom
issue-1420-deletion-d2-binder-guards
May 15, 2026
Merged

lmeyerov merged 1 commit into
masterfrom
issue-1420-deletion-d2-binder-guards

Conversation

@lmeyerov

@lmeyerov lmeyerov commented May 14, 2026 •

Copy link
Copy Markdown
Contributor

Closes #1420.

Summary

  • Retires the pre-strict Cypher binder compatibility branch: FrontendBinder.bind(strict_name_resolution=False) remains source-compatible but no longer restores loose binder semantics.
  • Makes compile prepass / graph-constructor binding explicitly strict and removes binder dependency on the rollout resolver as a production strict/loose gate.
  • Updates rollout docs/tests and strict-mode docs to reflect [DEL] D2 remove pre-strict binder compatibility guards after #1357 #1420 strict-canonical behavior, including diagnostics that point users at query/schema fixes instead of the retired loose-mode escape hatch.
  • Adds adversarial tests proving the legacy false flag no longer admits unresolved collect(...), single-alias list literal, or missing-schema inputs, while preserving source-order WITH -> UNWIND -> MATCH binding.
  • Keeps WITH ... WHERE validation aligned with Cypher semantics by checking both projected aliases and source-scope aliases; this covers the CI/TCK WITH a.name2 AS name WHERE name = ... OR a.name2 = ... shape.

Validation

  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_binder.py::test_binder_strict_schema_rejects_missing_match_label_with_context graphistry/tests/compute/gfql/cypher/test_binder.py::test_binder_strict_schema_rejects_missing_property_in_return_with_context graphistry/tests/compute/gfql/cypher/test_binder.py::test_binder_strict_schema_rejects_missing_relationship_property_in_match_pattern (3 passed)
  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_binder.py graphistry/tests/compute/gfql/cypher/test_binder_strict_compile_baseline.py graphistry/tests/compute/gfql/cypher/test_validator_runtime_strict_parity.py graphistry/tests/compute/gfql/cypher/test_m1_differential_scaffold.py graphistry/tests/compute/gfql/test_rollout_binder_integration.py graphistry/tests/compute/gfql/test_rollout.py (151 passed, 29 warnings)
  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_lowering.py -k "(strict or binder or unresolved or collect or unwind) and not cudf" (41 passed, 958 deselected, 6 warnings)
  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_binder.py::test_binder_with_where_validates_against_projected_alias_scope graphistry/tests/compute/gfql/cypher/test_binder.py::test_binder_with_where_validates_against_source_alias_scope graphistry/tests/compute/gfql/cypher/test_binder.py::test_binder_with_where_rejects_unknown_source_or_projected_alias graphistry/tests/compute/gfql/cypher/test_lowering.py::test_string_cypher_supports_with_where_using_projected_source_properties (5 passed, 4 warnings)
  • python3 -m pytest -q graphistry/tests/compute/gfql/test_logical_planner.py graphistry/tests/compute/gfql/cypher/test_binder.py graphistry/tests/compute/gfql/cypher/test_binder_strict_compile_baseline.py graphistry/tests/compute/gfql/cypher/test_validator_runtime_strict_parity.py graphistry/tests/compute/gfql/test_rollout_binder_integration.py (129 passed, 28 warnings)
  • python3 -m pytest -q graphistry/tests/compute/gfql/cypher/test_lowering.py graphistry/tests/compute/gfql/cypher/test_parser.py graphistry/tests/compute/gfql/test_row_pipeline_ops.py graphistry/tests/compute/gfql/test_schema_changers.py graphistry/tests/compute/gfql/test_let_schema_changers.py graphistry/tests/compute/gfql/test_rollout.py graphistry/tests/compute/gfql/test_rollout_binder_integration.py graphistry/tests/compute/test_hop.py graphistry/tests/compute/test_chain.py graphistry/tests/compute/test_chain_let.py graphistry/tests/compute/test_chain_concat.py graphistry/tests/compute/test_dataframe_primitives.py tests/gfql/ref/ -k "not cudf" (1897 passed, 1 unrelated local UMAP/cuDF no-GPU failure)
  • python3 -m py_compile graphistry/compute/gfql/frontends/cypher/binder.py graphistry/compute/gfql/cypher/lowering.py graphistry/compute/gfql/rollout.py graphistry/tests/compute/gfql/cypher/test_binder.py graphistry/tests/compute/gfql/cypher/test_m1_differential_scaffold.py graphistry/tests/compute/gfql/test_rollout_binder_integration.py graphistry/tests/compute/gfql/cypher/test_binder_cross_kind_rebind.py
  • python3 -m py_compile graphistry/compute/gfql/frontends/cypher/binder.py graphistry/tests/compute/gfql/cypher/test_binder.py
  • ./bin/ruff.sh graphistry/compute/gfql/frontends/cypher/binder.py graphistry/compute/gfql/cypher/lowering.py graphistry/compute/gfql/rollout.py graphistry/tests/compute/gfql/cypher/test_binder.py graphistry/tests/compute/gfql/cypher/test_m1_differential_scaffold.py graphistry/tests/compute/gfql/test_rollout_binder_integration.py graphistry/tests/compute/gfql/cypher/test_binder_cross_kind_rebind.py
  • ./bin/ruff.sh graphistry/compute/gfql/frontends/cypher/binder.py graphistry/tests/compute/gfql/cypher/test_binder.py
  • DGX ssh dgx-spark, RAPIDS 25.02 harness, focused binder + rollout + selected cuDF lowering nodes: 92 passed, 17 warnings
  • DGX ssh dgx-spark, RAPIDS 26.02 harness, same focused selection: 92 passed, 16 warnings
  • DGX ssh dgx-spark, direct 26.02 Docker rerun of the four cuDF nodes that had OOM'd under shared GPU pressure: 4 passed, 4 warnings
  • DGX ssh dgx-spark, commit 23a7a559, RAPIDS 25.02 harness, focused binder + rollout + logical-planner repro + WITH WHERE source/projection + selected cuDF lowering nodes: 98 passed, 17 warnings
  • DGX ssh dgx-spark, commit 23a7a559, RAPIDS 26.02 harness, same focused selection: 98 passed, 16 warnings

Note: a direct 26.02 no-harness run over the 92-test focused selection reached 88 passed before four cuDF tests hit std::bad_alloc on tiny allocations. nvidia-smi showed a concurrent VLLM::EngineCore using 81870MiB; the same four nodes passed when rerun directly after the failed container exited.

@lmeyerov
lmeyerov force-pushed the issue-1420-deletion-d2-binder-guards branch 3 times, most recently from 6eb2370 to 23a7a55 Compare May 14, 2026 22:23
@lmeyerov
lmeyerov marked this pull request as ready for review May 14, 2026 22:32
@lmeyerov
lmeyerov force-pushed the issue-1420-deletion-d2-binder-guards branch 3 times, most recently from 6f0f128 to 2d4cdf3 Compare May 14, 2026 23:47
@lmeyerov
lmeyerov force-pushed the issue-1420-deletion-d2-binder-guards branch from 2d4cdf3 to bc50381 Compare May 15, 2026 00:00
@lmeyerov
lmeyerov merged commit a8d3bbc into master May 15, 2026
137 checks passed
@lmeyerov
lmeyerov deleted the issue-1420-deletion-d2-binder-guards branch May 15, 2026 00:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DEL] D2 remove pre-strict binder compatibility guards after #1357

1 participant