User Task Completion
The graph engine used UserTaskExecutors to interpret signals and emit effects. The durable runtime completes a typed user-task contract through the service API.
dart
await service.completeUserTask(
commandId: task.commandId,
response: Approval.approved(),
idempotencyKey: requestId,
);The Flutter action bar does not complete tasks by schema string. It posts the sealed UserTaskAction the server already authorized.
Reassignment
Durable user-task reassignment is a first-class persistence path. It does not rewrite history. The new assignment is the eligibility surface for the next claim or completion.
Expiry
Optional expiresAt is a hard boundary. Recovery records expiry once. Workflow code can escalate, reassign, cancel, or fail.