Playbook
The actual decision tree the shadow engine runs — generated live fromcs_policy.decide() and cs_labels_spec.LABELS on every request, nothing
hand-typed. 99 nodes · 94 edges · 17 label branches.
Click any node for its full decide() output.
Always-on rulesNot branches. Checked before and around the (label × rung) table, for every label, at every rung. Detached on purpose — a message never “goes down” one of these instead of classifying.
LEGAL_THREAT
fires from ANY rung
fires from ANY rung
always
ESCALATE ●
THREATENS_CHARGEBACK
fires from ANY rung
fires from ANY rung
clear ultimatum
REPLY_INFO ●
mentioned, unclear
REPLY_INFO ●
£200 circuit breaker
applies AFTER any money action
applies AFTER any money action
order £150 (≤ £200)
FULL_REFUND · 150.00 GBP ●
order £350 (> £200)
ESCALATE · 350.00 GBP ●
Promise ledger override
applies for ANY label
applies for ANY label
open £80 refund promise on file
EXECUTE_PROMISE · 80.00 GBP ●
The flow
Inbound customer
message
message
classify
Classify message
→ 1 of 17 labels
→ 1 of 17 labels
opens a case
Opens a case
15 labels
15 labels
ADDRESS_CHANGE
▸ ADDRESS_CHANGE
at rung 0 · NEW
SUPPLIER_REQUEST
ACCEPTS_OFFER · at rung 0 · NEW
ESCALATE ●
REFUSES_OFFER · at rung 0 · NEW
ESCALATE ●
ASKS_REFUND
▸ ASKS_REFUND
we have not asked why yet
we have not asked why yet
at rung 0 · NEW
ASK_REASON
ACCEPTS_OFFER · at rung 0 · NEW
ESCALATE ●
REFUSES_OFFER · at rung 0 · NEW
ESCALATE ●
reason known · not dispatched
reason known · not dispatched
at rung 0 · NEW
OFFER_DISCOUNT_10_KEEP · 10%
ACCEPTS_OFFER · at rung 2 · KEEP_10_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 2 · KEEP_10_OFFERED
OFFER_DISCOUNT_20_KEEP · 20%
ACCEPTS_OFFER · at rung 3 · KEEP_20_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 3 · KEEP_20_OFFERED
OFFER_PRICE_MINUS_SHIPPING
ACCEPTS_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
FULL_REFUND ●
reason known · already in transit
reason known · already in transit
at rung 0 · NEW
WAIT_FOR_ARRIVAL
ACCEPTS_OFFER · at rung 0 · NEW
ESCALATE ●
REFUSES_OFFER · at rung 0 · NEW
ESCALATE ●
ASKS_REPLACEMENT
▸ ASKS_REPLACEMENT
at rung 0 · NEW
OFFER_REPLACEMENT
ACCEPTS_OFFER · at rung 1 · REPLACEMENT_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 1 · REPLACEMENT_OFFERED
OFFER_DISCOUNT_10_KEEP · 10%
ACCEPTS_OFFER · at rung 2 · KEEP_10_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 2 · KEEP_10_OFFERED
OFFER_DISCOUNT_20_KEEP · 20%
ACCEPTS_OFFER · at rung 3 · KEEP_20_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 3 · KEEP_20_OFFERED
OFFER_PRICE_MINUS_SHIPPING
ACCEPTS_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
FULL_REFUND ●
AUTHENTICITY_DOUBT
▸ AUTHENTICITY_DOUBT
at rung 0 · NEW
REPLY_INFO ●
CANCEL_REQUEST
▸ CANCEL_REQUEST
at rung 0 · NEW
SUPPLIER_REQUEST
ACCEPTS_OFFER · at rung 0 · NEW
ESCALATE ●
REFUSES_OFFER · at rung 0 · NEW
ESCALATE ●
DAMAGED
▸ DAMAGED
at rung 0 · NEW
OFFER_REPLACEMENT
ACCEPTS_OFFER · at rung 1 · REPLACEMENT_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 1 · REPLACEMENT_OFFERED
OFFER_DISCOUNT_10_KEEP · 10%
ACCEPTS_OFFER · at rung 2 · KEEP_10_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 2 · KEEP_10_OFFERED
OFFER_DISCOUNT_20_KEEP · 20%
ACCEPTS_OFFER · at rung 3 · KEEP_20_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 3 · KEEP_20_OFFERED
OFFER_PRICE_MINUS_SHIPPING
ACCEPTS_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
FULL_REFUND ●
LEGAL_THREAT
▸ LEGAL_THREAT
at rung 0 · NEW
ESCALATE ●
NOT_ARRIVED
▸ NOT_ARRIVED
at rung 0 · NEW
REPLY_INFO ●
OFF_SCRIPT
▸ OFF_SCRIPT
at rung 0 · NEW
REPLY_INFO ●
PRODUCT_QUESTION
▸ PRODUCT_QUESTION
at rung 0 · NEW
REPLY_INFO ●
SIZING_QUESTION
▸ SIZING_QUESTION
at rung 0 · NEW
REPLY_INFO ●
THREATENS_CHARGEBACK
▸ THREATENS_CHARGEBACK
at rung 0 · NEW
REPLY_INFO ●
WHERE_IS_ORDER
▸ WHERE_IS_ORDER
at rung 0 · NEW
REPLY_INFO ●
WRONG_ITEM
▸ WRONG_ITEM
at rung 0 · NEW
OFFER_REPLACEMENT
ACCEPTS_OFFER · at rung 1 · REPLACEMENT_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 1 · REPLACEMENT_OFFERED
OFFER_DISCOUNT_10_KEEP · 10%
ACCEPTS_OFFER · at rung 2 · KEEP_10_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 2 · KEEP_10_OFFERED
OFFER_DISCOUNT_20_KEEP · 20%
ACCEPTS_OFFER · at rung 3 · KEEP_20_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 3 · KEEP_20_OFFERED
OFFER_PRICE_MINUS_SHIPPING
ACCEPTS_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
FULL_REFUND ●
WRONG_SIZE
▸ WRONG_SIZE
at rung 0 · NEW
OFFER_REPLACEMENT
ACCEPTS_OFFER · at rung 1 · REPLACEMENT_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 1 · REPLACEMENT_OFFERED
OFFER_DISCOUNT_10_KEEP · 10%
ACCEPTS_OFFER · at rung 2 · KEEP_10_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 2 · KEEP_10_OFFERED
OFFER_DISCOUNT_20_KEEP · 20%
ACCEPTS_OFFER · at rung 3 · KEEP_20_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 3 · KEEP_20_OFFERED
OFFER_PRICE_MINUS_SHIPPING
ACCEPTS_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
EXECUTE_PROMISE ●
REFUSES_OFFER · at rung 4 · PRICE_MINUS_SHIPPING_OFFERED
FULL_REFUND ●
answers an offer
Answers an offer
2 labels
2 labels
ACCEPTS_OFFER
▸ ACCEPTS_OFFER
at rung 0 · NEW
ESCALATE ●
REFUSES_OFFER
▸ REFUSES_OFFER
at rung 0 · NEW
ESCALATE ●
Generated from cs_policy.py (last modified 2026-09-04 08:17:05 UTC) and
cs_labels_spec.py (last modified 2026-08-14 19:55:07 UTC) — every node's action, amount, rung and
reason string above is the live return value of cs_policy.decide(), and the 17
label branches come straight from cs_labels_spec.LABELS. This screen does not write to the
database and cannot send or move anything.