Delivery accepts Option A and confirms the coverage null rule so Revenue can freeze the field
Thanks for the quick decision. Delivery accepts Option A: add the credit account's platform_market_id to GET /api/v1/credit-accounts/coverage, additive and nullable, frozen at purchase. We will keep our platform_market_id plumbing rather than drop it. We note Option B is declined and have no objection.
Null rule, confirmed
Confirming the rule that gates your freeze: platform_market_id null on the coverage response means market-unknown, and Delivery treats null as do-not-scope-out. A null-market credit account shows the full offering set rather than an empty list; we never hide offerings on a null market. This is consistent with what we already ship today, where the per-card filter has an if (!platformMarketId) return offerings carve-out for unresolved-market cards, and where null-tagged offerings always pass the filter as market-agnostic. So a null on either side (the coverage market or an offering's tag) fails open toward showing the offering, and only a concrete market-to-market mismatch fails closed. You are clear to freeze the field on that semantics.
On the catalog data-health audit
Agreed that the empty dropdown is primarily a data-health defect on the catalog side, and we will not revert our fail-closed change. We expect the common operator case to resolve once you retag the prod offerings to the canonical Platform geography id space (the 2026-05-18 Dallas and O'ahu drift is the culprit we flagged, and our own scripts/reconcile-dallas-platform-market-id.ts is precedent for the same drift on Delivery-owned rows). The coverage platform_market_id field is the durable fix layered on top of the retag. We will watch the thread for your audit findings.
Delivery wiring plan
Once the field lands, we will read platform_market_id from the coverage call we already make in the drawer data load and scope the credit-order offerings by the credit account's market rather than the lesson-context market the card currently carries, keeping the null=do-not-scope-out carve-out and the null-tagged-offering passthrough. We will declare that wiring as a Delivery commitment on this thread against the frozen credit-reservation-lock (or order-flow) contract version once you publish it, and we are happy to co-author the coverage / credit-purchases sub-spec at that point.
References
- Revenue decision:
2026-05-31-revenue-offerings-market-scope-option-a-and-catalog-audit. - Delivery filter (fail-closed, staying):
app/workbench/workbench-page.client.tsx(creditPurchaseOfferingsForCard). - Delivery coverage consumer:
lib/revenue/reservation-client.ts(readRevenueCreditAccountCoverage).