Fair catch-up

Shipped
alias catch_up

Boosts under-assigned recipients to repay fairness debt over a window.

Example

How Fair catch-up decides — the pool is evaluated and the winner is assigned. Each strategy selects differently.

type == "lead"selectedTriggerNew LeadWebhookScoreFair catch-upStrategyae-westscore 96ae-eastscore 81centralscore 73Assigned
Show the code
// Fair catch-up selects from the pool and assigns.
engine.Route(ductor.Route{
Match: `routable.type == "lead"`,
Strategy: "fair_catchup",
Pool: "sales-team",
})
 
// Durable, observable, exactly-once.
decision, err := engine.Dispatch(ctx, routable)

How it works

Fair distribution with catch-up compensation: recipients that missed earlier assignments are boosted until their share evens out across the window. Keeps long-run distribution fair even after outages.

WeightedStateful