Skip to main content

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 each workflowType you emit, you can declare:
  • A display label. query_send renders as “Query send”.
  • The expected steps, in order. This is what turns silence into evidence: declare order → pick → ship and a delivery that never reported ship shows that step as never started, rather than quietly omitting it.
  • A default deadline, in minutes from the start of the delivery.
Each of these accepts a "*" entry that applies to any kind of work you did not list explicitly.
Steps are declared per kind of work, not per project. A same-day order and a subscription renewal can have different pipelines, and flattening them into one list would show every delivery the wrong steps.

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 a high 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.
If none of the three produces a deadline, the delivery is simply not tracked for timeliness. It still appears, still records its steps, still contributes to failure counts — it just has no on-time verdict and no deadline timer.
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.

Reading deliveries back

Once configured, the same vocabulary drives the read API:

Next steps

With the shape described and the numbers flowing, the last step is letting WHAWIT act on what it finds. See Auto-recovery and failure modes.