chesterdocs

#Process execution

Chester executes a deployed process event-driven, distributing each step to its workers.

You do not operate the engine directly. What follows is the behaviour that shows up in what you model and in what you see in monitoring.

#What happens to a step that fails

The detail page of a failed run of "Order to invoice", marked DEV: (1) the error banner "Step 'Fetch customer' failed" with "fetch failed", "Jump to error" and "Try again …"; (2) the Flow · live state list — Order received done, Fetch customer failed, the gateway and the steps after it not reached; (3) the selected step's card with its system Northwind ERP, adapter Northwind REST API, action Fetch customer and the button "Run element again …".

Opening a run shows what each step did. A step that fails is retried automatically with a growing delay; when its attempts run out the run stops here, and you can correct the input and retry it by hand.

Three retries by default — four attempts in all — and never more than ten. A broken expression or an incomplete configuration skips the retry loop entirely and goes straight to the stopped state, because a second attempt would fail identically. Only steps that call a system — service tasks, send tasks, message throws — are retried automatically; other steps stop at their first failure.

#A step may run more than once

Chester guarantees that every step is delivered at least once, not exactly once. Under a retry or a restart, a step can be attempted again.

This matters when you model something with an outside effect. "Create an invoice" should be written so that running it twice does not produce two invoices — by using an identifier the external system can recognise, for example. Chester deduplicates what it can, but only the external system knows whether two calls are the same act.

#Failures are retried, then set aside

A failed step is retried automatically with a growing delay between attempts — by default three retries, and never more than ten. A step that still fails is stopped and surfaced in monitoring, where you can correct the input and retry it by hand.

The Audit tab of the failed run: Instance ID, Status ERROR, Started 01.10.2026 00:43:35, Ended "running", and "10 logged" events.

Retrying is the default, including for an error the external system will return again. A request the external system rejects is retried like any other failure. If a call should not be repeated, the process has to express that — by checking the response and routing the failure itself, rather than relying on Chester to tell a permanent refusal from a temporary one.

The exception is a broken expression, which stops immediately: it is deterministic, so a second attempt would fail identically.

#Waiting does not hold anything open

A process waiting for a person, a timer or an incoming message is not occupying a worker. It is parked until the thing it waits for arrives, so a process can sit at an approval step for days without that costing anything to keep alive.

#The first event wins at an event-based gateway

At an event-based gateway the process waits for all of the following events at once, and the first one to happen decides the path. The others stop waiting at that moment; one that arrives later is ignored, and nothing continues on its path. In the instance view the event that won continues its path, and the events that lost show as interrupted.

#Parallel branches really are parallel

Branches and multi-instance loops run at the same time, potentially on different workers. Their results are collected independently, so two branches writing their own outputs cannot overwrite each other.