πŸ›οΈ

Customer Discovery & Checkout Suite

40-gate suite (C1–C39 + SC1) proving the complete customer journey: discovery β†’ checkout β†’ Stripe payment β†’ live GPS chain (C38) β†’ order tracking (C24–C30) β†’ order history (C31–C36) β†’ notifications (C37) β†’ SC1 cross-store commerce β†’ final integrity (C39). Gate C22 produces the certified order_id for the Lifecycle Suite. C38 emits evidence_digest; SC1 emits store_commerce_digest β€” both required by C39.

Certification chain: Discovery C1–C23 β†’ Stripe Payment C22 β†’ Order Lifecycle Suite (milestone evidence) β†’ C38 GPS Chain β†’ C24–C30 Tracking β†’ C31–C36 History β†’ C37 Notifications β†’ SC1 Cross-Store Commerce β†’ C39 Final IntegrityGate C22 β†’ certified order_id for Lifecycle Suite. C38 runs first in Domain H, emits evidence_digest. SC1 runs before C39, emits store_commerce_digest proving backend matrix + Rork runtime β€” C39 is blocked until both digests are present. Notifications are C37 / C37b / C37c.

Customer Discovery & Checkout Acceptance Suite

40 gates Β· 10 domains Β· Proves the full customer journey from discovery through tracking, history, and notifications

0

Passed

0

Failed

42

Pending

⏳ IN PROGRESS

Domain A β€” Location & Home Discovery

Β· C1
Β· C2
Β· C3
Β· C4

0/4 passed

Domain B β€” Merchant Discovery

Β· C5
Β· C6
Β· C7

0/3 passed

Domain C β€” Items, Modifiers & Cart

Β· C8
Β· C9
Β· C10

0/3 passed

Domain D β€” Group Ordering

Β· C11
Β· C12
Β· C13

0/3 passed

Domain E β€” Fulfillment & Recipient

Β· C14
Β· C15
Β· C16

0/3 passed

Domain F β€” Replacement Preferences

Β· C17

0/1 passed

Domain G β€” Pricing, Discounts & Payment

Β· C18
Β· C19
Β· C20
Β· C21
Β· C22
Β· C23

0/6 passed

Domain H β€” Customer Order Tracking (C38 GPS first, then C24–C30)

Β· C38
Β· C24
Β· C25
Β· C26
Β· C27
Β· C28
Β· C29
Β· C30

0/8 passed

Domain I β€” Customer Order History

Β· C31
Β· C32
Β· C33
Β· C34
Β· C35
Β· C36

0/6 passed

Domain J β€” Notifications (C37, C37b, C37c)

Β· C37
Β· C37b
Β· C37c

0/3 passed

Cross-Store Commerce β€” SC1 (requires C38; produces store_commerce_digest for C39)

Β· CS1

0/1 passed

Final Customer Integrity β€” C39 (requires C38 evidence_digest + SC1 store_commerce_digest)

Β· C39

0/1 passed

Certification chain: Discovery β†’ Checkout β†’ C22 Stripe Payment β†’ Order Lifecycle Suite (returns milestone evidence) β†’ Tracking C24–C30 β†’ History C31–C36 β†’ Final Integrity C37. Gate C22 produces the order_id consumed by Order Lifecycle Gate 6A.

Certification Status

C1–C39 + SC1. C38 (GPS chain) runs first in Domain H; SC1 (Cross-Store Commerce) runs before C39 and produces store_commerce_digest; C39 (Final Integrity) requires both C38 evidence_digest and SC1 store_commerce_digest. Notifications are C37/C37b/C37c. NOT_APPLICABLE allowed for Group Ordering, Gift, and Replacement only.

⏳ CORE IN PROGRESS
⏳ FULL IN PROGRESS

Core Checkout Certification β€” C1–C39

All gates must pass or be NOT_APPLICABLE. C39 requires C38 evidence_digest (non-null). NOT_APPLICABLE only valid for: Group Ordering (C11–C13, C23), Gift (C14), Replacement (C17), Loyalty (C21).

⚠ Gate C22 (Stripe Payment) must pass to certify.

Full Checkout Certification β€” C1–C39

Every gate must actively PASS β€” no NOT_APPLICABLE. Requires Group Ordering, Gift, Replacement, and Loyalty. C38 evidence_digest must be non-null.

Inspect / Replay Store β€” This selector does NOT limit SC1 certification scope. SC1 certifies every store from the frozen server manifest. Use this to replay a single store or filter evidence; the overall suite result reflects all stores.
πŸ”§

Suite Fixture Configuration

Target selectors are administrative, not discovery results. Merchant and Store list all eligible test entities regardless of customer location. C5 intentionally selects an out-of-range store to prove it is absent from the discovery API. Only the authoritative discovery API response determines what a customer can see.

πŸ›° Detected Device Location (read-only)

Click "Use Current Device Location" to detect GPS and reverse-geocode your area.

Administrative selector β€” not filtered by customer location

Administrative selector β€” may be out of range for negative C5 test

Target Customer Under Test β€” Rork account

Select the exact customer account currently logged into the Rork customer app. This customer will be authorized to retrieve the active certification run and submit runtime render evidence. This selector is administrative, like Target Merchant and Target Store. It is not affected by discovery location.

No Rork customer accounts found. Create one via the Rork phone-OTP signup flow first.

⚠ Select and apply the Rork customer currently logged into CustomerHome.

⚠ SIMULATED β€” coordinates for test customer, not detected from device. Apply Fixture to commit.

⚠ SIMULATED β€” negative sign required for western longitude (e.g. -76.1477 for Syracuse NY).

β€” simulates "Browse another area" (C1 discovery only)

Disabled. C1 will use fixture coordinates as the discovery source (marked SIMULATED above). Enable to simulate a customer overriding their discovery location.

Configure the fixture above before running gates.

Select a merchant and store to enable gate execution.

Certification Environment
⚠ Required before starting a run
Suite Run ContextNO ACTIVE RUN

Run ID

crun_1792436410717_tmuzi9

Test Customer

β€”

Select customer in fixture

Environment

⚠ not selected

Expires

β€”

Rork

Waiting for Rork

