ADR-028: No Money Movement on Free Hourly Bookings; Promo Redemptions Location-Borne
Status
Accepted (2026-07-23, Paul + Aaron). Reaffirms ADR-026
— which remains Accepted and operative — and extends it with the explicit rule that no free
hourly booking ever moves money. Documents the same-day reversal cycle.
Implementation: PR #917 (reopened), spec docs/features/promo-credits-location-borne/spec.md.
Context
ADR-026 (2026-07-22) made promo-origin credit redemptions location-borne: no funding source existed for the ~90c/credit cash payout behind free-granted credits. The implementation was built the same day (PR #917, reviewed, unmerged).
On 2026-07-23 Paul ruled the opposite before deploy: pay locations at redemption for promo credits AND comped bookings, backed by monthly Stripe balance top-ups ("I'm looking into best practices for other platforms and we can continue on this way for now. Re-evaluate in a month or two."). A draft ADR recording that ruling briefly occupied this number; it was never merged and no code was built for it.
Later the same day, after further consideration, Paul reversed: "NO money movements on any free/comped hourly booking", explicitly including promo credit redemptions ("promo credit redemptions transfer nothing... everything reversed"). This ADR records the final ruling; the one-day pay-at-redemption interlude exists only in this paragraph and the PR #917/#918 threads.
Decision
- Purchased-origin credit redemptions pay ~90c/credit (payout rate from
payment_method_feescredit_transfer) — unchanged. - Promo-origin credit redemption steps pay $0 (ADR-026's rule, reaffirmed). Origin per
consumed balance:
credit_package_idorsubscription_deposit_amountset = purchased; neither = promo. A mixed redemption transfers only the purchased-step sum; a pure-promo redemption creates no transfer row at all. - No free hourly booking ever moves money — comps (free first practice), tours, org
dedicated-room bookings: no transfer. Previously implicit status quo, now explicit policy;
the rule covers any future
FREE_BOOKINGoffer on the comp path. - Forward-only / grandfathered: the $1,372 of already-paid promo redemptions stays paid.
- No monthly top-up cadence. Under this policy no unbacked outflows exist. (Paul's ~Jul 28 $6,500 top-up is the separate reconciliation remediation funding — unaffected.)
- ADR-026's consequences reactivate: the promo reserve leaves the platform's books
(
PLATFORM_PROMO_RESERVE_FRACTIONremoved), the reserve gate and audits track purchased credits only, dashboards' credit-obligations become purchased-only, and theanalytics.platform_eventscredits arm zero-weights promo-origin rows — that view change must be coordinated with the ledger-migration thread (ADR-027 owner), which now owns the analytics views and can fold it into its L1/L2 rebuild. - The
purchaseType: 'comp'/comp_transfervocabulary reservations made during the interlude are released — no comp transfers will exist.
Rejected alternatives
- Pay-at-redemption, top-up funded (the one-day ruling): withdrawn by Paul after further consideration.
- See ADR-026 for the original alternatives analysis (breakage-funded, platform-funded, additional funder ask) — all still rejected for the same reasons.