Commit Graph

1 Commits

Author SHA1 Message Date
4379da4986 Edge resolution: on a self-referential base edge, cardinality decides direction
entity.parent_id -> entity matches every type pair in both directions, and the
discovery loop kept forward whenever reverse also matched — so an array
include compiled as `parent.parent_id = child.id` and every nested list read
back empty. Now cardinality decides: an array lists the children (reverse), a
scalar reaches the parent (forward) — a line's UI can include its invoice. A
single child through this edge is declared as a one-element array, never a
scalar. fixtures/composition.json pins both joins; 1288 library tests pass.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AvkGU4kQ4wsqxHFpXtZKZM
2026-09-02 15:18:40 -04:00