Latest Event

β€”

No fixture applied β€” configure and Apply Fixture first.

Expired Banner Cleanup (Part E)

run_id: crun_1792436410717_tmuzi9
πŸ”¬

Store Customer-Readiness Activation β€” Audit & Diagnostic

PENDING

Section 1 β€” Full Store Diagnostic

Click "Load Diagnostic" to fetch live store state.

Section 2 β€” Canonical Contract Clarifications

What are customer_discovery_enabled and customer_menu_ready, and how do they relate?
customer_discovery_enabled is the persistent admin-approval/intention flag. It is NEVER automatically mutated β€” not by readiness regression, not by menu changes, not by any automation. customer_menu_ready is a runtime readiness gate: set by updateStoreMenuReadiness() using the canonical resolveRuntimeMenu() source. Effective discoverability at request time = L1(Merchant.status=active) AND L2(discovery_enabled=true) AND runtime(menu_ready=true AND coords AND radius). If menu_ready regresses, the store hides immediately without rewriting discovery_enabled. When repaired, it returns automatically without admin re-activation.
Should customer_discovery_enabled be set back to false on readiness regression?
No. customer_discovery_enabled represents the admin's historical approval decision. A temporary menu problem (e.g. all items deleted accidentally) should not erase that intent. The store will be hidden immediately by checkStoreDiscoverability at request time because menu_ready=false. When the menu is repaired, the store returns automatically. Rewriting discovery_enabled on regression would require a second admin action to re-enable β€” that is the wrong tradeoff. Only permanent deactivation (via the Deactivation Workflow) should write discovery_enabled=false.
What does customer_menu_ready describe for a store_menu_shadow store?
It describes the canonical menu currently eligible for customer serving β€” i.e. what resolveRuntimeMenu() actually returns. For a shadow store (migration_state=store_menu_shadow), the runtime falls through to the shared legacy menu. Therefore customer_menu_ready reflects the shared legacy menu's eligible items β€” NOT the shadow menu's item count. A shadow store must NOT be marked customer_menu_ready=true based on its shadow item count, because the runtime does not yet serve that menu. Correct sequence: shadow validation β†’ promote to authoritative β†’ updateStoreMenuReadiness() now uses resolveRuntimeMenu(source=store_specific) β†’ customer_menu_ready=true.
Correct activation sequence for a new store
1. new Store β†’ customer_discovery_enabled=false (schema default β€” correct). 2. Load/import menu items into shadow menu. 3. Run validateStoreMenuShadow (all 9 gates pass). 4. Run promoteStoreMenuToAuthoritative β†’ migration_state=store_menu_authoritative + updateStoreMenuReadiness() auto-called (post-promotion fix applied) β†’ customer_menu_ready=true. 5. Admin verifies readiness gates (coords, radius, address, menu_ready=true). 6. Admin explicitly sets customer_discovery_enabled=true with audit stamps β†’ store becomes discoverable. No automation sets step 6; it is always a human decision.
Regression lifecycle proof
discovery_enabled=true + menu_ready=true β†’ discoverable. Menu_ready regresses to false β†’ store hides immediately (STORE_MENU_NOT_READY), discovery_enabled unchanged. Menu repaired β†’ menu_ready=true β†’ store returns automatically, no admin re-activation needed. If admin intentionally deactivates (discovery_enabled=false): store hidden regardless of menu_ready. Re-enable only through explicit admin action after all readiness gates pass.
What is the correct fix for the two new stores (Fast Food + Liquor A)?
Do NOT force customer_menu_ready=true for shadow-backed stores. Follow the normal migration workflow: Fast Food (initialized): run validateStoreMenuShadow β†’ shadow_comparison_passed β†’ promoteStoreMenuToAuthoritative (readiness auto-recalculated from store_specific source) β†’ admin enables discovery. Liquor Store A (shadow_comparison_pending): finish shadow validation first, then same path. After promotion, updateStoreMenuReadiness() (post-promotion fix) sets customer_menu_ready=true from the correct authoritative source.

Section 3 β€” Executable Proof (8 scenarios)

Includes three-layer model, regression lifecycle, and customer_menu_ready semantics. No writes to discovery fields.

IMPLEMENTED
EXECUTED
PROVEN
Load diagnostic first (Section 1).
Scenario A: discovery_enabled=false β†’ excluded from home discovery
Scenario B: discovery_enabled=false β†’ excluded from getStoresForAddress
Scenario C: discovery_enabled=false β†’ getRorkMenu blocked
Scenario D: Sibling Store unaffected by Liquor A state
Scenario E: L3 Store.status=closed is independent of L2 discovery_enabled
Scenario F: L1 Merchant suspension overrides all Stores regardless of L2/L3
Scenario G: Regression: menu_ready=false immediately hides store without rewriting discovery_enabled
Scenario H: customer_menu_ready semantics: shadow menu β†’ resolves shared_legacy, not shadow count
πŸ”’

Store-Specific Deactivation Workflow

PENDING
Contract: customer_discovery_enabled is the persistent admin-approval flag and is NEVER automatically mutated by readiness regression. Effective discoverability is always computed at request time: L1(Merchant.status=active) AND L2(discovery_enabled=true) AND runtime(menu_ready=true AND coords AND radius). If readiness regresses, the store hides immediately without rewriting this flag; when repaired it returns automatically.
πŸ›‘οΈ

Eligibility Model β€” Three-Layer Contract Tests

IMPLEMENTED
EXECUTED
PROVEN
PENDING
Layer 1
Merchant.status
active / paused / suspended / pending
Layer 2
Store.customer_discovery_enabled
true / false (admin gate)
Layer 3
Store.status
open / busy / paused / closed
Scenario A: Merchant suspended + Store open/discovery=true β†’ not discoverable
Scenario B: Merchant paused β†’ Store not discoverable
Scenario C: Store A discovery=false, Store B=true β†’ only B discoverable
Scenario D: Store A paused/closed does not alter Store B runtime
Scenario E: Store A runtime status does not leak to Store B on switch
Scenario F: Rork only receives eligible Stores with correct per-Store runtime status
Scenario G: Direct store-detail/menu access blocked for inactive Store/Merchant
πŸ†”

