Overview
The delivery primitive ships with no vocabulary of its own.workflowType is a free string, step names are whatever you send, and no enum anywhere names an industry.
That neutrality has a consequence: until you describe your business, WHAWIT can only show you what it observed. It cannot tell you that a step was missing, because it does not know which steps should have been there.
The delivery profile is where you say so. Everything in it is optional, and the product works without it.
Configure it in the app at Reliability → Delivery Settings
(
/ops/deliveries/settings), also linked from the header of the delivery list. Or set it
through PUT /deliveries/profile.What you can set
Naming
What one unit of work is called, singular and plural — “Order” / “Orders”, “Pay run” / “Pay runs” — and what you call the customers you deliver to: “Tenant”, “Account”, “Retailer”, “Store”. These labels appear throughout the delivery screens. Left blank, WHAWIT falls back to “Delivery” / “Deliveries” and “Tenant”.Kinds of work
For eachworkflowType you emit, you can declare:
- A display label.
query_sendrenders as “Query send”. - The expected steps, in order. This is what turns silence into evidence: declare
order → pick → shipand a delivery that never reportedshipshows that step as never started, rather than quietly omitting it. - A default deadline, in minutes from the start of the delivery.
"*" entry that applies to any kind of work you did not list explicitly.
Reliability target
The rate you hold yourself to — the reference line on the dashboard. Defaults to 99.99%. You can also set the severity of the incident WHAWIT raises when a delivery misses its deadline. Without it, missed deliveries raise ahigh severity incident.
The live preview
The settings screen renders a sample delivery from the steps as you type them, using the same component the delivery list uses. You see the exact step strip your rows will show — including a declared step that never reported. This is deliberate. Configuring a pipeline blind is how a wrong one survives unnoticed; here a wrong pipeline is visibly wrong before you save.Where deadlines come from
A delivery’s deadline is resolved in this order, first match wins:1
The event itself
expectedBy on the outcome event. Always wins — you knew the actual promise when you
created the work.2
The client override
deliveryDeadlines on a specific end customer’s SLA profile, for those cases where one
customer negotiated something different.3
The project default
deliveryDeadlines on the delivery profile, keyed by workflowType with "*" as the
fallback.The per-client override is respected by the backend but has no configuration screen
today. It can only be set through the API. The project default covers the normal case,
and that is what the settings screen edits.
What happens with no profile at all
Nothing breaks. Specifically:API
endpoint
Returns the profile for the project, or
null when none has been set. Takes project as
a query parameter, defaulting to the x-project-urn header.endpoint
Creates or updates the profile. Send only the fields you want to change.
number
A fraction between 0 and 1, not a percentage.
0.999 is three nines.Record<string, number>
Minutes from the start of the delivery, keyed by
workflowType, with "*" as the
fallback.
