# MVP-TASK-036 — Journey 002 commercial service loop

**Status:** Implemented  
**Parent:** MVP-JRN-002 and its linked story scenarios

## Objective and required behavior

Demonstrate empty cart, rapid taps, review/metadata, successful checkout, automatic next cart,
Queued → Preparing → Ready → Delivered, active removal, sales update, and durable history.

## Scope, areas, and non-goals

Playwright owns visible flow; a linked integration assertion owns durable history. Fix only defects
within journey requirements. No live provider or exhaustive failure matrix.

## Evidence and acceptance

Test title includes `MVP-JRN-002`; direct scenario proofs carry their IDs. Accept when real layers
and deterministic fake complete the loop without fixed sleeps and history integration passes,
traceability is current, and inherited DoD passes. Handoff records evidence split.

## Implementation record

`tests/e2e/journeys.spec.ts` carries one headline test tagged `MVP-JRN-002` and the exact linked
scenario IDs it directly proves. The authenticated browser starts from the already-present empty
cart, builds a mixed cart with rapid taps of two products, corrects it during review, attaches queue
number, note, and take-away choice, and completes one real commercial finalization through the
deterministic fake. It receives the next empty cart, sees the live ticker and its API source grow by
exactly the order's gross, then advances the queued slip through `Preparing`, `Ready`, and
`Delivered` until it leaves the active-queue read, all without fixed sleeps.

Evidence split: Playwright owns the visible workflow (cart, checkout response, ticker, queue states,
active removal, and the finalized order's captured metadata row), while durable append-only history
is owned by the linked real-PostgreSQL `order-history.integration.test.ts` suite rather than being
re-proven unnaturally through the browser. Fixture lifecycle follows the MVP-JRN-001 pattern: the
shared-database order temporarily holds the oldest queue-entry time to expose its detailed slip and
teardown always restores a current time, the mutable products are deleted, and the immutable
finalized order remains as history. Full inherited validation and hosted CI remain outstanding, so
the task is Implemented rather than Done.