Item Identity Contract Certification

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves the platform-wide normalized item-identity contract. item_id is the canonical internal identity; sku is an external/business identifier that may legitimately differ.

Identity contract v2 rules:

  • item_id β‰  sku β†’ valid, never a conflict
  • item_id β‰  menu_item_id|id β†’ ITEM_IDENTITY_CONFLICT (fail closed)
  • Duplicate SKU within one Store β†’ AMBIGUOUS_SKU (fail closed)
  • Same SKU at sibling Stores β†’ each resolves from its own store-scoped menu record (store_id + menu_id); item_id may be shared as logical product identity across clones
  • Backfill never derives item_id from sku
  • Backfill never overwrites existing sku
🍺

Alcohol Checkout Pricing Diagnostic

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Key invariant: pricing availability β‰  permission to place an alcohol order

Customers must see subtotal, delivery, service fee, tax, and tip before completing age/compliance acknowledgement. Only Place Order is blocked β€” not pricing itself. This diagnostic proves whether that invariant holds.

v4: Items resolved via Menu.sections[].items[] β†’ item_id. No price submitted to API β€” server resolves authoritative customer price (base Γ— markup) from catalog. Submitting Menu.price (base only) causes PRICE_MISMATCH on R; omitting it lets the server validate identity alone. R must pass (success=true, subtotal>0, pricing_token) before A1/A2 execute. Read-only β€” no production mutations.

Fixture R β€” Restaurant control

Must be a non-alcohol food store with an authoritative menu.

Fixture A β€” Alcohol store (under test)

Should be an alcohol/liquor store where pricing currently fails.

Select both stores above.

Phase-1 Fail-Closed Regression Gate

8 live negative probes β€” proves no fallback has crept back in

What this proves

Each probe fires a live request engineered to trigger the dangerous pre-Phase-1 fallback path. A passing result confirms the backend rejected the probe with the exact Phase-1 error code β€” not a silent substitution. Run this after every backend deploy that touches createOrder, getCheckoutPricing, getRorkMenu, or merchantMenuBrowse.

Click Run Regression Gate to execute all 8 probes.

No data is mutated. All probes fire rejected requests and verify the rejection code.

Store ID Chain Assertion

Read-only Β· Rork cart store_id β†’ pricing request β†’ Base44 resolved

Identity Chain

Rork Cart
missing
β†’
Pricing Request
missing
β†’
Base44 Resolved
missing

Load evidence to evaluate chain. Requires an active suite run with C10 CLIENT_STATE and REQUEST_SENT phases submitted by Rork.

Backend Contract β€” Static Verification

Rules enforced by Base44 backend functions. Static proofs from reading getRorkMenu, getCheckoutPricing, and createOrder β€” not runtime assertions.

Rule A: getRorkMenu requires explicit store_idREQUIRED

If store_id is absent, the runtime menu resolver falls back to shared legacy menu and returns no store_id in response. Rork cannot derive store identity from the menu response β€” it must supply its own.

getRorkMenu L428: effective_store_id = selected_store_id || store_id || null

Rule B: Foreign-store rejected at getRorkMenu (403)REQUIRED

If store.merchant_id !== merchant_id in the request, getRorkMenu returns HTTP 403. Cross-merchant store access is blocked at the menu layer before any item is visible.

getRorkMenu L467–469: if (store && store.merchant_id !== merchant_id) return 403

Rule C: getCheckoutPricing fails closed on missing store_idREQUIRED

Without store_id or selected_store_id, the resolver returns STORE_ID_REQUIRED mapped to unavailable_reason=MERCHANT_LINK_MISSING. Base44 does NOT silently infer a store from merchant_id alone when store_id is absent.

getCheckoutPricing L283: errorCode = STORE_ID_REQUIRED when no store_id, no merchant_id, no items merchant_id

Rule D: Sibling-store substitution fails closed in getCheckoutPricingREQUIRED

Recovery only succeeds if merchant_id is present AND the merchant has stores. The recovery store must belong to the exact same merchant β€” a sibling store from a different merchant is never substituted.

getCheckoutPricing L114–155: fallbackStores = allStores.filter(s => s.merchant_id === candidateMid)

Rule E: Item identity resolved only inside that store's authoritative runtime menuREQUIRED

buildAuthoritativePriceMaps uses resolveStoreCommerceContext scoped to (merchant_id, store_id). Items are indexed by item_id/sku from that store's menu only β€” never from a sibling store, merchant-wide fallback, or name/position match.

resolveAuthoritativeItemPrice L110–113: resolveStoreCommerceContext(admin, { merchant_id, store_id })

Rule F: menu_id is server-derived; it does NOT substitute for missing store_idREQUIRED

The menu is resolved from the store_id + merchant_id pair. menu_id is an output of context resolution, not an input. Supplying menu_id without store_id does not route the request to the correct store.

resolveStoreCommerceContext: menu resolved after store context established; menu_id never read from request

Rule G: createOrder store_id rescue only within same merchantREQUIRED

If store_id is missing, createOrder auto-resolves by merchant_id. If store.merchant_id β‰  request merchant_id, the store is not used. Sibling stores from different merchants are never injected.

createOrder L928–935: resolvedStoreId = store_id || localStoreId; merchant_id rescue only from store.merchant_id match

Rule H: createCheckoutQuote auto-resolves store only as a fallback, not a replacementADVISORY

createCheckoutQuote L606–616: if !resolvedStoreId && merchantId, it does a targeted Store.filter({ merchant_id }) and takes the primary store. This fallback is for first-quote cache miss only β€” it does not override an explicit store_id sent by Rork. The certified Rork path must never exercise this branch; if C10 sees REQUEST_SENT.store_id = null, that fails client certification immediately.

createCheckoutQuote L606–616: auto-resolve only when storeId is null

Migration Gap β€” Root Cause (FIXED by Rork)

Before fix: Rork silently backfilled store_id from selectedStoreDetails / localStore / AsyncStorage β€” whichever store the customer last browsed β€” even when it did not originate the cart items. Base44 received a mismatched store_id, resolved a different runtime menu, and returned ITEM_IDENTITY_MISMATCH or STORE_NOT_FOUND. Rork showed "We couldn't calculate your order total."

