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
docs(automation): declare the stranded-row carve-out on sys_automation_run's node_id and variables_json
The durable row's own declarations now agree with their writer: on the one
terminal-row class that carries a consumed suspension, node_id is the PAUSED
node (the Runs surface titles and highlights the row with it), and
variables_json is either the restorable snapshot or the store's drop notice,
which is not one. Same carve-out pattern node_type's description already
carried. The changeset names the visible Runs-surface change. Source-only.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XpTx2tbq3pZRYAdoGt6E6Y
// [#13937] The stranded-class carve-out in this description mirrors
117
+
// `node_type`'s below, for the same reason: the restore verb re-arms the
118
+
// pause from this column (`ObjectStoreSuspendedRunStore` rebuilds the
119
+
// consumed snapshot's node from it — there is no other column), so on that
120
+
// one terminal-row class the writer (`AutomationEngine.recordLog`) puts
121
+
// the PAUSED node here, not the last step. This column is also what the
122
+
// Runs surface titles and highlights a row with (`titleFormat` /
123
+
// `highlightFields` above), so the carve-out is visible there too, by
124
+
// design: the row names the pause an operator can re-arm.
116
125
node_id: Field.text({
117
126
label: 'Node',
118
127
required: false,
119
128
maxLength: 255,
120
-
description: 'For a suspended run, the node it is paused at (resume continues from its out-edges); for a terminal run, the last node reached.',
129
+
description: 'For a suspended run, the node it is paused at (resume continues from its out-edges); for a terminal run, the last node reached — except the one class of terminal row that carries a consumed suspension (a run whose resume consumed its pause and then failed downstream, answered `status: \'stranded\'`), which keeps the PAUSED node so a restore re-arms the pause rather than the node that threw. On that row the last node reached is the final entry of steps_json and the failure is in error; the Runs surface titles the row with this column, so a stranded run reads as its pause node there.',
// [#13909] The presence-discriminator named in this description lives in
237
246
// ObjectStoreSuspendedRunStore.deserializeConsumedSuspension — one writer,
238
-
// one reader, this column is the key for both.
247
+
// one reader, this column is the key for both. [#13937] The same column
248
+
// carries the store's drop notice when the snapshot was over its row
249
+
// budget (`$consumedSuspensionDropped`, read back as
250
+
// `RunRecord.consumedSuspensionDropped`), so "present" now has two shapes
251
+
// and only one of them is a restorable snapshot — stated in the
252
+
// description rather than left to the reader of the column.
239
253
variables_json: Field.textarea({
240
254
label: 'Variables',
241
255
required: false,
242
-
description: 'JSON snapshot of the flow variable map at suspend time. On a terminal row its PRESENCE is the discriminator: nothing but the consumed-suspension path writes it there, so variables_json present on a completed/failed row ⇔ the row carries a restorable suspension — the store\'s deserializer keys off exactly this.',
256
+
description: 'JSON snapshot of the flow variable map at suspend time. On a terminal row its PRESENCE is the discriminator: nothing but the consumed-suspension path writes it there, so variables_json present on a completed/failed row ⇔ the row\'s run had a pause that its resume consumed before a downstream node failed — the store\'s deserializer keys off exactly this. Two shapes on such a row: the snapshot itself (a restorable suspension), or a one-key notice `{"$consumedSuspensionDropped": …}` recording that the snapshot existed and was NOT persisted (over the store\'s row budget) — the notice is not a restorable snapshot; such a run can be restored only by the process that stranded it, while it runs.',
0 commit comments