free_or_entry
Daily Key
/daily → /shop/daily-key
checkout delivery
This internal chamber stitches together Scroll Shop, Stripe checkout, webhook, purchase link, artifact, email, account archive, recovery, refund, and deletion dry run. This does not sell beauty; it proves the checkout does not lead into a maze.
checkout delivery lab
Choose product, payment mode, delivery channels, and proof flags. The panel shows blockers before live payments.
needs_review
Completed
Next stages
Tables
reading_recordsstripe_eventsfinance_eventspurchase_linksdelivery_jobsoracle_artifactsomen_consentsdata_deletion_requestsStage proof
free_or_entry
/daily → /shop/daily-key
quick
/matchmaker → /shop/small-scroll
standard
/matchmaker → /shop/standard-scroll
deep
/shop/deep-scroll → /shop/deep-scroll
premium
/oracle-council → /shop/council-of-oracles
premium
/compatibility → /shop/relationship-mirror
premium
/year-map → /shop/year-map-scroll
gift
/shop/gift-scroll → /shop/gift-scroll
membership
/passport → /shop/seeker-bundle
stages
product_id and safe wording are fixed before payment.
Stripe session has client_reference_id, metadata, and success/cancel URL.
Stripe reports payment_status=paid and amount matches tier.
stripe_events protects against duplicates and double delivery.
purchase_links changes status to paid/unlocked and points to the correct unlock_route.
oracle_artifacts separates private_payload from public_payload.
delivery_jobs has idempotency_key, safe subject, and attempts.
receipt/delivery email was sent without private preview.
account shows the purchase only to the owner and with correct consent.
support can find an order by email/session without secrets.
risk ledger
Set STRIPE_PRICE_* or a verified fallback price_data.
Check STRIPE_WEBHOOK_SECRET and live/test mode.
Success URL must lead to unlock/recovery route.
Stripe event claim and idempotency keys are required.
Create a purchase_links row before checkout.
Webhook must enqueue delivery_jobs with idempotency_key.
Subject/preview neutral only, full text via link.
Public payload whitelist and private_payload ban.
Separate consent flags before archive writing.
Support macro + recovery token + lookup by safe fields.
Decision tree: resend, recreate, refund, manual review.
rooms