After fix: resolvedStoreId is exclusively checkoutContextRef.current.cart_store_id. A cart with no store_id fails immediately with STORE_ID_REQUIRED_no_store_on_locked_cart. Item price fields are stripped from the wire payload.

Invariant: cart.storeId === REQUEST_SENT.store_id === BACKEND_RESULT.store_id

Scope: Read-only. No checkout APIs called, no data mutated, no production behavior changed. Evidence is fetched via an admin-authenticated server action (getCheckoutGateEvidence). Full runtime verification requires Rork to submit evidence from a live checkout attempt.

Domain A β€” Location & Home Discovery

πŸ“

Gate C1 β€” Location Acquisition & Browse-Area Override

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Two independent subtests. A certifies real device GPS and reverse-geocoding. B certifies deterministic fixture/override discovery for repeatable testing (C5 uses these simulated coords). Both must pass for C1 to be proven.

A β€” Live Device GPSsource must be DEVICE_GPS, never fixture
PENDING
B β€” Deterministic Fixture / Browse-Overridesource: FIXTURE (simulated)
PENDING

Apply a fixture first to enable Subtest B.

πŸ‘‹

Gate C2 β€” Greeting & Homepage State

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves: (DB) active greetings exist + global anonymous fallback present, (Resolver) named customer resolves greeting with zero unresolved tokens, (Resolver) anonymous falls back to global, (API) no raw template vars, (Rork) BLOCKED until Rork emits HomeGreetingRendered via recordCustomerHomeRenderEvidence with current run_id=crun_1792436410717_tmuzi9, source=base44, unresolved_tokens=0. run_id is mandatory β€” events from other runs are rejected.

πŸͺ

Gate C3 β€” Store Discovery v2

IMPLEMENTED
EXECUTED
PROVEN
PENDING

⚠ Prior C3 result for run crun_1785284793934_ofqwdo

INVALIDATED_WRONG_ENTITY_CONTRACT β€” run was MERCHANT_CANONICAL; cannot prove which Store was rendered

AuditEvent 6a694e20af9dbba1d78a2df0 and snapshot snap_1785286130418_4m3z5u1e are preserved for historical audit only.

C5–C10 must be re-run on a new v2 run because they depend on the store selected through discovery.

contract_version: store_discovery_v2. Proves: DB (Stores with own coords), API (one result per Store, two eligible Stores under one Merchant = two results, no phantom stores), Rork runtime (HomeStoresRendered with store_ids βŠ† snapshot.store_ids, every Store maps to correct Merchant β€” HomeMerchantsRendered cannot satisfy v2 C3), UI (API confirmed).

🏷️

Gate C4 β€” Categories & Promotional Banners

IMPLEMENTED
EXECUTED
PROVEN
PENDING

4-layer proof: DB (categories + banners, no expired in active set, field=active), API (chip/banner response, no phantoms, no expired), Rork runtime (HomeCategoriesRendered + HomeBannersRendered events with run_id=crun_1792436410717_tmuzi9 β€” run_id is mandatory, contract-shape alone is NOT proof), UI (API confirmed).

Domain B β€” Merchant Discovery

πŸ“

Gate C5 β€” Service Radius Eligibility

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Two-layer proof: Layer 1 (REFERENCE_ORACLE β€” DB haversine, informational only) + Layer 2 (PRODUCTION DISCOVERY β€” getHomeMerchants and getStoresForAddress, same path as Rork customer app).

C5 requires both layers. Oracle alone is insufficient. If store.latitude/longitude are null, C5 will remain NOT PROVEN until coordinates are repaired.

Negative test uses Syracuse NY (lat=43.0515 lng=-76.1477), ~65mi from Rochester-area stores. The in-range fixture coordinates must be within the store's service radius (Penfield: lat=43.1366 lng=-77.4907 β‰ˆ 2.4mi).

Apply a fixture with a store record to enable this gate.
πŸͺ

Gate C6 β€” Merchant Card Rendering

IMPLEMENTED
EXECUTED
PROVEN
PENDING

4 layers: DB CONFIRMED (identity, image, rating, vertical, coords) Β· API CONFIRMED (all 8 render fields) Β· RORK STATE CONFIRMED (name + is_open agreement) Β· UI CONFIRMED (render event requires instrumentation). A card is NOT PROVEN unless the render event certifies: store_id, store_name, is_open, distance_miles, eta_minutes, delivery_fee, rating, vertical, frontend_build, rendered_at.

Requires a fixture with a merchant to audit card rendering.
πŸ“‹

Gate C7 β€” Store Detail & Menu Read

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Independent 4-layer proof (does NOT use Gate 2 evidence): DB CONFIRMED (sections, items, stable item_ids, prices, migration_state) Β· API CONFIRMED (section/item count parity, markup-aware pricing audit) Β· RORK STATE CONFIRMED (same menu, resolver_source consistent with migration_state) Β· UI CONFIRMED (API layer confirmed). Authoritative stores serve store_specific menu. Shadow stores correctly serve shared_legacy until promoted β€” resolver_source=shared_legacy is expected and not a failure for shadow stores.

Requires fixture with store.

Domain C β€” Items, Modifiers & Cart

πŸ”

Gate C8 β€” Item Rendering

IMPLEMENTED
EXECUTED
PROVEN
PENDING

4-layer proof for 5 sampled items: DB CONFIRMED (item_id, name, price, availability, alcohol flags), API CONFIRMED (strict item_id match, markup-aware customer price, all items present, availability consistent), RORK STATE CONFIRMED (top-level items[], API-price parity), UI CONFIRMED (API layer confirmed). Cart baseline persisted only after all 5 items proven β€” consumed by C10, C18, C19, C20, C22, and C24.

Requires fixture with store.
βš™οΈ

Gate C9 β€” Modifier Rendering & Selection

IMPLEMENTED
EXECUTED
PROVEN
PENDING

