Shipped 2026-05-16 — the final v0.2 slice. Customer receipts now print the sequence tail
(e.g. 0043) as a big/bold/centered block right under the store header, so
customers spot their order at a glance when staff calls the number. The full id
(POS07-0043) stays on the receipt below.
POS07-0043, sequenceNo=43) from the live API → handed the response to
buildNativeReceipt + renderToString → confirmed the big "ORDER #"
block + 0043 in 40px / weight 900 are in the rendered HTML, with the existing
small Order: POS07-0043 line preserved below. Back-compat probe: a synthesized
historical order without sequenceNo renders the receipt without the new block —
old reprints look identical.
/cafe/api/cafe/orders — already returned sequenceNo in the response, so the post-payment success modal builds with the new block out of the box./cafe/api/cafe/orders/[orderId] — now also exposes sequenceNo. Verified end-to-end against a real prod order. The reprint flow (/cafe/orders → preview) gets the new block.buildNativeReceipt — derives sequenceTail using the same padding rule as formatPosOrderNumber (4-digit zero-pad up to 9999; raw integer beyond). Null/0/missing input → null → block silently doesn't render./cafe/api/cafe/orders/[id] response includes sequenceNo (real prod order; sequenceNo=43 round-trips)buildNativeReceipt → KhmerReceipt HTML has the big "ORDER #" label + 0043 at 40px / weight 900 + the existing small Order: POS07-0043 line preserved/cafe/orders page renders without 5xx (regression sanity for the reprint flow)Raw: 01-render-probe.json · 02-back-compat-probe.json · result.json
| test-phase1-prod.mjs | 11/11 |
| test-phase2-sso-outdoor-prod.mjs | 6/6 |
| test-phase2-cafe-multishop-prod.mjs | 6/6 |
| test-m1-prod.mjs | 10/10 |
| test-r7-prod.mjs | 14/14 |
| test-r8-prod.mjs | 4/4 |
nix-cafe — commit 8037954
components/receipt/khmer-receipt.tsx · lib/native-receipt.ts ·
app/api/cafe/orders/[orderId]/route.ts
Slice H is the last shippable item in the v0.2 batch. 8 slices shipped over 2026-05-15→16: A (quick wins), B (auth-expiry bug), C (terminal polish), D (cashier↔shop integrity), E1 (Starter Cash In/Out), E2 (close-shift Odoo-style + Daily Sale CSV), F (Payment Methods rework), G (Customer Display cross-device + slideshow), H (receipt big number). Remaining v0.2 items are parked pending Narong's input: H4 (spec being finished), H2.3 / H5.9 / H5.12 (unfinalized), and the H2.1 shop-linking / Pro POS per-register filter pieces (wait on H2.3 banking diagram).