Summary
This version adds Sequence as the ordered relation layer on top of Expression, which is what makes route matching work for keyed relations like page -> tags.
With Sequence, those relations can now be represented and matched as ordered paths of ids or expressions instead of as a flat one-shot lookup. That matters because routes are not just "does this id match?” anymore. They are "does this relation appear in this order, with these constraints, and possibly with gaps or intermediate steps?”
So the model is:
Idis one concrete node in the relationSelectoris a pattern over one nodeExpressionis a logical combination of selectorsSequenceis an ordered combination of expressionsFiltercompiles that relation matching into something fast
In practice, that means if the scheduler or routing layer sees a relation like page -> tags, it can now match a route against that relation shape. A route can say "I care about pages that have tags”, or "I care about tags that refer back to pages”, and the ordered sequence gives the compiler enough structure to evaluate that efficiently.
That is the bigger idea: routes are no longer just attached to isolated ids, they can be attached to relation paths. Sequence is the piece that makes those paths first-class.
Changelog
Breaking changes
- 0ac1ccd zrx-id – move
filterintoexpression - 9c8096c zrx-graph – rename
Topology::is_reachableintoTopology::has_path - c3fac2e zrx-graph, zrx-scheduler – make transitive closure computation explicit
Features
- 4291252 zrx-id – add
SequenceandFilterfor orderedExpressionmatching - bde8532 zrx-id – add non-consuming
Iterimpl forMatches - c4069b0 zrx-id – add
TryToSelectorimpl for&Idand&Selector - bb610f8 zrx-id – add
TryToIdimpl for&Id - 6c746dc zrx-id – add
Valueimpl forSelector - 9a6dcae zrx-id – add
Valueimpl forExpression