4-layer proof: DB CONFIRMED (groups, required constraints, no dup option IDs, non-zero prices), API CONFIRMED (modifier_group_ids per item, stable IDs across two requests), RORK STATE CONFIRMED (modifier count matches API), UI CONFIRMED (API layer confirmed). Updates the cart baseline from C8 to include a sample modifier selection.

Requires fixture with store.
πŸ›’

Gate C10 β€” Cart Mutation & Store Lock

IMPLEMENTED
EXECUTED
PROVEN
PENDING
BACKEND β€”CLIENT β€”E2E PENDING

Requires a C8_PROVEN baseline. Proves server-authoritative pricing, PRICE_MISMATCH for tampered prices, qty mutations, signed tokens. E2E requires Rork client evidence injection.

Requires a fixture with a store and a passing C8 gate.

Domain D β€” Group Ordering

πŸ‘₯

Gate C11 β€” Group Order Creation & Invitation

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves host creates group order, group order ID/token generated, share link opens correct store/cart, invitation cannot expose unrelated customer data, duplicate join is idempotent, expired invitation rejected, removed participant loses access.

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ”„

Gate C12 β€” Group Cart Synchronization

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves participant items are attributed correctly, host sees aggregate cart, each participant sees permitted data, concurrent edits reconcile, participant cannot edit another's items, and final group cart freezes before payment.

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ’Έ

Gate C13 β€” Group Payment Allocation

IMPLEMENTED
EXECUTED
PROVEN
PENDING

⚠ REQUIRES FORMALIZED ALLOCATION MATRIX before implementation. Host pays: delivery fee + host merchandise. Participants pay: their own merchandise + tax + service fee + tip. Gate must reconcile all obligations and verify sum equals group total exactly.

⚠ Blocked by: Allocation policy must be finalized

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

Domain E β€” Fulfillment & Recipient

🎁

Gate C14 β€” Send as Gift

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Consumes the C8/C10-certified cart baseline (certified item_id, menu_id, store_id, price_cents). Mutates only the gift fields per test β€” so item identity checks pass before gift validation runs. Chain: C8 item β†’ C9 modifiers β†’ C10 certified cart β†’ C14 gift mutation of that cart.

πŸ’³

Gate C15 β€” Delivery Address & Payment Method

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves payment method retrieval, foreign-customer isolation, delivery address geocoding and validation, service-radius recalculation on address change, and that address/payment state survives quote refresh.

πŸ“…

Gate C16 β€” Scheduled Delivery

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves valid future slots are returned, past slots are excluded, minimum lead time is enforced, slot spacing is correct, store timezone is configured, and scheduled orders don't dispatch prematurely. Lead-time and interval assertions are driven by API-reported metadata, not hard-coded values.

Domain F β€” Replacement Preferences

πŸ”

Gate C17 β€” Checkout Replacement Preferences

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves all 6 replacement choices, optional max price increase, preferred replacement item IDs, preferences saved per original line item (not globally), preference survives quote refresh / quantity mutation, storeReplacementContract reads the exact same persisted preference, tip invariance across all replacement paths, and negative tests for sibling-store / foreign-merchant items.

Requires a fixture with a store and menu. Run C8 first for a certified cartBaseline.

Domain G β€” Pricing, Discounts & Payment

πŸ”’

Gate C18 β€” Quantity & Quote Reconciliation

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves subtotal, tax, service fee, delivery fee, and total all recalculate correctly on quantity changes. Validates exact cents and unique quote tokens per mutation.

Requires a fixture with a store and menu.
🎟️

Gate C19 β€” Promo Code

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves valid codes apply discount, invalid/expired codes are rejected, discount reduces total correctly, tip base is not incorrectly reduced, and quotes are consistent after promo application.

πŸ’°

Gate C20 β€” Tips

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves 0%/15%/20%/25%/custom tip, percentage base calculation (pre-discount subtotal), promo interaction, loyalty interaction, quantity-change interaction, exact cents, driver receives 100%, and no spinner deadlock on custom tip input.

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

⭐

Gate C21 β€” Loyalty

IMPLEMENTED
EXECUTED
PROVEN
PENDING
⚠ IMPLEMENTED / NOT PROVEN β€” Loyalty is currently not working. This gate intentionally fails and blocks full checkout certification until the loyalty system is repaired.

When repaired, this gate must prove: balance retrieval, redemption threshold, reservation, quote discount, Stripe reconciliation, cancel-checkout releases reservation, failed payment does not earn/deduct, delivery commits points, refund reverses correctly, and idempotency.

⚑

Gate C22 β€” Single-Customer Stripe Payment

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Must use the real path: Checkout quote β†’ Place Order β†’ PaymentIntent β†’ Payment Sheet β†’ Stripe confirmation β†’ webhook β†’ Base44 reconciliation β†’ paid merchant-visible order. Proves exact amount, signed quote token, idempotency, payment cancellation/failure, requires_action, webhook duplicate, order status, and merchant visibility only after success. OUTPUT: produces the certified order_id + full evidence envelope consumed by Order Lifecycle Gate 6A.

⚠ Blocked by: Gate C18 (Quote Reconciliation) and Gate C15 (Address & Payment) must pass first

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

🀝

Gate C23 β€” Group Payment Completion

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves group allocation matrix with real Stripe intents: each participant obligation, host obligation, partial completion policy, timeout, participant failure, host fallback rule, no order release before required payments complete, and merchant sees one coherent paid order.

⚠ Blocked by: Gate C13 (Group Payment Allocation) must be formalized and passing

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

Domain H β€” Customer Order Tracking (C38 GPS first, then C24–C30)

πŸ“‘

Gate C38 β€” Live Order Tracking GPS Chain

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Certifies updateDriverLocation β†’ DB β†’ getCustomerOrderTracking β†’ OrderTrackingMap. Seven mandatory dimensions β€” physical GPS source, jitter-safe movement, ETA freshness, 60s stale handling, terminal shutdown, tracking_enabled zero-poll proof, cross-customer isolation. Emits evidence_digest required by Gate C39.

C39 dependency β€” evidence_digest

Gate C39 (Final Customer Integrity) must verify evidence_digest is non-null before certifying. Digest covers: source, timestamps, freshness_age_secs, movement_meters, gps_accuracy_meters, jitter_threshold_meters, movement_verdict, eta_changed, stale_verdict, shutdown_verdict, isolation_denied, tracking_enabled_in_payload, zero_polls_after_disable. No raw precise coordinates are included.

