Ringing an order, naming what something actually went for, and settling a table of four into four receipts that add up. Speed is a correctness property here. A flow that is thorough but slow gets worked around, and a worked-around flow enforces nothing.
The floor dims. What needs you does not.
Iced latte is out because the milk is. It stays on the grid, hatched and unpressable, rather than disappearing.
The rail is the part that must never be occluded. The reason a counter works around a flow is that the flow costs them their view of the room. The floor is the host; the sheet is a guest on it.
Cancel becomes a gate once it costs something. On an empty sheet, Cancel closes. With two items rung, it states that two lines will be discarded. This is the only place in the product where backing out earns friction.
The counter types what it actually went for. The system works out whether that was a discount or an extra.
Nobody at a counter thinks "that was 220 off". They think "it went for 350". Asking for the delta makes them subtract with a queue behind them, and subtractions done under a queue go wrong. So the box takes the real number and the arithmetic is ours.
Below the marked price it is a discount; above it, an extra. Never both, and the item's own price is never edited — which is what keeps the catalogue honest.
A discount can sit on the whole bill. An extra cannot, because the customer's copy never prints the word "extra" — so a markup with no item to sit on cannot be shown, and an unassigned one blocks the sale.
A bill-level extra spread across three lines sums to the target exactly, by largest remainder in minor units. Plain rounding leaves a receipt a piaster short and somebody eventually notices.
The same box, driven by a named reason instead of a number.
Picking a reason fills the box and writes the reason onto the line. The counter chooses why, and the number follows — instead of typing a number and leaving the reason to somebody's memory.
A reason above the owner's threshold does not apply itself. It becomes a request, it says so at the control, and — since everything blocks overnight — it says how long the wait will be rather than spinning.
One visit, three seats, two phones, four people. One bill that breaks into four.
The toast names what was recorded and reads like the button that produced it. Never "success". And it only claims the seats are free because the server actually freed them — a screen may only state a consequence the server produces.
Three of these are defects measured in a sibling product, logged against the programme.
| # | Rule | Why it is written down |
|---|---|---|
C1 | Blank in a sold-for box means as marked, never free. | An empty box must never zero a line. |
C2 | The item's own price is never edited from the counter. | A price typed at a till is how a catalogue stops being true. |
C3 | A bill-level extra is impossible; an unassigned one blocks the sale. | The customer's copy cannot print a markup with no item under it. |
C4 | A split must sum to the whole exactly, or no total is shown. | Largest remainder in minor units. Plain rounding loses a piaster and somebody notices. |
C5 | Every tender is kept, per method. | A sibling product computes the breakdown, sends it, and drops it — so its day journal shows a permanently zero transfer total. |
C6 | One validated payment-method list, checked at the boundary. | The same sibling writes two values nothing else recognises, because nothing validates them. |
C7 | Cashback is validated by the server before it is offered. | An offer the server then refuses is an argument at the desk. |
C8 | Cancel is a gate only when it discards something. | Friction that fires on an empty sheet trains people to click through it. |