Finding the first item that matches took Count, Repeat, Item at and a
Branch, and the loop could not stop once it had found something. A graph
has no lambdas, so the predicate is an input that is read every round.
- For each runs body once per element, with item and index set, and
goes on at done.
- Its break input is read anew before every round, after item is set.
Once it is true the loop ends there and that round's body does not
run.
- done sees the matching item and index with stopped true. Without a
match it sees no item, index -1 and stopped false, the OrDefault.
- RepeatResult has optional items, stopWhen, stopped and exhausted.
GraphInterpreter.loop reads them, Repeat runs as before.
Tests:
- ./check.sh: 180 files, 2623 tests, CHECK EXIT 0
- e2e GM_STEPS=1-6: ALL PASSED, 269 checks
- 5 interpreter tests in graph.test.ts, 2 catalog cases
- e2e 6z-iv: the palette creates the node, and a search for
Name == "Gold" in Axe, Gold, Bow, Gold logs "1true"
- Counter-checks: without the break check 2 unit tests fail, and with
break not read over its edge 6z-iv fails
- This commit alone: tsc and the three touched unit files pass
(349 tests)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>