← All tests

R1.5 — POSID-NNNNN daily sequence (prod)

2026-04-22 on prod. Order numbers now follow spec §8.8 — POS{configId}-{seq}, zero-padded, reset at midnight in the tenant's local timezone. Atomic advance via UPSERT+RETURNING inside a transaction so concurrent cashiers never collide. Falls back gracefully to Odoo's default name if sequencing fails, so a flaky sequence DB can't block a sale.

Shipped + manually verified on prod. Gate 1 local: 3/3 passed (format helper, DAO round-trip incl. 5-way concurrency + daily reset, SSR smoke). Gate 2 prod: end-to-end operator validation — ringing real orders on get-coffee.nixtech.app/cafe/pos/register/6 printed POS06-0001 then POS06-0002. Prod cafe.pos_sequences row below confirms next_seq=3 after two orders (each advance is atomic).
42/42 regression tests green on prod (phase1 + m1 + phase2-sso-outdoor + phase2-cafe-multishop) — no regressions from the R1.5 push or its follow-up infra fixes.

01Prod DB evidence — cafe.pos_sequences✓ advance works

pos_config_id | business_date          | next_seq | updated_at
--------------+------------------------+----------+---------------------------
           6  | 2026-04-22 (local PNH) |    3     | 2026-04-22T13:21:17.862Z

next_seq=3 means two orders were issued (1 and 2) with atomic advance. Each order's pos.order.name and pos_reference in Odoo carry the NIX-issued POS06-0001 / POS06-0002 — receipts print it, audit has it.

02Gate 1 — Format + DAO concurrency✓ 14 assertions

Loading…
Loading…

03Infra fixes that had to land alongside R1.5

The order path was long-cold-code before R1.5 forced end-to-end exercise. Several fires revealed themselves during Gate 2 (in order of discovery):

Takeaway: the Cafe production path through Hyperdrive is rich with surprises compared to local dev. Every new surface that touches DB-via-Hyperdrive now gets a transaction-wrap audit and a safer client JSON parser by default.