examples/app-showcase/src/automation/flows/index.ts — showcase_batch_reminders (BatchRemindersFlow) runs a notify node inside its loop body with no try_catch between the loop and it:
loop 'loop_tasks' (collection '{tasks}', maxIterations 500)
body.nodes = [ notify 'send_reminder' (recipients '{task.owner}') ]
notify fails when every recipient template resolves to nothing (notify-node.ts:300), and a loop body has no error handling of its own, so one task with an empty owner ends the whole run: every later task is never reminded, and the run summary reports acted: 0 for work that did happen. That is the exact shape measured on #13681 (a 5-item sweep failing at item 3 processed 3 items).
Found while implementing the containment lint rules for #14394 (PR #14617): this is the first in-repo hit of the new flow-loop-body-uncontained warning. The rule is a warning, so nothing breaks — the bundled showcase app simply demonstrates the shape the platform now warns about, and the example apps are what AI authors copy from.
Two defensible fixes, an authoring decision rather than a mechanical one:
- Adopt the documented containment spelling — wrap
send_reminder in a try_catch whose catch is one bare assignment node (content/docs/automation/flows.mdx, "Per-iteration containment"). The example then demonstrates both the loop container AND the per-iteration guard. - Keep fail-fast deliberately and say so in the flow's
description, so a reader knows the shape is chosen rather than overlooked.
Out of scope for #14394, which is lint + docs only and must not widen into the example apps. Filed unassigned for triage.
Generated by Claude Code
examples/app-showcase/src/automation/flows/index.ts—showcase_batch_reminders(BatchRemindersFlow) runs anotifynode inside itsloopbody with notry_catchbetween the loop and it:notifyfails when every recipient template resolves to nothing (notify-node.ts:300), and aloopbody has no error handling of its own, so one task with an emptyownerends the whole run: every later task is never reminded, and the run summary reportsacted: 0for work that did happen. That is the exact shape measured on #13681 (a 5-item sweep failing at item 3 processed 3 items).Found while implementing the containment lint rules for #14394 (PR #14617): this is the first in-repo hit of the new
flow-loop-body-uncontainedwarning. The rule is a warning, so nothing breaks — the bundled showcase app simply demonstrates the shape the platform now warns about, and the example apps are what AI authors copy from.Two defensible fixes, an authoring decision rather than a mechanical one:
send_reminderin atry_catchwhosecatchis one bareassignmentnode (content/docs/automation/flows.mdx, "Per-iteration containment"). The example then demonstrates both the loop container AND the per-iteration guard.description, so a reader knows the shape is chosen rather than overlooked.Out of scope for #14394, which is lint + docs only and must not widen into the example apps. Filed unassigned for triage.
Generated by Claude Code