Apply a fixture with a merchant to enable this gate.
πŸ“‘

Gate C24 β€” Tracking Entry

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves: successful Stripe/webhook reconciliation navigates to the correct order_id; order belongs to the authenticated customer; store name and order number render correctly; item count matches the paid order; displayed order total matches the canonical paid total; tracking screen cannot open a foreign customer's order; unpaid/failed/abandoned orders do not appear as active paid orders; reopening the app restores the active order; stale checkout state cannot navigate to the wrong order. Evidence layers: Physical Order DB Β· Customer tracking API Β· Rork customer normalized state Β· Actual customer render event.

⚠ Blocked by: Gate C22 (Stripe Payment) must produce a certified order_id. Order Lifecycle Suite must return lifecycle milestone evidence.

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

⏱️

Gate C25 β€” Tracking Status, ETA & Timeline

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Canonical state-to-copy matrix enforced: β€’ pending_merchant_acceptance β†’ 'Waiting for merchant confirmation' β€” Show estimated range, NEVER 'Arriving now' β€’ merchant_accepted β†’ 'Merchant confirmed your order' β€” Recalculate ETA β€’ preparing β†’ 'Your order is being prepared' β€’ driver_searching β†’ 'Finding a driver' β€” No false arrival claim β€’ driver_assigned β†’ 'Driver assigned' β€” Show current ETA β€’ picked_up β†’ 'Your order is on the way' β€’ arrived_at_customer β†’ 'Arriving now' (ONLY valid state for this copy) β€’ delivered β†’ 'Delivered' β€” Hide active ETA Timeline integrity: Placed β†’ Merchant Accepted β†’ Preparing β†’ Driver Assigned β†’ Picked Up β†’ Delivered. Assertions: every step appears exactly once; never skips; never regresses; timestamps are ordered; server timestamps match customer-local timezone display. Proves: headline matches canonical status; ETA range valid; 'Arriving now' only in arrived_at_customer; countdown never negative; status/ETA do not regress; stale poll cannot overwrite newer state; merchant acceptance updates tracking promptly.

⚠ Blocked by: Gate C24 must pass. Lifecycle Suite must have advanced the order through key milestones.

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ“¦

Gate C26 β€” Tracking Order Details

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves complete customer order representation on tracking screen: item names, item quantities, selected modifiers, modifier quantities, special instructions, replacement decisions, removed/refunded items, gift details (where applicable), scheduled delivery time (where applicable), merchant/store identity, delivery address, order total. Defect target: 'Only 1 item' summary must also prove detailed item/modifier lines are accessible and accurate.

⚠ Blocked by: Gate C24 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ’΅

Gate C27 β€” Tracking Payment Summary

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Reconciles every displayed amount against the signed checkout/order snapshot using exact cents (not formatted string comparisons): merchandise subtotal, promo discount, loyalty discount, delivery fee, service fee, tax, tip, adjustments/refunds, final paid total. Proves: displayed total equals Stripe amount; tip distinct from merchant earnings; post-order adjustment updates summary; partial refund appears correctly; promo/loyalty lines appear only when applicable; no duplicate or hidden fee; cancelled order shows refund status and amount. No charge may be silently omitted.

⚠ Blocked by: Gate C24 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ’¬

Gate C28 β€” Actions & Communication

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves state-aware behavior: customer↔merchant chat before driver assignment; customer↔driver chat only after assignment; correct order thread; unread counts; notifications; closed/read-only behavior after terminal state per policy. SUPPORT/HELP: correct order context attached; does not expose unrelated order data; terminal orders remain support-accessible. ⚠ CALL STORE β€” NOT CERTIFIED: Phone masked calling is not yet integrated. 'Call Store' button must be hidden/disabled or explicitly labelled as unavailable until provider is wired. A visible button implying a proven capability is a defect.

⚠ Blocked by: Gate C24 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

🚫

Gate C29 β€” Customer Cancellation from Tracking

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Tests every lifecycle boundary: before merchant acceptance, after acceptance, during preparation, after driver assignment, after pickup. For each state proves: button visibility matches policy; backend decides eligibility (not client); correct cancellation endpoint called; order state changes exactly once; merchant notified; dispatch task/driver offer withdrawn where applicable; driver notified when assigned; refund amount and policy correct; customer tracking changes to cancelled; duplicate cancellation is idempotent; cancellation cannot mutate a delivered order.

⚠ Blocked by: Gate C24 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ”„

Gate C30 β€” Tracking Reliability & State Recovery

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves: polling/subscription reconnect; temporary offline state; request timeout; duplicated status events; out-of-order events; stale cached order; expired auth token; background/resume; app restart; second-device refresh; terminal state immutability; no indefinite 'waiting' state after payment or acceptance. Uses monotonically increasing lifecycle versions β€” client must reject a response that regresses from a newer state to an older one.

⚠ Blocked by: Gate C25 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

Domain I β€” Customer Order History

πŸ—‚οΈ

Gate C31 β€” Active Orders & History Classification

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves: active paid orders appear in Active Orders; pending payment does not appear as active paid; delivered orders move to history; cancelled orders move to history; fully refunded orders follow defined history policy; terminal order does not remain in active tracking; no duplicate cards; order classification uses canonical status helpers.

⚠ Blocked by: Order Lifecycle Suite must have returned terminal milestone evidence (delivered/cancelled)

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ“œ

Gate C32 β€” Order History List Rendering & Search

IMPLEMENTED
EXECUTED
PROVEN
PENDING

For each history card verifies: merchant/store name; order date in customer-local timezone; final status; item summary; final charged or refunded amount; delivery/pickup type; thumbnail where expected; sort order newest-first; pagination/infinite scroll; empty state; refresh; store/customer isolation. Search & filter: merchant filter, date range filter, status filter (Delivered / Cancelled / Refunded), combined filters, pagination of filtered results.

⚠ Blocked by: Gate C31 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ”

