You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
service-automation: subflow and map roll a child's contained failures into the parent's failed through the ExecutionStepMetrics failure slot ruled on #15617 #16314
Services half of the #15617 ruling (director seat, decision batch #55, maintainer 「同意」 on option 1, 2026-09-06). Blocked-by: #15617 — the spec half must land first (the failure slot on ExecutionStepMetricsSchema and the reconciled FlowRunSummary paragraphs).
What this card lands
packages/services/service-automation/src/subflow-node.ts rolls the child run's failed into the new failure slot alongside the selected / acted / unmeasuredEffect it already rolls up; the map node does the same for its per-row children (re-check: the card says map may not share the same roll-up path — measure it, do not assume).
patch on @objectstack/service-automation unless the seat measures a surface move; Clause-② re-derived from the diff (the wire total's semantics move — declare honestly).
Re-check before claiming
grep -n "unmeasuredEffect\|ExecutionStepMetrics" packages/services/service-automation/src/subflow-node.ts
grep -n "failures" packages/spec/src/automation/execution.zod.ts # the slot must exist on main before this claim
Services half of the #15617 ruling (director seat, decision batch #55, maintainer 「同意」 on option 1, 2026-09-06). Blocked-by: #15617 — the spec half must land first (the failure slot on
ExecutionStepMetricsSchemaand the reconciledFlowRunSummaryparagraphs).What this card lands
packages/services/service-automation/src/subflow-node.tsrolls the child run'sfailedinto the new failure slot alongside theselected/acted/unmeasuredEffectit already rolls up; themapnode does the same for its per-row children (re-check: the card saysmapmay not share the same roll-up path — measure it, do not assume).failedfold therefore counts a delegating node's contained child failures. Measured target (from spec:FlowRunSummary's two paragraphs disagree for a subflow parent —failedis declared a node fold, while the summary is declared to answer "what did this run cause" and roll a child's totals up #15617): parentloop { subflow(child) }with one child failing per five rows answersfailed=1, not0; the control (a child that fails rather than contains a failure) keeps answering exactly as today (call: {runs:5, failures:1}, parentfailed=1) — pin both.FlowRunSummary.failedfold, loop iteration throughtry_catch,$error.iteration/$error.item,failed=on the summary line #15609's narrowed wording ("no node execution of this run failed") is widened back to the summary's declared question once this lands; the changeset says what moved on the wire total.patchon@objectstack/service-automationunless the seat measures a surface move;Clause-②re-derived from the diff (the wire total's semantics move — declare honestly).Re-check before claiming