Compensation Marker
The rewind marker (◀◀) that designates an activity as a compensation handler — executed only to undo a completed activity, never by normal flow.
An activity marked for compensation is the undo recipe of another activity: linked from that activity's Compensation Boundary Event via a dotted association, it stays outside the normal flow entirely. It runs only when compensation is thrown after its partner completed.
When to use and avoid
When to use
To define the business inverse of every consequential step: cancel booking, refund charge, reverse posting.
In transactions and sagas, where cancel/compensate protocols invoke them automatically.
One handler per activity — precise, targeted undo.
When NOT to use
For work reachable by normal sequence flow — handlers can't be wired into the flow.
When the activity's effect has no meaningful inverse — compensation cannot invent one.
As generic cleanup unrelated to a specific completed activity.
Business example
The undo recipe for a hotel booking

Open this example in the HEFLO process editor and explore the diagram from the inside.
Open in the HEFLO editor →Step by step
- Cancel hotel booking (highlighted, rewind marker) hangs off the booking task via the dotted association — outside the normal flow.
- It sleeps through normal execution.
- When payment declines and compensation is thrown, the engine invokes it to undo the completed booking.
Differences
Compensation handler vs exception path
An exception path (from an error boundary) handles a step that *failed while running*. A compensation handler undoes a step that *succeeded* but must be reverted later. Failure → exception; retroactive undo → compensation.
FAQ
Why can't it have incoming sequence flows?
By spec: compensation activities are invoked exclusively by the compensation mechanism, never by tokens.
Does it receive the original activity's data?
Yes — engines provide the completed activity's snapshot so the undo can reference exactly what was done.