OptionalabortAn abort the engine owes this child but could not perform inside the
condemning commit (children are separate documents — aborting one is its
own commit). Lives ON the row — a condemned child's whole story is one
record — and survives a crash because the row persists; the cascade
drains condemned rows (abort child → stamp SubworkflowEntry.resolved)
idempotently, and the field stays afterwards as the audit of WHY. Set by
a parent abort or an onExit: "abort" stage exit; a condemned row is
never adopted into a fresh cohort.
The condemning commit's clock reading.
Why — recorded on the child's own abort history when the drain runs.
The spawning ACTION's name — rows key per (activity entry, spawning action), so two spawn actions on one activity can never cross-adopt each other's children.
The spawning activity's name.
The cohort's stage NAME (denormalized from SubworkflowEntry.stageEntry
for lake queries/inspectors). Deliberately not called stage: the child's
own stage lives on resolved.stage and the $subworkflows var row.
The child definition's name — adoption never crosses definitions.
GDR of the child instance document.
OptionalresolvedTerminal cache, stamped when the engine observes the child terminal. Terminal state is immutable, so once stamped the child leaves the watch-set and status derives from here instead of its document.
Optionalaborted?: trueSet when the child was aborted rather than completing normally.
The child's completedAt — or the drain's clock reading when the
child document was already gone and only the disposition is known.
Optionalstage?: stringThe child's final stage. Absent when the child document vanished before the engine could observe it.
Identity of the forEach row that produced this child — what adopt
matching keys on: _key ?? _id ?? GDR id (a {id, type} row with
a GDR-URI id) for object rows, the value itself for scalar rows.
_key of the StageEntry whose cohort this row currently belongs
to. Re-adoption on a stage re-entry re-binds the row to the new entry;
a row bound to an exited entry is a detached child — still tracked,
still propagating, just outside any activity's implicit gate.
One spawned child in the instance's workflow-scope registry (
instance.subworkflows). A child instance is a real lake document whose lifetime is not bound to any stage, so its record lives at workflow scope — rows are never deleted, and a child's status is always derived from its document (or from SubworkflowEntry.resolved once it terminated).