Skip to content

Commit dfe92a7

Browse files
committed
chore(spec): regenerate authorable-surface + docs references for the ExecutionStepMetrics failure slot (#15617)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F8SRGcf2eKTK7RRpWCGxwf
1 parent 27fa9f8 commit dfe92a7

2 files changed

Lines changed: 11 additions & 8 deletions

File tree

content/docs/references/automation/execution.mdx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ const result = CheckpointSchema.parse(data);
144144
| **iteration** | `integer` | optional | Zero-based iteration of the enclosing `loop`, carried through any nesting — a step inside a `parallel` branch that is itself inside a loop body carries the loop's iteration here and its branch index on `branch`. A step inside a `try` / `catch` region that is itself inside a loop body carries the enclosing loop's iteration — a try/catch region has no index of its own — while `regionKind` stays `try` / `catch`. |
145145
| **branch** | `integer` | optional | Zero-based index of the enclosing `parallel` branch. Present only on a step inside a parallel branch; absent everywhere else. When the parallel node is itself inside a loop body, the loop iteration is reported through `iteration`, never here. |
146146
| **regionKind** | `string` | optional | Region kind the step ran in: loop-body \| parallel-branch \| try \| catch. Stays `try` / `catch` for a step inside a try/catch region nested in a loop body; the loop is reported through `iteration`. For `parallel-branch` the branch index is reported through `branch`, and the enclosing loop iteration — when the parallel node sits inside a loop body — through `iteration`. |
147-
| **metrics** | `{ selected?: integer; acted?: integer; unmeasuredEffect?: boolean }` | optional | Records this step selected / acted on, as reported by the node executor |
147+
| **metrics** | `{ selected?: integer; acted?: integer; unmeasuredEffect?: boolean; failures?: integer }` | optional | Records this step selected / acted on — and, for a step that delegated to a child run (`subflow`, a `map` item), the failures that child contained — as reported by the node executor |
148148
| **skippedBy** | `{ nodeId: string; edgeId?: string; label?: string }` | optional | The gate that closed, when `status` is `skipped` |
149149

150150
### Nested Shape: `ExecutionLog.summary`
@@ -155,7 +155,7 @@ const result = CheckpointSchema.parse(data);
155155
| **acted** | `integer` || Total records written / effects dispatched by the run |
156156
| **skipped** | `integer` || Total node executions a closed gate prevented |
157157
| **unmeasured** | `integer` | optional | Total executions that may have caused an effect the platform cannot count. Absent = not tracked (an older run), which is not the same as zero. |
158-
| **failed** | `integer` | optional | Total node executions that failed — a fold of `nodes[].failures`. On a run that completed every one of them was contained (caught by a `try_catch` or routed down a `fault` edge) and the run went on. Absent = not tracked (an older run), which is not the same as zero. |
158+
| **failed** | `integer` | optional | Total node executions that failed — a fold of `nodes[].failures`, INCLUDING what a delegating node (`subflow` / `map`) rolled up from a child run that completed while containing failures, the way `acted` includes the child's writes: this total answers "what did this run cause", subflows included, so a parent whose child lost rows does not read `failed: 0`. On a run that completed every one of them was contained (caught by a `try_catch` or routed down a `fault` edge) and the run went on. Absent = not tracked (an older run), which is not the same as zero. |
159159
| **nodes** | `{ nodeId: string; nodeType: string; nodeLabel?: string; status: Enum<'success' \| 'failure' \| 'skipped'>; … }[]` || Per-node breakdown, in first-execution order |
160160
| **gates** | `{ nodeId: string; targetNodeId: string; edgeId?: string; label?: string; … }[]` || Gates that closed during the run, most-skipped first |
161161
| **detailOmitted** | `boolean` | optional | Set when persistence dropped `nodes`/`gates` to keep the stored row bounded — the totals are still exact. Declared so empty arrays are never mistaken for "nothing ran". |
@@ -201,7 +201,7 @@ const result = CheckpointSchema.parse(data);
201201
| **iteration** | `integer` | optional | Zero-based iteration of the enclosing `loop`, carried through any nesting — a step inside a `parallel` branch that is itself inside a loop body carries the loop's iteration here and its branch index on `branch`. A step inside a `try` / `catch` region that is itself inside a loop body carries the enclosing loop's iteration — a try/catch region has no index of its own — while `regionKind` stays `try` / `catch`. |
202202
| **branch** | `integer` | optional | Zero-based index of the enclosing `parallel` branch. Present only on a step inside a parallel branch; absent everywhere else. When the parallel node is itself inside a loop body, the loop iteration is reported through `iteration`, never here. |
203203
| **regionKind** | `string` | optional | Region kind the step ran in: loop-body \| parallel-branch \| try \| catch. Stays `try` / `catch` for a step inside a try/catch region nested in a loop body; the loop is reported through `iteration`. For `parallel-branch` the branch index is reported through `branch`, and the enclosing loop iteration — when the parallel node sits inside a loop body — through `iteration`. |
204-
| **metrics** | `{ selected?: integer; acted?: integer; unmeasuredEffect?: boolean }` | optional | Records this step selected / acted on, as reported by the node executor |
204+
| **metrics** | `{ selected?: integer; acted?: integer; unmeasuredEffect?: boolean; failures?: integer }` | optional | Records this step selected / acted on — and, for a step that delegated to a child run (`subflow`, a `map` item), the failures that child contained — as reported by the node executor |
205205
| **skippedBy** | `{ nodeId: string; edgeId?: string; label?: string }` | optional | The gate that closed, when `status` is `skipped` |
206206

207207
### Nested Shape: `ExecutionStepLog.error`
@@ -219,6 +219,7 @@ const result = CheckpointSchema.parse(data);
219219
| **selected** | `integer` | optional | Records this node READ or matched (a `get_record` query, a lookup) |
220220
| **acted** | `integer` | optional | Records this node WROTE (created / updated / deleted) or effects it dispatched (notifications delivered) |
221221
| **unmeasuredEffect** | `boolean` | optional | This execution may have caused an effect the platform cannot count (an external write through a connector). NOT interchangeable with `acted: 0` — it says the count is unknown, not that it is zero. |
222+
| **failures** | `integer` | optional | Node executions that failed inside a child run this execution delegated to and went on from — a `subflow` child or a `map` item whose run COMPLETED while containing failures: its `summary.failed`, rolled up so the parent answers "what did this run cause" the way `acted` already does. Folds into this node's `failures` and so into the run-level `failed`. NOT this execution's own outcome: a step that failed is `status: 'failure'` and counts once through `nodes[].failures`, and a child that FAILED rather than contained is exactly that step failure — its own `failed` stays on the child's run row and nothing rides up here. Absent = delegated nothing, or the child tracked no count; not zero. |
222223

223224
### Nested Shape: `ExecutionStepLog.skippedBy`
224225

@@ -240,6 +241,7 @@ const result = CheckpointSchema.parse(data);
240241
| **selected** | `integer` | optional | Records this node READ or matched (a `get_record` query, a lookup) |
241242
| **acted** | `integer` | optional | Records this node WROTE (created / updated / deleted) or effects it dispatched (notifications delivered) |
242243
| **unmeasuredEffect** | `boolean` | optional | This execution may have caused an effect the platform cannot count (an external write through a connector). NOT interchangeable with `acted: 0` — it says the count is unknown, not that it is zero. |
244+
| **failures** | `integer` | optional | Node executions that failed inside a child run this execution delegated to and went on from — a `subflow` child or a `map` item whose run COMPLETED while containing failures: its `summary.failed`, rolled up so the parent answers "what did this run cause" the way `acted` already does. Folds into this node's `failures` and so into the run-level `failed`. NOT this execution's own outcome: a step that failed is `status: 'failure'` and counts once through `nodes[].failures`, and a child that FAILED rather than contained is exactly that step failure — its own `failed` stays on the child's run row and nothing rides up here. Absent = delegated nothing, or the child tracked no count; not zero. |
243245

244246

245247
---
@@ -281,9 +283,9 @@ const result = CheckpointSchema.parse(data);
281283
| **nodeId** | `string` || Node ID |
282284
| **nodeType** | `string` || Node action type (e.g., "get_record", "decision") |
283285
| **nodeLabel** | `string` | optional | Human-readable node label |
284-
| **status** | `Enum<'success' \| 'failure' \| 'skipped'>` || Terminal status of the node across the run — `failure` if any execution failed, else `success` if any succeeded, else `skipped` |
286+
| **status** | `Enum<'success' \| 'failure' \| 'skipped'>` || Terminal status of the node across the run — `failure` if any execution failed, else `success` if any succeeded, else `skipped`. Judged on this node's OWN executions: a delegating node (`subflow` / `map`) whose child completed while containing failures reads `success` here with `failures > 0` |
285287
| **runs** | `integer` || Times the node executed (loop iterations and parallel branches each count) |
286-
| **failures** | `integer` || Executions that failed — a failure a `try_catch` caught or a `fault` edge routed counts here too; the run-level `failed` is the sum of this across `nodes` |
288+
| **failures** | `integer` || Executions that failed — a failure a `try_catch` caught or a `fault` edge routed counts here too — plus what a delegating execution rolled up from its child run (`metrics.failures`: the contained failures of a `subflow` child or a `map` item that completed), the way `acted` carries the child's writes; the run-level `failed` is the sum of this across `nodes` |
287289
| **skipped** | `integer` || Times a closed gate kept this node from running at all |
288290
| **selected** | `integer` | optional | Records read across every execution — omitted for a node that reads none |
289291
| **acted** | `integer` | optional | Records written / effects dispatched across every execution — omitted for a node that writes none |
@@ -302,7 +304,7 @@ const result = CheckpointSchema.parse(data);
302304
| **acted** | `integer` || Total records written / effects dispatched by the run |
303305
| **skipped** | `integer` || Total node executions a closed gate prevented |
304306
| **unmeasured** | `integer` | optional | Total executions that may have caused an effect the platform cannot count. Absent = not tracked (an older run), which is not the same as zero. |
305-
| **failed** | `integer` | optional | Total node executions that failed — a fold of `nodes[].failures`. On a run that completed every one of them was contained (caught by a `try_catch` or routed down a `fault` edge) and the run went on. Absent = not tracked (an older run), which is not the same as zero. |
307+
| **failed** | `integer` | optional | Total node executions that failed — a fold of `nodes[].failures`, INCLUDING what a delegating node (`subflow` / `map`) rolled up from a child run that completed while containing failures, the way `acted` includes the child's writes: this total answers "what did this run cause", subflows included, so a parent whose child lost rows does not read `failed: 0`. On a run that completed every one of them was contained (caught by a `try_catch` or routed down a `fault` edge) and the run went on. Absent = not tracked (an older run), which is not the same as zero. |
306308
| **nodes** | `{ nodeId: string; nodeType: string; nodeLabel?: string; status: Enum<'success' \| 'failure' \| 'skipped'>; … }[]` || Per-node breakdown, in first-execution order |
307309
| **gates** | `{ nodeId: string; targetNodeId: string; edgeId?: string; label?: string; … }[]` || Gates that closed during the run, most-skipped first |
308310
| **detailOmitted** | `boolean` | optional | Set when persistence dropped `nodes`/`gates` to keep the stored row bounded — the totals are still exact. Declared so empty arrays are never mistaken for "nothing ran". |
@@ -314,9 +316,9 @@ const result = CheckpointSchema.parse(data);
314316
| **nodeId** | `string` || Node ID |
315317
| **nodeType** | `string` || Node action type (e.g., "get_record", "decision") |
316318
| **nodeLabel** | `string` | optional | Human-readable node label |
317-
| **status** | `Enum<'success' \| 'failure' \| 'skipped'>` || Terminal status of the node across the run — `failure` if any execution failed, else `success` if any succeeded, else `skipped` |
319+
| **status** | `Enum<'success' \| 'failure' \| 'skipped'>` || Terminal status of the node across the run — `failure` if any execution failed, else `success` if any succeeded, else `skipped`. Judged on this node's OWN executions: a delegating node (`subflow` / `map`) whose child completed while containing failures reads `success` here with `failures > 0` |
318320
| **runs** | `integer` || Times the node executed (loop iterations and parallel branches each count) |
319-
| **failures** | `integer` || Executions that failed — a failure a `try_catch` caught or a `fault` edge routed counts here too; the run-level `failed` is the sum of this across `nodes` |
321+
| **failures** | `integer` || Executions that failed — a failure a `try_catch` caught or a `fault` edge routed counts here too — plus what a delegating execution rolled up from its child run (`metrics.failures`: the contained failures of a `subflow` child or a `map` item that completed), the way `acted` carries the child's writes; the run-level `failed` is the sum of this across `nodes` |
320322
| **skipped** | `integer` || Times a closed gate kept this node from running at all |
321323
| **selected** | `integer` | optional | Records read across every execution — omitted for a node that reads none |
322324
| **acted** | `integer` | optional | Records written / effects dispatched across every execution — omitted for a node that writes none |

packages/spec/authorable-surface/automation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
"automation/ExecutionStepLog:startedAt",
142142
"automation/ExecutionStepLog:status",
143143
"automation/ExecutionStepMetrics:acted",
144+
"automation/ExecutionStepMetrics:failures",
144145
"automation/ExecutionStepMetrics:selected",
145146
"automation/ExecutionStepMetrics:unmeasuredEffect",
146147
"automation/ExecutionStepSkipReason:edgeId",

0 commit comments

Comments
 (0)