Skip to content

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_fees credit_transfer) — unchanged.
  • Promo-origin credit redemption steps pay $0 (ADR-026's rule, reaffirmed). Origin per consumed balance: credit_package_id or subscription_deposit_amount set = 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_BOOKING offer 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_FRACTION removed), the reserve gate and audits track purchased credits only, dashboards' credit-obligations become purchased-only, and the analytics.platform_events credits 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_transfer vocabulary 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.