fix(gfql): the shadow-restore column exists only inside a Cypher pipeline, never on op-list results - #2067
Closed
lmeyerov wants to merge 1 commit into
Closed
Conversation
Contributor
Author
|
Local receipt at fc6caa6 (TEST_CUDF=1, cuDF 25.10): test_chain / test_hop / test_gfql / tests/compute/gfql / collision matrix / test_compute_chain / test_chain_let: 12784 passed, 3 failed. Two were the polars-lane completeness pins for the new test file (now registered in bin/test-polars.sh); the third, |
…line, never on op-list results The polars chain kept a shadowed user column under __gfql_shadow_restore__<alias>__ so the Cypher row pipeline could read the value back; that internal column also reached op-list results. Now a compiled Cypher execution marks itself (cypher_pipeline() context) and only then does the chain keep the column; on gfql([...]) / chain([...]) the marker shadows the column outright, as on pandas and cuDF. Nothing is stripped from results: user-defined columns (the name= marker, requested hop labels, a caller's own __gfql_-prefixed column) and pipelines composed from successive gfql calls are untouched. Pins: no internal column on pandas/cuDF/polars for the shadow shape with the marker and payload intact; Cypher still reads the shadowed user value on both engines; user hop labels and a user-prefixed column survive; the deprecated chain() surface is clean. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QztW7jYsDd66e8rb8pJNQA
lmeyerov
force-pushed
the
fix/gfql-op-list-results-hide-internal-columns
branch
from
September 6, 2026 15:22
fc6caa6 to
0b610b0
Compare
Contributor
Author
|
Folded into #2056 (owner asked for a shallower stack); the commits, receipts and CHANGELOG entries live there unchanged. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #2055's unified alias-shadowing contract. Base master, independent of the stack. Replaces the first cut of this PR (a blanket strip of
__gfql_*columns at the op-list surface), which broke pipelines composed from successivegfql([...])calls: the tck-gfql phase-1 executor binds its own__gfql_-prefixed working columns and feeds one result into the next call, and any user who composes steps the same way would have lost them.Rule. Internal columns are not created on the user surface in the first place.
cypher_pipeline()(a context flag ingfql/identifiers.py) marks a compiled Cypher execution; only then does the polars chain keep a shadowed user column under__gfql_shadow_restore__<alias>__for the row pipeline to read back. Ongfql([...])andchain([...])the marker shadows the column outright, exactly as pandas and cuDF do. Nothing is stripped from any result.Pins (
tests/compute/test_gfql_op_list_hides_internal_columns.py): no internal column on pandas, cuDF and polars for the shadow shape, marker and payload intact (fails on the previous tree for polars); Cyphertype.type/type.wstill read the user values on both engines; user-requested hop labels survive; a caller's own__gfql_mine__column survives; the deprecatedchain()surface is clean.Receipts: pins + hypergraph + scoping + collision matrix (cuDF on) 230 pass / 9 xfail; all 60 TCK precedence scenarios that failed on the first cut pass; guards + mypy green; broad suites and full local tck-gfql below.
🤖 Generated with Claude Code
https://claude.ai/code/session_01QztW7jYsDd66e8rb8pJNQA