Summary
Cancelled workflows can be recorded as Failed in duroxide.executions.status, making cancellations indistinguishable from real failures when querying execution rows.
Expected behavior
Cancelled executions should have a distinct terminal status, such as Cancelled, so queries and dashboards can separate user-requested cancellation from failures.
At minimum, the status vocabulary exposed through df.status() and duroxide.executions.status should agree on terminal states, even if casing differs.
Actual behavior
After cancelling a workflow:
df.status(instance_id) can report cancelled.
- History events show cancellation details.
duroxide.executions.status records the execution as Failed.
Repro shape
- Start a long-running workflow.
- Cancel it with
df.cancel(instance_id, reason).
- Query
df.status(instance_id).
- Query
duroxide.executions.status for the same instance.
- Observe that the durable function status and execution status disagree on whether the terminal state is cancellation or failure.
Impact
Failure dashboards overcount real failures, retry logic can treat user cancellations as retryable failures, and consumers must inspect history payloads to identify cancellations.
Summary
Cancelled workflows can be recorded as
Failedinduroxide.executions.status, making cancellations indistinguishable from real failures when querying execution rows.Expected behavior
Cancelled executions should have a distinct terminal status, such as
Cancelled, so queries and dashboards can separate user-requested cancellation from failures.At minimum, the status vocabulary exposed through
df.status()andduroxide.executions.statusshould agree on terminal states, even if casing differs.Actual behavior
After cancelling a workflow:
df.status(instance_id)can reportcancelled.duroxide.executions.statusrecords the execution asFailed.Repro shape
df.cancel(instance_id, reason).df.status(instance_id).duroxide.executions.statusfor the same instance.Impact
Failure dashboards overcount real failures, retry logic can treat user cancellations as retryable failures, and consumers must inspect history payloads to identify cancellations.