Every order either moves or gets a reason.
Kutu is an order exception workflow for a small online shop. Each order passes intake, validation, deduplication and a stock check. Anything that cannot ship waits in an exception queue with its cause attached, and the ops team gets one summary alert.
Eight demo orders run inside this page. This is a workflow prototype modelled on an n8n flow: nothing connects to n8n, ships a parcel or sends a notification.
demo run
- Orders in
- 8
- Ready (simulated)
- 4
- In exception queue
- 4
- Duplicates caught
- 1
Documented result of one full demo run.
Tick t+28
The conveyor
Teal belts carry an order forward. Striped chutes drop it into the exception queue with the reason attached. Inspect any station to see its rule and the JSON it handled.
Key
- Pass belt
- Exception chute
- Order on a station
- Failed or escalated
Intake
One item per order from the demo batch
- Received
- 8
Validate
Required fields and a whole-number qty
- Passed
- 6
- Held
- 2
Holds drop to the exception queue
Deduplicate
key = email|sku|qty
- Passed
- 5
- Held
- 1
Holds drop to the exception queue
Stock check
stock[sku] >= qty, two lookup tries
- Reserved
- 4
- Held
- 1
- Failed
- 0
Holds and failures drop to the exception queue
Ready for fulfilment
Simulated: no shipment is created
- Orders
- 4
KT-1041, KT-1043, KT-1044, KT-1046
Exception queue
Retry from the holding station, max 3 attempts
- Open
- 4
- Escalated
- 0
- Review
- 0
- Resolved
- 0
Team alert
One summary per run, not sent
- Message
- Composed
- Sent
- No
Eight demo orders
Each label shows where its order ends in the documented demo run.
-
KutuZ3
KT-1041
Canvas tote, small
Ready (simulated)
-
KutuZ1
KT-1042
A5 dot notebook
Held: missing field
-
KutuZ5
KT-1043
Clamp desk lamp
Ready (simulated)
-
KutuZ2
KT-1044
Fig wax candle
Ready (simulated)
-
KutuZ4
KT-1045
Stoneware mug
Held: out of stock
-
KutuZ4
KT-1046
A5 dot notebook
Ready (simulated)
-
KutuZ5
KT-1047
Clamp desk lamp
Held: duplicate
-
KutuZ3
KT-1048
Canvas tote, small
Held: invalid quantity
Step inspector
Validate, order KT-1042
Example from the documented run.
Input
{
"orderId": "KT-1042",
"email": "deniz.aral@example.com",
"sku": "KB-NOTE-A5",
"item": "A5 dot notebook",
"qty": 3,
"shipTo": {
"postcode": "",
"zone": "Z1"
}
}
Rule
required = [orderId, email, sku, qty, shipTo.postcode, shipTo.zone]
empty required field -> hold "missing_field"
qty !~ /^[1-9][0-9]*$/ -> hold "invalid_qty"
all checks pass -> route to Deduplicate
Output
{
"valid": false,
"errors": [
"shipTo.postcode is empty"
],
"route": "exception",
"reason": "missing_field"
}
demo stock
| SKU | Item | Start | Available |
|---|---|---|---|
| KB-TOTE-S | Canvas tote, small | 6 | 4 |
| KB-NOTE-A5 | A5 dot notebook | 10 | 5 |
| KB-LAMP-02 | Clamp desk lamp | 3 | 2 |
| KB-CANDLE | Fig wax candle | 8 | 4 |
| KB-MUG-01 | Stoneware mug | 2 | 2 |
Run log
- t+28Team alert composed for 4 unresolved exceptions. Not sent: prototype.
- t+27KT-1048 held at Validate: qty "2x" is not a whole number.
- t+25KT-1047 held at Deduplicate: same key as KT-1043.
- t+22KT-1046 reserved 5 of KB-NOTE-A5; ready (simulated).
- t+18KT-1045 held at Stock check: needs 6, 2 available.
- t+14KT-1044 reserved 4 of KB-CANDLE; ready (simulated).
- t+10KT-1043 reserved 1 of KB-LAMP-02; ready (simulated).
- t+06KT-1042 held at Validate: shipTo.postcode is empty.
- t+04KT-1041 reserved 2 of KB-TOTE-S; ready (simulated).
Exception queue
Retry re-runs an order from the station that held it. A third failed attempt escalates it. Only KT-1048 has a demo fix.
| Order | Reason | Held at | Attempts | Status | Actions |
|---|---|---|---|---|---|
| KT-1042 | Missing fieldshipTo.postcode is empty | Validate | 1 of 3 | Held: missing field | |
| KT-1045 | Out of stockneeds 6, 2 available | Stock check | 1 of 3 | Held: out of stock | |
| KT-1047 | Duplicatesame key as KT-1043 | Deduplicate | 1 of 3 | Held: duplicate | |
| KT-1048 | Invalid quantityqty "2x" is not a whole number | Validate | 1 of 3 | Held: invalid quantity |
No order has been held yet. Run the workflow to fill the queue.
Team alert preview
Kutu order exceptions: 4 unresolved.
- Missing field (1): KT-1042
- Out of stock (1): KT-1045
- Duplicate (1): KT-1047
- Invalid quantity (1): KT-1048
Not sent: prototype. Composed at t+28.
A production build starts with three decisions.
- SourcesWhere orders come from, and the exact shape each payload takes when it arrives.
- RulesWhich problems hold an order, which get an automatic fix, and how many retries a failure earns.
- AlertsWhich channel the team watches, and who owns each reason in the queue.
Minimolo designs and builds n8n workflows for operations teams. Scope, rules and timeline are agreed in writing first.