Gate C33 β€” Order History Detail

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Opening a history order shows an immutable final snapshot: original items and modifiers; replacements; removed/refunded lines; final quantities; final financial summary; tip; delivery details; timestamps; cancellation/refund reason where applicable; merchant and driver details per policy; chat transcript availability per retention policy; receipt/payment reference. History must use order-time snapshots, NOT recalculate from current menu.

⚠ Blocked by: Gate C31 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ”

Gate C34 β€” Reorder & Modifier Migration

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves: reorder uses current store/menu availability (not cached); unavailable items identified; changed prices disclosed; deleted modifiers handled; current service radius rechecked; current hours rechecked; no stale signed quote reused; original order is not mutated; cross-store contamination cannot occur. Modifier migration: if a modifier previously selected (e.g. Blue Cheese) has since been removed by the merchant, reorder must detect the unavailable modifier, prompt the customer for a replacement, use current modifier IDs, and never reuse stale modifier IDs from the original order.

⚠ Blocked by: Gate C33 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

🧾

Gate C35 β€” Receipt & Refund History

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Proves: payment receipt total equals Stripe charge; refund amount and status; partial refund lines; full refund lines; loyalty reversal/restoration; promo treatment; tip refund policy; downloadable or shareable receipt if supported. Cross-receipt reconciliation: Customer Receipt β†’ Merchant Receipt β†’ Physical Order β†’ Stripe Charge must all agree. Isolation: merchant never sees customer markup; customer never sees merchant baseline; driver never sees platform revenue. No platform-internal earnings fields exposed to customer.

⚠ Blocked by: Gate C33 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ”

Gate C36 β€” History Authorization & Integrity

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Negative tests: foreign customer order; tampered order_id; wrong merchant/store; deleted customer session; stale cached history; terminal order mutation; history item linked to current menu instead of snapshot; duplicate history record; inconsistent canonical and legacy statuses.

⚠ Blocked by: Gate C33 must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

Domain J β€” Notifications (C37, C37b, C37c)

πŸ””

Gate C37 β€” Push Notifications

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Verifies notification delivery for: merchant accepted, driver assigned, driver arriving soon, delivered, cancelled, refund issued, replacement request. Proves the full chain: DB event β†’ notification queue β†’ push payload β†’ client receives β†’ tap opens correct screen. Assertions: correct order_id in tap payload; correct screen navigated to; no notification for another customer's order; duplicate push events do not create duplicate notifications; cancelled order does not receive fulfillment notifications.

⚠ Blocked by: Gates C24–C30 must pass. Lifecycle milestone evidence required.

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ“¨

Gate C37b β€” SMS & Email Notifications

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Verifies: Gift SMS to recipient (correct phone, correct message, not sent to sender); order receipt email (correct total, correct items, no internal fields); driver update SMS; cancellation notification; refund notification. OTP reuse protections: OTP cannot be reused after success; expired OTP rejected; brute-force lockout enforced; OTP does not leak in response body.

⚠ Blocked by: Gate C22 (Stripe Payment) must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ›‘οΈ

Gate C37c β€” Notification Authorization

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Negative tests: wrong customer receives a notification (foreign order_id); wrong order in notification payload; expired device token; duplicate pushes are deduplicated; background app receives notification correctly; foreground app receives in-app notification correctly; killed/force-closed app receives notification via system tray and tap resumes correct state; revoked push token is cleaned up and does not cause delivery failures for other tokens.

⚠ Blocked by: Gates C37 and C37b must pass

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

Cross-Store Commerce β€” SC1 (requires C38; produces store_commerce_digest for C39)

πŸͺ

Gate SC1 β€” All-Store Commerce Continuity

IMPLEMENTED
EXECUTED
PROVEN
PENDING

SC1 is the sole owner of the all_store_commerce_v1 digest. The backend emits backend_store_commerce_v1 (matrix only). SC1 combines backend + Rork ordered sequence + flip evidence into the final digest. C39 requires source=GateSC1StoreCommerceContinuity, backend_matrix_passed=true, rork_runtime_passed=true, flip_status=confirmed_zero.

Rork Instrumentation Required

Rork must emit the following via authenticated Base44 action in this order:

  1. StoreCommerceInstrumentationReady β€” once per run β€” fields: run_id, instrumentation_version="store_commerce_v1", menu_render_enabled=true, checkout_pricing_enabled=true, merchant_flip_detection_enabled=true
  2. StoreMenuRendered β€” per store, per step β€” fields: run_id, sequence_step, store_id, menu_state, merchant_id
  3. StoreCheckoutPricingRendered β€” per store, per step β€” fields: run_id, sequence_step, store_id, cart_store_id, header_store_id, pricing_store_id, menu_unit_price_cents, quote_unit_price_cents, identity_check_executed=true
  4. StoreCheckoutPricingFailed β€” per store, per step β€” emit instead of StoreCheckoutPricingRendered when pricing fails β€” fields: run_id, sequence_step, store_id, error_code (required), duration_ms. SC1 marks that step FAIL. Emitting both success + failure at the same step β†’ run marked FAIL as unstable/recovered-after-failure.
  5. CheckoutMerchantFlipDetected β€” only when a flip occurs β€” fields: run_id, verdict, previous_header, next_header, cart_store_id. Do NOT emit if no flip.

Missing StoreCommerceInstrumentationReady β†’ BLOCKED. Missing run_id events β†’ BLOCKED. Missing flip instrumentation β†’ BLOCKED.

PASSFULL_COMMERCESHARED_LEGACYEMPTY_CATALOGCONFIG_GAPINACTIVESHADOW_NOT_READYFAILBLOCKED

Multidimensional Profile Dimensions

β€’ operational: ACTIVE | INACTIVE β€” inactive stores skip all commerce tests

β€’ catalog: FULL_COMMERCE | EMPTY_CATALOG | SHADOW_NOT_READY β€” shadow with usable shared-legacy β†’ FULL_COMMERCE

β€’ delivery: READY | CONFIG_GAP β€” config gap notes the gap but does not skip menu/identity tests

β€’ migration: AUTHORITATIVE | SHARED_LEGACY_FALLBACK | SHADOW_NOT_READY

