ADR-0057: Acquisition surface: the shop is Deck Hub's SUPPLY view; purchases never regenerate the board
roster: unchanged by this ADR), ADR-0055 (engine-priced
awards; wallet writes are System-tier), ADR-0056 (the
ownership ledger; ownership_commit is the one deposit path), ADR-0050
(the board’s feed-reader render), ADR-0015 (CIPHER is
OLED-exclusive; debrief is a CIPHER beat), economy-model.md
(GWP-708: the acquisition loop), catalog-taxonomy.md
(GWP-712: classes, stable IDs, exposure stages), acquisition-surface-brief.md
(GWP-709: the decision brief behind this ADR), deck-hub.md +
the GWP-710 Tier-2 spec (the host program and its reserved shop seam).
Context
Section titled “Context”The economy model’s acquisition loop (teach by need, expose on debrief, buy) ends in two moments with no surface: the expose moment, because debrief fires as a CIPHER-LINE beat on the OLED (ADR-0015) and no main-grid debrief modal exists, and the buy moment, because no program owns viewing and purchasing the catalog (~135 items across six classes in the career simulators; taxonomy per GWP-712). ADR-0042 closed the program roster, so hosting the shop in a new program costs a roster amendment by design.
Separately, mission_board.c subscribes its regenerate-on-next-peek dirty flag to
NOSH_EVENT_UDS_CREDIT_CHANGED (mission_board.c:139), and generation applies broke_bonus
(+25% payouts below the broke balance tier) and a balance_tier-dependent instance count.
Purchases will publish that credit event through the GWP-718 evented setters. Left alone, a
purchase re-mints the board the operator just read (a feel failure), and spending down to the
broke threshold reprices every posted payout upward (a probe: shopping becomes a payout lever).
The full option analysis and trade-off table live in the decision brief
(acquisition-surface-brief.md); this ADR
records the pick and its rules.
Decision
Section titled “Decision”-
Deck Hub owns the shop. The catalog surface is a SUPPLY view inside Deck Hub (first-party program #2), beside the character sheet and the loadout. It lists exposed catalog items with prices, grouped by GWP-712 class;
EVALon an item buys. The GWP-710 Deck Hub spec’s reserved shop seam resolves to “the shop is one additional Deck Hub view.” The ADR-0042 roster is unchanged; no amendment. -
The exposure moment is the CIPHER debrief line plus the SUPPLY listing. At mission resolution, after the ADR-0055 award settles, the exposure ledger flips the taught item
hidden -> exposed(GWP-712 §3) and CIPHER emits a new:catalog-exposedevent during the:debriefbeat (OLED only; copy per the CIPHER style guide). The persistent advert is the item sitting priced in SUPPLY. Newly exposed items carry a new-stock marker in SUPPLY until first viewed. -
A purchase never regenerates or reprices the mission board.
mission_board.cdrops itsNOSH_EVENT_UDS_CREDIT_CHANGEDdirty subscription. The board regenerates only on: mission resolution (completed / failed / abandoned), cart-history change, reputation change, and cipher-seed advance.balance_tier,broke_bonus, and ownership-driven template eligibility (fixed rule 3; ADR-0056’sownership_hasquery) are therefore evaluated only at those boundaries. Broke relief keeps its design intent (relief for an operator left broke by play); the spend-to-broke payout probe closes; work bought into eligibility appears with the next board cycle, and the debrief advert may say so. -
The purchase transaction is System-tier and sanctioned end-to-end.
EVALon a SUPPLY row debits the wallet through the evented setters (GWP-718) and deposits throughownership_commit(ADR-0056), atomically from the operator’s view: insufficient credits refuse before any write. Consistent with ADR-0055, no cart-tier context can reach the purchase path; carts advertise (enrich) but never sell. Ownership registers to the deck (Josh, 2026-07-18): a purchase lands in the deck’s durable state (the ADR-0056 ledger is deck-scoped) and is exercised by whoever operates the deck. What operator identity means beyond the current single handle (switching operators on a deck; what, if anything, follows the operator off it) is explicitly open, tracked in the SUPPLY skeleton’s open questions. (Closed same-week by the amendment below.)
Amendment (2026-07-18, Josh): operator change is gated on the capstone. The open question in Decision 4 is closed by rule instead of a design pass: a deck’s operator cannot change until the synthetic identity (the capstone purchase,
economy-model.md) is owned on that deck. One handle per deck for the career; no multi-operator model ships; the capstone is the unlock. This also closes the throwaway-handle reputation dodge for free: a replacement identity costs the career-length price.
- kn9 is a later flavor channel, never a second shop. A cart may enrich a teaching debrief with a handler message pointing at the same SUPPLY entry (enrich-never-gate, ADR-0042). No purchase mechanics enter kn9; its charter’s economy exclusion stands.
Options Considered
Section titled “Options Considered”Full trade-off table in the decision brief.
Option A: Deck Hub SUPPLY view (ACCEPTED)
Section titled “Option A: Deck Hub SUPPLY view (ACCEPTED)”No roster cost; purchase-to-equip adjacency (the bench lists what SUPPLY sells, buy then slot in one program); the wallet readout the shop spends against already renders there; the GWP-710 seam snaps in with no rework. Accepted cost: the advert (OLED) and the store (Deck Hub) are two hops apart, and Deck Hub carries a fourth job. If the distance proves a felt problem on glass, a Row-74 affordance from the board into SUPPLY closes it without moving the shop.
Option B: Board debrief overlay
Section titled “Option B: Board debrief overlay”Tightest teach-to-buy adjacency (one screen at the moment of pain). Rejected because it puts commerce on the work-discovery program, an overlay cannot carry ~135-item browsing so a full catalog home is still required elsewhere (two shop surfaces), and it sells from the one surface whose regeneration coupling is sharpest.
Option C: kn9 vendor thread
Section titled “Option C: kn9 vendor thread”Strongest fiction (the fence whose offers arrive on the feed). Rejected as the shop because kn9’s charter excludes economy ownership, v1 compose is read-mostly by design, and browsing six classes through mail threads fails at catalog scale. Retained as the enrichment flavor channel (Decision 5).
Option D: New fourteenth program
Section titled “Option D: New fourteenth program”Clean scope, high feed-reader reuse. Rejected because it spends the roster amendment ADR-0042 exists to make expensive, duplicates Deck Hub’s bench and wallet adjacencies, and adds a router tile for a surface visited between missions.
Consequences
Section titled “Consequences”Positive
Section titled “Positive”- The acquisition loop’s expose and buy steps land on designed surfaces with no roster change.
- The GWP-710 Deck Hub spec’s shop-home section unblocks (the seam resolves to a view).
- The spend-to-broke payout probe is closed by subscription removal (one line of intent in
mission_board.c), and board reads stop shifting under the operator after a purchase. - The purchase path reuses the sanctioned seams that already exist or are in flight
(
ownership_commit, evented setters, ADR-0055 tiering); no new write paths.
Negative / Accepted costs
Section titled “Negative / Accepted costs”- Two hops between the advert and the store (mitigation named in Option A).
- Deck Hub’s scope grows to four jobs; its spec must keep the views separable.
- Eligibility bought mid-cycle waits for the next board boundary to surface as work.
Engineering follow-ons
Section titled “Engineering follow-ons”mission_board.c: drop theUDS_CREDIT_CHANGEDsubscription (plus a regression test that a credit change alone leaves the board clean).- CIPHER:
:catalog-exposedevent type with:debrief-beat routing. - The purchase seam: SUPPLY
EVAL-> debit +ownership_commit, refusal on insufficient credits (lands with the ADR-0056 / GWP-718 engineering). - Deck Hub SUPPLY view implementation per the spec skeleton
(
deck-hub-supply.md).
Documentation Updates (REQUIRED — Spec Hygiene Rule 3)
Section titled “Documentation Updates (REQUIRED — Spec Hygiene Rule 3)”-
docs/adr/ADR-0057-acquisition-surface-deck-hub-supply.md— this file -
docs/adr/README.md— index entry (added once ADR-0055/0056 landed on main) -
docs/software/runtime/acquisition-surface-brief.md— outcome recorded -
docs/software/programs/deck-hub-supply.md— spec skeleton for the SUPPLY view -
docs/software/programs/deck-hub.md— shop seam resolved to the SUPPLY view (after the GWP-710 spec merged in PR #134) -
docs/software/runtime/cipher-voice.md—:catalog-exposedevent type
Narrative
Section titled “Narrative”The economy was designed to end every lesson at a cash register: the board offers a job you can barely do, the debrief names the tool you were missing, and credits turn the felt gap into capability. Every piece of that loop had an owner except the register itself. This ADR gives it one: the deck’s own character screen, where the wallet already reads out and the bench already lists what you own, grows a SUPPLY view listing what you could. The fence fiction stays available to carts through kn9 messages that point at the same shelf. And the mission board, which had been listening to every credit movement, stops watching the operator shop: it regenerates when the world changes (a mission resolves, a cart registers, reputation moves), so posted work holds still while you spend, and going broke at the counter no longer marks up the next job.