FlowBuilder + FlowExecutor: each phase is an llmCall writing a named variable, the proof gate is a toolCall running a real check, and oneOf branches on the verdict.
What this example had to learn about the executor
The runtime node set differs from the editor shapes — worth knowing before writing flows by hand:- No
loopnode and no early exit.loopis editor-side;sequenceruns every step, andreturnjust resolves a value. The bounded retry ladder here is a chain ofoneOfnodes, each guarding an implement+check attempt on!check.startsWith('PASS'). After a pass, the remaining attempts are no-ops. {{var}}prompt interpolation is flat-keyed (\w+— no{{check.feedback}}), whileoneOfconditions use the full expression grammar (check.startsWith('PASS'),check.passed === true). Keeping the gate verdict a'PASS: …' / 'FAIL: …'string serves both surfaces.return/setVariabletake$varwhole-variable references, not{{spec}}bundles inside object literals — so a final report phase composes the deliverable, thenreturn: '$deliverable'.