C39 requires: schema_version=all_store_commerce_v1, source=GateSC1StoreCommerceContinuity, backend_matrix_passed=true, rork_runtime_passed=true, flip_status=confirmed_zero, manifest_coverage_percent=100, full_commerce_backend_coverage_percent=100, rork_full_commerce_coverage_percent=100

Final Customer Integrity β€” C39 (requires C38 evidence_digest + SC1 store_commerce_digest)

🧹

Gate C39 β€” Final Customer Integrity

IMPLEMENTED
EXECUTED
PROVEN
PENDING

Confirms the full C1–C39 + SC1 certification chain. PREREQUISITES: (1) Gate C38 evidence_digest must be present and non-null. (2) Gate SC1 must emit an all_store_commerce_v1 digest with store_scope=ALL_STORES, store_manifest_digest non-null, coverage_percent=100, full_commerce_passed=full_commerce_required, unexecuted_store_count=0, failed_store_count=0, cross_store_isolation_passed=true, forward_sequence_passed=true, reverse_sequence_passed=true, merchant_flip_count=0, rork_runtime_passed=true. A missing digest or any false field blocks C39. Checks: no stale quotes, no abandoned PaymentIntents, no loyalty reservation leak, no duplicate order, no cross-store cart contamination (any store's menu/cache/cart appearing under another store), no gift-data leak, no group invitation leak, no replacement preference on wrong line, payment allocations reconcile, tracking and history gates agree on order state, all artifacts scoped to test_run_id. Requires lifecycle milestone evidence digest to verify the same controlled order was used end-to-end.

⚠ Blocked by: Gates C22, C30, C36, C38, and SC1 must pass. C38 evidence_digest must be non-null. SC1 all_store_commerce_v1 digest must have: schema_version=all_store_commerce_v1, source=GateSC1StoreCommerceContinuity, backend_matrix_passed=true, rork_runtime_passed=true, flip_status=confirmed_zero, manifest_coverage_percent=100, full_commerce_backend_coverage_percent=100, rork_full_commerce_coverage_percent=100, unexecuted_store_count=0, failed_store_count=0, cross_store_isolation_passed=true, rork_forward_sequence_passed=true, rork_reverse_sequence_passed=true, instrumentation_ready=true, identity_check_coverage=true. flip_status not confirmed_zero blocks C39.

NOT YET IMPLEMENTED

Gate scaffold β€” implementation pending

πŸ“‹

Production Certificate

NOT READY

Generated when all 42 gates pass or are marked NOT_APPLICABLE (for demonstrably disabled features). Currently: 0 passedΒ· 42 pending.

πŸ”—

Outbound Handoff β€” C22 β†’ Order Lifecycle Suite

Gate 6A in the Order Lifecycle Suite must validate the digest, IDs, menu version, payment status, and evidence freshness before accepting the handoff. A stale or unrelated order must be rejected.

{
  "source": "CustomerCheckoutSuite",
  "test_run_id": "crun_1792436410717_tmuzi9",
  "order_id": "<certified_order_id>",
  "merchant_id": "<merchant_id>",
  "store_id": "<store_id>",
  "customer_id": "<customer_id>",
  "menu_id": "<menu_id>",
  "menu_version": 0,
  "quote_id": "<quote_id>",
  "quote_token_hash": "<sha256_of_signed_quote_token>",
  "payment_intent_id": "<pi_...>",
  "payment_intent_amount_cents": 0,
  "stripe_livemode": false,
  "payment_status": "succeeded",
  "webhook_event_id": "<evt_...>",
  "webhook_processed_at": "<iso_datetime>",
  "order_total_cents": 0,
  "merchant_baseline_cents": 0,
  "item_snapshot_hash": "<sha256_of_item_modifier_snapshot>",
  "replacement_preferences": [],
  "gift_metadata": null,
  "group_metadata": null,
  "certified_at": "<iso_datetime>",
  "evidence_digest": "<sha256_of_full_envelope>"
}
CONTROLLED FIXTURE MODE (fallback only): Gate 5 synthetic order creation is a non-production engineering fallback. When operating in this mode, Gate 5 must display a prominent CONTROLLED FIXTURE MODE banner. Production certification requires a passing C22 handoff.
πŸ“₯

Inbound Handoff β€” Order Lifecycle Suite β†’ Customer Tracking & History (C38, C24–C36, C39)

After the Order Lifecycle Suite completes delivery, it must return this milestone evidence envelope. C38 (GPS chain) runs first in Domain H; C24–C36 follow; C39 (Final Integrity) runs last and requires C38 evidence_digest. Any Domain H/I gate must reject stale or mismatched lifecycle evidence.

{
  "test_run_id": "crun_1792436410717_tmuzi9",
  "order_id": "<certified_order_id>",
  "merchant_accepted_at": "<iso_datetime>",
  "driver_assigned_at": "<iso_datetime>",
  "picked_up_at": "<iso_datetime>",
  "delivered_at": "<iso_datetime>",
  "terminal_status": "delivered",
  "lifecycle_evidence_digest": "<sha256_of_lifecycle_evidence>"
}

Domain H (C38 first, then C24–C30):

  • C38 β€” Live GPS Chain (emits evidence_digest)
  • C24 β€” Tracking Entry
  • C25 β€” Status & ETA (canonical state-to-copy matrix)
  • C26 β€” Order Detail Rendering
  • C27 β€” Payment Summary Reconciliation
  • C28 β€” Actions & Communication
  • C29 β€” Customer Cancellation by lifecycle boundary
  • C30 β€” Tracking Reliability & State Recovery

Domain I β†’ J β†’ Final:

  • C31 β€” Active/History Classification
  • C32 β€” History List Rendering
  • C33 β€” History Detail (immutable snapshot)
  • C34 β€” Reorder (current availability)
  • C35 β€” Receipt & Refund History
  • C36 β€” History Authorization
  • C37 / C37b / C37c β€” Push / SMS / Auth Notifications
  • SC1 β€” All-Store Commerce Continuity (all_store_commerce_v1 digest for C39)
  • C39 β€” Final Customer Integrity (requires C38 evidence_digest + SC1 all_store_commerce_v1 digest with coverage_percent=100)