Flowrensic™

Durable execution forensics

Every workflow
leaves a trace.

The bugs your tests missed are in the event history. Flowrensic helps you read it.

Exhibit A · order-42 · 21 events

status COMPLETED

  1. WorkflowExecutionStarted
  2. WorkflowTaskScheduled
  3. WorkflowTaskStarted
  4. WorkflowTaskCompleted
  5. ActivityTaskScheduled chargeCard
  6. ActivityTaskStarted chargeCard
  7. WorkflowExecutionSignaled cancelOrder
  8. WorkflowTaskScheduled
  9. WorkflowTaskStarted
  10. WorkflowTaskCompleted
  11. ActivityTaskCompleted chargeCard
  12. WorkflowTaskScheduled
  13. WorkflowTaskStarted
  14. WorkflowTaskCompleted
  15. ActivityTaskScheduled reserveStock
  16. ActivityTaskStarted reserveStock
  17. ActivityTaskCompleted reserveStock
  18. WorkflowTaskScheduled
  19. WorkflowTaskStarted
  20. WorkflowTaskCompleted
  21. WorkflowExecutionCompleted

#7 WorkflowExecutionSignaled cancelOrder

Found one. The customer cancels while the card is still being charged. Nothing in the code expected this order.

Illustration. One made-up run, not a real customer workflow.

What hides in there

Each one passes tests and ships.

01

Logical races

Domain rules that quietly break under an ordering no test ever ran.

02

Slow or surprising activities

An activity runs long, retries, or finishes out of order, and the workflow lands somewhere you never designed for.

03

Initialization races

A signal arrives before setup finishes and changes state that isn't there yet.

04

Dangling handlers and promises

Work that outlives the run, or a rejected promise that leaves it stuck in RUNNING.

05

Two-store drift

The workflow and an external store, or another workflow, fall out of sync.

06

Long histories

Runs that burn billable actions and grow too big for the UI to open.

Works alongside Temporal, Cadence, Restate, Resonate, DBOS, Inngest, Azure Durable Functions and AWS Step Functions.