ValueExpr:
| { type: "literal"; value: unknown }
| {
field: string;
path?: string;
scope?: "workflow" | "stage";
type: "fieldRead";
}
| { param: string; type: "param" }
| { type: "actor" }
| { type: "now" }
| { type: "self" }
| { type: "stage" }
| {
fields: Record<
string,
| { type: "literal"; value: unknown }
| {
field: string;
path?: string;
scope?: "workflow" | "stage";
type: "fieldRead";
}
| { param: string; type: "param" }
| { type: "actor" }
| { type: "now" }
| { type: "self" }
| { type: "stage" }
| ({ type: "object"; fields: Record<string, ValueExprInternal>; }),
>;
type: "object";
}
An op's write payload, resolved to concrete JSON when the op applies. Each context-bound arm has a rendered
$-twin in conditions (actor↔$actor,now↔$now,self↔$self), so learning one side teaches the other. Distinct from FieldSource, a field's seed recipe.