pygraphistry icon indicating copy to clipboard operation
pygraphistry copied to clipboard

GFQL mark(): name-first defaults (Phase 1)

Open lmeyerov opened this issue 2 months ago • 0 comments

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_conflicts policy (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 existing mark_nodes/mark_edges when 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' in mark() (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

lmeyerov avatar Oct 20 '25 04:10 lmeyerov