Skip to main content

Workflow Engine

The Workflow Orchestration Engine is a core component of Qarion, enabling users to define and execute complex business logic visually. It is built as a graph-based execution system.

Architecture

1. Graph Model

Workflows are represented as Directed Acyclic Graphs (DAGs) stored in JSONB.

  • Nodes: Represent steps (e.g., Action, Decision, delay).
  • Edges: Represent transitions between steps.

2. Execution Loop

The engine uses a stateless execution loop.

  1. Hydration: Load the workflow instance and definition.
  2. Validation: Verify the current state and inputs.
  3. Step Execution: Execute the logic for the current node.
  4. Transition: Determine the next node(s) and update the instance state.
  5. Persistence: Save the new state to the database.

3. Hybrid Access Workflows

Our workflows support a "Hybrid Access" pattern, where steps can be automated (system actions) or manual (user approvals).

  • Approvals: When a workflow hits an approval step, it enters a SUSPENDED state until a user provides input.
  • Resumption: Upon approval, the engine "hydrates" the context and resumes execution from the next node.

Key Components

Dispatchers

The Dispatcher Bridge Pattern is used to trigger workflows from various events (API calls, Webhooks, Schedules). It decouples the trigger source from the execution engine.

Action Handlers

Each node type has a corresponding handler in the backend. These handlers are registered via a plugin system, allowing easy addition of new step types.

Hydration Traps

Standard #330: Context Preservation

A critical challenge in long-running workflows is context preservation. We strictly serialize all necessary context (variables, decisions) into the execution state to ensure that resumption (which might happen days later on a different server) has all required data.

Shadow NULL Attribute Trap

We enforce strict checks to ensure that decision nodes do not reference deleted keys or missing foreign keys, preventing runtime failures in active workflow instances.