Observed while probing loop bindings by execution.
Inside a create_parallel_queue, a step whose template references an unbound bare name does not write its file, and the pipeline still reports success:
- id: loop
action: create_parallel_queue
create_parallel_queue:
"on": "['A']"
action_loop:
- action: filesystem
parameters:
action: write
path: "out/probe.txt"
content: "{{ nosuch_name }}"
The write is refused internally with still contains unresolved template references, no file appears, and the run's result reports success. Nothing surfaces to the caller.
The $ spelling fails differently and just as quietly: {{ $nosuch }} is stripped to nothing and the literal text is written to the file, so the artifact exists and its contents are wrong.
Two more findings from the same probe, same construct:
- A template in
on: breaks queue splitting. "on": "['x', '{{ 1 + 1 }}']" yields a single queue item whose value is the list ['x', '2'], rather than two items. Without a template it splits correctly.
- Inner actions cannot use
tool:. tool: filesystem inside the nested action_loop raises Could not import tool filesystem: No module named 'orchestrator.tools.filesystem_tools'; action: filesystem is required. So the step syntax inside this construct differs from the step syntax everywhere else, undocumented.
The silent-success case is the serious one: it is the failure mode the resilience work was meant to remove, and no test covers this construct. examples/ contains no create_parallel_queue pipeline that validates, so nothing exercises it.
Observed while probing loop bindings by execution.
Inside a
create_parallel_queue, a step whose template references an unbound bare name does not write its file, and the pipeline still reports success:The write is refused internally with
still contains unresolved template references, no file appears, and the run's result reports success. Nothing surfaces to the caller.The
$spelling fails differently and just as quietly:{{ $nosuch }}is stripped to nothing and the literal text is written to the file, so the artifact exists and its contents are wrong.Two more findings from the same probe, same construct:
on:breaks queue splitting."on": "['x', '{{ 1 + 1 }}']"yields a single queue item whose value is the list['x', '2'], rather than two items. Without a template it splits correctly.tool:.tool: filesysteminside the nestedaction_loopraisesCould not import tool filesystem: No module named 'orchestrator.tools.filesystem_tools';action: filesystemis required. So the step syntax inside this construct differs from the step syntax everywhere else, undocumented.The silent-success case is the serious one: it is the failure mode the resilience work was meant to remove, and no test covers this construct.
examples/contains nocreate_parallel_queuepipeline that validates, so nothing exercises it.