pygraphistry
pygraphistry copied to clipboard
GFQL mark(): name-first defaults (Phase 1)
GFQL mark(): Name-First Defaults (Phase 1)
This ticket tracks the first wave of the mark() redesign—the portions we can ship alongside the matcher name conflict fix (#818).
Goals (Wave 1)
- Adopt a
name_conflictspolicy (any,error) in GFQL execution so duplicate matcher names either OR together (default) or raise a descriptive schema error before execution. - Teach
mark()to return named matchers automatically when present (mode='auto'), and to fall back to existingmark_nodes/mark_edgeswhen no names/projecting is specified. - Keep
project=filtering the marked columns (nodes/edges) after the mode runs. - Expose basic helper plumbing so the policy travels through
gfql(),chain(),gfql_remote(), and DAG (let) execution. - Document the new defaults and update CHANGELOG/tests accordingly.
Out of Scope (Wave 2 / follow-up)
name_conflicts='suffix'or other advanced policies (requires deterministic suffixing and additional bookkeeping).mode='first'/'last'inmark()(needs explicit wavefront tracking in hop/chain).- Static helpers like
validate_mark_names()/list_available_marks()for complex DAGs (may require deeper AST analysis). - Any additional UX polish discovered during implementation (file new tickets as needed).
Wave 2 is tracked separately in #823 so we can land the core behavior change promptly and iterate on richer features afterward.
References
- Bug fix groundwork: #817 / #818
- Phase 2 follow-up: #823