@sanity/workflow-engine 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -2271,7 +2271,7 @@ export declare function definitionDeployedData(
2271
2271
  status: WorkflowDefinitionDeployedData["status"];
2272
2272
  deployId: string;
2273
2273
  },
2274
- ): WorkflowDefinitionDeployedData;
2274
+ ): DerivedEventData<WorkflowDefinitionDeployedData>;
2275
2275
 
2276
2276
  /** One declared group at one level, with the members lexically attributed to it. */
2277
2277
  export declare interface DefinitionGroupSite {
@@ -2593,6 +2593,14 @@ export declare interface DeriveAutonomyOptions {
2593
2593
  children?: ReadonlyMap<string, WorkflowDefinition>;
2594
2594
  }
2595
2595
 
2596
+ /**
2597
+ * A payload builder's half: everything the event carries except the
2598
+ * {@link ExecutionScopedEventData} stamp, which the emit site supplies. A
2599
+ * caller assembling an event payload itself has to add those fields.
2600
+ */
2601
+ export declare type DerivedEventData<Data extends ExecutionScopedEventData> =
2602
+ Omit<Data, keyof ExecutionScopedEventData>;
2603
+
2596
2604
  /** Who fires the activity's actions, from shape alone — a separate causal
2597
2605
  * check decides whether it actually resolves without a caller. A `target`
2598
2606
  * is `off-system`; all-cascade actions are `autonomous`, none are
@@ -4080,7 +4088,7 @@ export declare const EXECUTION_KINDS: {
4080
4088
  readonly script: "script";
4081
4089
  readonly test: "test";
4082
4090
  readonly studio: "studio";
4083
- readonly sdkApp: "sdk-app";
4091
+ readonly sdkApp: "sdk";
4084
4092
  };
4085
4093
 
4086
4094
  /**
@@ -4098,6 +4106,22 @@ export declare interface ExecutionContext {
4098
4106
  id?: string;
4099
4107
  }
4100
4108
 
4109
+ /**
4110
+ * The caller-provenance fields every engine event payload carries: the
4111
+ * engine's own view of the host that invoked it. `ExecutionContext.id` is
4112
+ * never reported.
4113
+ */
4114
+ export declare interface ExecutionScopedEventData {
4115
+ /** The JavaScript runtime the engine inferred for itself, matching the
4116
+ * `executionContext.runtime` the same operation stamps on its history
4117
+ * entries. */
4118
+ executionRuntime: string;
4119
+ /** Where the operation came from: the host's declared
4120
+ * {@link EXECUTION_KINDS} value projected onto the reported vocabulary,
4121
+ * or `other` for a kind outside it. Absent when the host declared none. */
4122
+ executionKind?: ReportedExecutionKind;
4123
+ }
4124
+
4101
4125
  /**
4102
4126
  * Executor classifications — who, if anyone, fires an activity's actions
4103
4127
  * (shape-derived; see `./activity-kind.ts`).
@@ -6635,6 +6659,24 @@ export declare function parseDefinitionSnapshotValue(
6635
6659
  instance: Pick<WorkflowInstance, "_id" | "definitionSnapshot">,
6636
6660
  ): WorkflowDefinition;
6637
6661
 
6662
+ /**
6663
+ * Parse definitions at the deploy boundary and derive the reader model their
6664
+ * parsed shape requires, the one sequence `workflow.deployDefinitions` applies
6665
+ * before it checks an acknowledgement. `caller` prefixes any parse error, and a
6666
+ * definition the parser rejects throws instead of yielding a floor.
6667
+ *
6668
+ * Anything that checks an acknowledgement against definitions must derive the
6669
+ * floor through this. Unsupported outside the Workflows packages.
6670
+ * @internal
6671
+ */
6672
+ export declare function _parseDefinitionsWithReaderModel(
6673
+ definitions: readonly Record<string, unknown>[],
6674
+ caller: string,
6675
+ ): {
6676
+ definitions: WorkflowDefinition[];
6677
+ requiredMinReaderModel: number;
6678
+ };
6679
+
6638
6680
  export declare interface ParsedGdr {
6639
6681
  scheme: GdrScheme;
6640
6682
  /** For `dataset`: `<projectId>` */
@@ -7115,6 +7157,21 @@ export declare type RemediationVerb =
7115
7157
  | "set-stage"
7116
7158
  | "abort";
7117
7159
 
7160
+ /**
7161
+ * Where an engine event came from. Narrower than the vocabulary a host can
7162
+ * declare, because {@link EXECUTION_KINDS} values naming a role rather than
7163
+ * a host are projected onto one: `drainer` reports `server`, and
7164
+ * `interactive`, `script`, and `test` report `other`, as does any value
7165
+ * outside the vocabulary. Every other shipped value reports itself.
7166
+ */
7167
+ export declare type ReportedExecutionKind =
7168
+ | "cli"
7169
+ | "mcp"
7170
+ | "other"
7171
+ | "sdk"
7172
+ | "server"
7173
+ | "studio";
7174
+
7118
7175
  /** @internal Validated project-member reads shared by workspace adapters; not a supported consumer API. */
7119
7176
  export declare function _requestProjectMembers(
7120
7177
  request: (options: { url: string }) => Promise<unknown>,
@@ -9160,7 +9217,8 @@ export declare interface WorkflowAccess {
9160
9217
 
9161
9218
  export declare const WorkflowActionFired: WorkflowTelemetryEvent<WorkflowActionFiredData>;
9162
9219
 
9163
- export declare interface WorkflowActionFiredData extends InstanceScopedEventData {
9220
+ export declare interface WorkflowActionFiredData
9221
+ extends ExecutionScopedEventData, InstanceScopedEventData {
9164
9222
  /** Effective kind of the activity the action fired on. */
9165
9223
  activityKind?: ActivityKind;
9166
9224
  hasParams: boolean;
@@ -9171,7 +9229,8 @@ export declare interface WorkflowActionFiredData extends InstanceScopedEventData
9171
9229
  export declare const WorkflowActivityReset: WorkflowTelemetryEvent<WorkflowAdminOverrideData>;
9172
9230
 
9173
9231
  /** Outcome flag for the admin-override events — the attempt emits either way. */
9174
- export declare interface WorkflowAdminOverrideData extends InstanceScopedEventData {
9232
+ export declare interface WorkflowAdminOverrideData
9233
+ extends ExecutionScopedEventData, InstanceScopedEventData {
9175
9234
  /** `false` = the override was a no-op (already at the target / already terminal). */
9176
9235
  changed: boolean;
9177
9236
  }
@@ -9951,7 +10010,7 @@ export declare type WorkflowDefinition = v.InferOutput<
9951
10010
 
9952
10011
  export declare const WorkflowDefinitionDeleted: WorkflowTelemetryEvent<WorkflowDefinitionDeletedData>;
9953
10012
 
9954
- export declare interface WorkflowDefinitionDeletedData {
10013
+ export declare interface WorkflowDefinitionDeletedData extends ExecutionScopedEventData {
9955
10014
  /** Deployed versions removed by this delete. */
9956
10015
  deletedVersionCount: number;
9957
10016
  /** Non-terminal instances cascade-aborted before the delete. */
@@ -9962,7 +10021,7 @@ export declare interface WorkflowDefinitionDeletedData {
9962
10021
 
9963
10022
  export declare const WorkflowDefinitionDeployed: WorkflowTelemetryEvent<WorkflowDefinitionDeployedData>;
9964
10023
 
9965
- export declare interface WorkflowDefinitionDeployedData {
10024
+ export declare interface WorkflowDefinitionDeployedData extends ExecutionScopedEventData {
9966
10025
  /** Content fingerprint of the deployed content. */
9967
10026
  contentHash: string;
9968
10027
  /** Whether this deploy minted a new version or matched the latest one.
@@ -10051,7 +10110,8 @@ export declare type WorkflowDeploymentInput = Omit<
10051
10110
 
10052
10111
  export declare const WorkflowEffectCompleted: WorkflowTelemetryEvent<WorkflowEffectCompletedData>;
10053
10112
 
10054
- export declare interface WorkflowEffectCompletedData extends InstanceScopedEventData {
10113
+ export declare interface WorkflowEffectCompletedData
10114
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10055
10115
  /** The effect's author-chosen name — one of the payload policy's two
10056
10116
  * deliberate customer-string exceptions (module doc); unique per
10057
10117
  * definition. */
@@ -10068,7 +10128,8 @@ export declare interface WorkflowEffectCompletedData extends InstanceScopedEvent
10068
10128
 
10069
10129
  export declare const WorkflowEffectsDrained: WorkflowTelemetryEvent<WorkflowEffectsDrainedData>;
10070
10130
 
10071
- export declare interface WorkflowEffectsDrainedData extends InstanceScopedEventData {
10131
+ export declare interface WorkflowEffectsDrainedData
10132
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10072
10133
  /** Pending effects dispatched to a registered handler in this drain —
10073
10134
  * 0 for an empty poll (the pass itself is the signal). */
10074
10135
  drainedCount: number;
@@ -10080,7 +10141,8 @@ export declare interface WorkflowEffectsDrainedData extends InstanceScopedEventD
10080
10141
 
10081
10142
  export declare const WorkflowEffectStateReported: WorkflowTelemetryEvent<WorkflowEffectStateReportedData>;
10082
10143
 
10083
- export declare interface WorkflowEffectStateReportedData extends InstanceScopedEventData {
10144
+ export declare interface WorkflowEffectStateReportedData
10145
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10084
10146
  /** The reporting effect's author-chosen name — one of the payload policy's
10085
10147
  * two deliberate customer-string exceptions (module doc). */
10086
10148
  effect: EffectName;
@@ -10214,7 +10276,8 @@ export declare interface WorkflowFetchOptions {
10214
10276
 
10215
10277
  export declare const WorkflowFieldEdited: WorkflowTelemetryEvent<WorkflowFieldEditedData>;
10216
10278
 
10217
- export declare interface WorkflowFieldEditedData extends InstanceScopedEventData {
10279
+ export declare interface WorkflowFieldEditedData
10280
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10218
10281
  /** Declared kind of the edited field entry. */
10219
10282
  fieldKind?: FieldKind;
10220
10283
  mode: EditMode;
@@ -10421,7 +10484,8 @@ export declare const WorkflowInstanceSchema: v.GenericSchema<WorkflowInstance>;
10421
10484
 
10422
10485
  export declare const WorkflowInstanceStarted: WorkflowTelemetryEvent<WorkflowInstanceStartedData>;
10423
10486
 
10424
- export declare interface WorkflowInstanceStartedData extends InstanceScopedEventData {
10487
+ export declare interface WorkflowInstanceStartedData
10488
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10425
10489
  /** Caller-supplied initial-field entries — `initialFields` for a direct
10426
10490
  * start, the parent's projected `with` bindings for a spawned child. */
10427
10491
  initialFieldCount: number;
@@ -10433,7 +10497,8 @@ export declare interface WorkflowInstanceStartedData extends InstanceScopedEvent
10433
10497
 
10434
10498
  export declare const WorkflowInstanceTicked: WorkflowTelemetryEvent<WorkflowInstanceTickedData>;
10435
10499
 
10436
- export declare interface WorkflowInstanceTickedData extends InstanceScopedEventData {
10500
+ export declare interface WorkflowInstanceTickedData
10501
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10437
10502
  /** Auto-transitions fired during the cascade. */
10438
10503
  cascaded: number;
10439
10504
  }
@@ -10520,7 +10585,8 @@ export declare const WorkflowStageSet: WorkflowTelemetryEvent<WorkflowAdminOverr
10520
10585
 
10521
10586
  export declare const WorkflowStageTransitioned: WorkflowTelemetryEvent<WorkflowStageTransitionedData>;
10522
10587
 
10523
- export declare interface WorkflowStageTransitionedData extends InstanceScopedEventData {
10588
+ export declare interface WorkflowStageTransitionedData
10589
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10524
10590
  /** Positional index of the exited stage in the definition's `stages[]`
10525
10591
  * order — indexes, never names, so the payload stays content-free. */
10526
10592
  fromStageIndex: number;
package/dist/index.d.ts CHANGED
@@ -2271,7 +2271,7 @@ export declare function definitionDeployedData(
2271
2271
  status: WorkflowDefinitionDeployedData["status"];
2272
2272
  deployId: string;
2273
2273
  },
2274
- ): WorkflowDefinitionDeployedData;
2274
+ ): DerivedEventData<WorkflowDefinitionDeployedData>;
2275
2275
 
2276
2276
  /** One declared group at one level, with the members lexically attributed to it. */
2277
2277
  export declare interface DefinitionGroupSite {
@@ -2593,6 +2593,14 @@ export declare interface DeriveAutonomyOptions {
2593
2593
  children?: ReadonlyMap<string, WorkflowDefinition>;
2594
2594
  }
2595
2595
 
2596
+ /**
2597
+ * A payload builder's half: everything the event carries except the
2598
+ * {@link ExecutionScopedEventData} stamp, which the emit site supplies. A
2599
+ * caller assembling an event payload itself has to add those fields.
2600
+ */
2601
+ export declare type DerivedEventData<Data extends ExecutionScopedEventData> =
2602
+ Omit<Data, keyof ExecutionScopedEventData>;
2603
+
2596
2604
  /** Who fires the activity's actions, from shape alone — a separate causal
2597
2605
  * check decides whether it actually resolves without a caller. A `target`
2598
2606
  * is `off-system`; all-cascade actions are `autonomous`, none are
@@ -4080,7 +4088,7 @@ export declare const EXECUTION_KINDS: {
4080
4088
  readonly script: "script";
4081
4089
  readonly test: "test";
4082
4090
  readonly studio: "studio";
4083
- readonly sdkApp: "sdk-app";
4091
+ readonly sdkApp: "sdk";
4084
4092
  };
4085
4093
 
4086
4094
  /**
@@ -4098,6 +4106,22 @@ export declare interface ExecutionContext {
4098
4106
  id?: string;
4099
4107
  }
4100
4108
 
4109
+ /**
4110
+ * The caller-provenance fields every engine event payload carries: the
4111
+ * engine's own view of the host that invoked it. `ExecutionContext.id` is
4112
+ * never reported.
4113
+ */
4114
+ export declare interface ExecutionScopedEventData {
4115
+ /** The JavaScript runtime the engine inferred for itself, matching the
4116
+ * `executionContext.runtime` the same operation stamps on its history
4117
+ * entries. */
4118
+ executionRuntime: string;
4119
+ /** Where the operation came from: the host's declared
4120
+ * {@link EXECUTION_KINDS} value projected onto the reported vocabulary,
4121
+ * or `other` for a kind outside it. Absent when the host declared none. */
4122
+ executionKind?: ReportedExecutionKind;
4123
+ }
4124
+
4101
4125
  /**
4102
4126
  * Executor classifications — who, if anyone, fires an activity's actions
4103
4127
  * (shape-derived; see `./activity-kind.ts`).
@@ -6635,6 +6659,24 @@ export declare function parseDefinitionSnapshotValue(
6635
6659
  instance: Pick<WorkflowInstance, "_id" | "definitionSnapshot">,
6636
6660
  ): WorkflowDefinition;
6637
6661
 
6662
+ /**
6663
+ * Parse definitions at the deploy boundary and derive the reader model their
6664
+ * parsed shape requires, the one sequence `workflow.deployDefinitions` applies
6665
+ * before it checks an acknowledgement. `caller` prefixes any parse error, and a
6666
+ * definition the parser rejects throws instead of yielding a floor.
6667
+ *
6668
+ * Anything that checks an acknowledgement against definitions must derive the
6669
+ * floor through this. Unsupported outside the Workflows packages.
6670
+ * @internal
6671
+ */
6672
+ export declare function _parseDefinitionsWithReaderModel(
6673
+ definitions: readonly Record<string, unknown>[],
6674
+ caller: string,
6675
+ ): {
6676
+ definitions: WorkflowDefinition[];
6677
+ requiredMinReaderModel: number;
6678
+ };
6679
+
6638
6680
  export declare interface ParsedGdr {
6639
6681
  scheme: GdrScheme;
6640
6682
  /** For `dataset`: `<projectId>` */
@@ -7115,6 +7157,21 @@ export declare type RemediationVerb =
7115
7157
  | "set-stage"
7116
7158
  | "abort";
7117
7159
 
7160
+ /**
7161
+ * Where an engine event came from. Narrower than the vocabulary a host can
7162
+ * declare, because {@link EXECUTION_KINDS} values naming a role rather than
7163
+ * a host are projected onto one: `drainer` reports `server`, and
7164
+ * `interactive`, `script`, and `test` report `other`, as does any value
7165
+ * outside the vocabulary. Every other shipped value reports itself.
7166
+ */
7167
+ export declare type ReportedExecutionKind =
7168
+ | "cli"
7169
+ | "mcp"
7170
+ | "other"
7171
+ | "sdk"
7172
+ | "server"
7173
+ | "studio";
7174
+
7118
7175
  /** @internal Validated project-member reads shared by workspace adapters; not a supported consumer API. */
7119
7176
  export declare function _requestProjectMembers(
7120
7177
  request: (options: { url: string }) => Promise<unknown>,
@@ -9160,7 +9217,8 @@ export declare interface WorkflowAccess {
9160
9217
 
9161
9218
  export declare const WorkflowActionFired: WorkflowTelemetryEvent<WorkflowActionFiredData>;
9162
9219
 
9163
- export declare interface WorkflowActionFiredData extends InstanceScopedEventData {
9220
+ export declare interface WorkflowActionFiredData
9221
+ extends ExecutionScopedEventData, InstanceScopedEventData {
9164
9222
  /** Effective kind of the activity the action fired on. */
9165
9223
  activityKind?: ActivityKind;
9166
9224
  hasParams: boolean;
@@ -9171,7 +9229,8 @@ export declare interface WorkflowActionFiredData extends InstanceScopedEventData
9171
9229
  export declare const WorkflowActivityReset: WorkflowTelemetryEvent<WorkflowAdminOverrideData>;
9172
9230
 
9173
9231
  /** Outcome flag for the admin-override events — the attempt emits either way. */
9174
- export declare interface WorkflowAdminOverrideData extends InstanceScopedEventData {
9232
+ export declare interface WorkflowAdminOverrideData
9233
+ extends ExecutionScopedEventData, InstanceScopedEventData {
9175
9234
  /** `false` = the override was a no-op (already at the target / already terminal). */
9176
9235
  changed: boolean;
9177
9236
  }
@@ -9951,7 +10010,7 @@ export declare type WorkflowDefinition = v.InferOutput<
9951
10010
 
9952
10011
  export declare const WorkflowDefinitionDeleted: WorkflowTelemetryEvent<WorkflowDefinitionDeletedData>;
9953
10012
 
9954
- export declare interface WorkflowDefinitionDeletedData {
10013
+ export declare interface WorkflowDefinitionDeletedData extends ExecutionScopedEventData {
9955
10014
  /** Deployed versions removed by this delete. */
9956
10015
  deletedVersionCount: number;
9957
10016
  /** Non-terminal instances cascade-aborted before the delete. */
@@ -9962,7 +10021,7 @@ export declare interface WorkflowDefinitionDeletedData {
9962
10021
 
9963
10022
  export declare const WorkflowDefinitionDeployed: WorkflowTelemetryEvent<WorkflowDefinitionDeployedData>;
9964
10023
 
9965
- export declare interface WorkflowDefinitionDeployedData {
10024
+ export declare interface WorkflowDefinitionDeployedData extends ExecutionScopedEventData {
9966
10025
  /** Content fingerprint of the deployed content. */
9967
10026
  contentHash: string;
9968
10027
  /** Whether this deploy minted a new version or matched the latest one.
@@ -10051,7 +10110,8 @@ export declare type WorkflowDeploymentInput = Omit<
10051
10110
 
10052
10111
  export declare const WorkflowEffectCompleted: WorkflowTelemetryEvent<WorkflowEffectCompletedData>;
10053
10112
 
10054
- export declare interface WorkflowEffectCompletedData extends InstanceScopedEventData {
10113
+ export declare interface WorkflowEffectCompletedData
10114
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10055
10115
  /** The effect's author-chosen name — one of the payload policy's two
10056
10116
  * deliberate customer-string exceptions (module doc); unique per
10057
10117
  * definition. */
@@ -10068,7 +10128,8 @@ export declare interface WorkflowEffectCompletedData extends InstanceScopedEvent
10068
10128
 
10069
10129
  export declare const WorkflowEffectsDrained: WorkflowTelemetryEvent<WorkflowEffectsDrainedData>;
10070
10130
 
10071
- export declare interface WorkflowEffectsDrainedData extends InstanceScopedEventData {
10131
+ export declare interface WorkflowEffectsDrainedData
10132
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10072
10133
  /** Pending effects dispatched to a registered handler in this drain —
10073
10134
  * 0 for an empty poll (the pass itself is the signal). */
10074
10135
  drainedCount: number;
@@ -10080,7 +10141,8 @@ export declare interface WorkflowEffectsDrainedData extends InstanceScopedEventD
10080
10141
 
10081
10142
  export declare const WorkflowEffectStateReported: WorkflowTelemetryEvent<WorkflowEffectStateReportedData>;
10082
10143
 
10083
- export declare interface WorkflowEffectStateReportedData extends InstanceScopedEventData {
10144
+ export declare interface WorkflowEffectStateReportedData
10145
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10084
10146
  /** The reporting effect's author-chosen name — one of the payload policy's
10085
10147
  * two deliberate customer-string exceptions (module doc). */
10086
10148
  effect: EffectName;
@@ -10214,7 +10276,8 @@ export declare interface WorkflowFetchOptions {
10214
10276
 
10215
10277
  export declare const WorkflowFieldEdited: WorkflowTelemetryEvent<WorkflowFieldEditedData>;
10216
10278
 
10217
- export declare interface WorkflowFieldEditedData extends InstanceScopedEventData {
10279
+ export declare interface WorkflowFieldEditedData
10280
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10218
10281
  /** Declared kind of the edited field entry. */
10219
10282
  fieldKind?: FieldKind;
10220
10283
  mode: EditMode;
@@ -10421,7 +10484,8 @@ export declare const WorkflowInstanceSchema: v.GenericSchema<WorkflowInstance>;
10421
10484
 
10422
10485
  export declare const WorkflowInstanceStarted: WorkflowTelemetryEvent<WorkflowInstanceStartedData>;
10423
10486
 
10424
- export declare interface WorkflowInstanceStartedData extends InstanceScopedEventData {
10487
+ export declare interface WorkflowInstanceStartedData
10488
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10425
10489
  /** Caller-supplied initial-field entries — `initialFields` for a direct
10426
10490
  * start, the parent's projected `with` bindings for a spawned child. */
10427
10491
  initialFieldCount: number;
@@ -10433,7 +10497,8 @@ export declare interface WorkflowInstanceStartedData extends InstanceScopedEvent
10433
10497
 
10434
10498
  export declare const WorkflowInstanceTicked: WorkflowTelemetryEvent<WorkflowInstanceTickedData>;
10435
10499
 
10436
- export declare interface WorkflowInstanceTickedData extends InstanceScopedEventData {
10500
+ export declare interface WorkflowInstanceTickedData
10501
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10437
10502
  /** Auto-transitions fired during the cascade. */
10438
10503
  cascaded: number;
10439
10504
  }
@@ -10520,7 +10585,8 @@ export declare const WorkflowStageSet: WorkflowTelemetryEvent<WorkflowAdminOverr
10520
10585
 
10521
10586
  export declare const WorkflowStageTransitioned: WorkflowTelemetryEvent<WorkflowStageTransitionedData>;
10522
10587
 
10523
- export declare interface WorkflowStageTransitionedData extends InstanceScopedEventData {
10588
+ export declare interface WorkflowStageTransitionedData
10589
+ extends ExecutionScopedEventData, InstanceScopedEventData {
10524
10590
  /** Positional index of the exited stage in the definition's `stages[]`
10525
10591
  * order — indexes, never names, so the payload stays content-free. */
10526
10592
  fromStageIndex: number;