PHASE9_1_STRIPE_TEST_VALIDATION.md rewritten from BLOCKED to the real, proven results: a real Stripe TEST Checkout, a real TEST payment at the founder-approved $399 Founding Cohort price, a genuine signed webhook, the existing registration->enrollment conversion, a real duplicate-delivery proof, a real automated abandoned-checkout proof, a real refund with the non-cascade rule reconfirmed, full Stripe<->RootNode reconciliation IDs, and the one real defect found and fixed. STRIPE_INTEGRATION_RUNBOOK.md updated (real-Stripe local testing is no longer 'not yet exercised'; notes the no-sudo Stripe CLI install path and --api-key/--print-secret usage). WINTER_BREAK_LAUNCH_CHECKLIST.md: Stripe TEST validation checked, price checked ($399 launch / $449 retail per Chase directly), live-mode items correctly still unchecked. PHASE9_COMMERCE_AND_LAUNCH.md's Phase 9.1 addendum updated to reflect completion.
90 lines
5.8 KiB
Markdown
90 lines
5.8 KiB
Markdown
# Winter Break Camp — Launch Checklist
|
|
|
|
The single go/no-go list for opening the Winter Break Linux & Systems Foundations Camp
|
|
(`docs/WINTER_BREAK_CAMP_CURRICULUM_OPTIONS.md` Option A) to real public registration. Combines
|
|
`docs/WINTER_BREAK_CAMP_OPERATIONS.md`'s operational sequence with Phase 9's commerce
|
|
requirements into one checklist Chase can walk top to bottom. Nothing on this list is invented by
|
|
the platform — every unchecked item is a real decision or asset that has to come from Chase, the
|
|
legal reviewer, or Stripe, not from more code.
|
|
|
|
## Platform readiness — done, verified, ready whenever the business inputs below land
|
|
|
|
- [x] Offering, capacity, registration lifecycle, agreements — built and tested (Phase 7/8).
|
|
- [x] Offering pricing field, payment-provider abstraction, hosted checkout, verified webhook,
|
|
refund recording, abandoned-reservation reaper — built and tested against the deterministic
|
|
test provider (Phase 9).
|
|
- [x] Website registration + checkout + agreement + status-lookup contract — documented and
|
|
tested (`docs/WEBSITE_REGISTRATION_AND_CHECKOUT.md`).
|
|
- [x] Admin UI for offering pricing and per-registration payment/refund status.
|
|
- [x] `GET /api/admin/offerings/:id/readiness` reflects real configuration state, including the
|
|
new `price` and `payment_provider` checks.
|
|
- [x] Full Winter Break commerce rehearsal green end to end against a real, freshly-built stack
|
|
(`infra/scripts/drills/test-phase9-winter-camp-commerce.js`, 13/13): admin configuration,
|
|
minor and adult registration, checkout, payment success, webhook, enrollment activation, a
|
|
real classroom session, a real Lab task, failed payment, duplicate webhook, abandoned
|
|
checkout, and a last-seat race.
|
|
|
|
## Business decisions — Chase's call, not invented by this phase
|
|
|
|
- [ ] Real camp dates and duration.
|
|
- [ ] Real venue/location (or confirm fully online/remote).
|
|
- [ ] Real capacity (seat count).
|
|
- [x] Price and currency — **$399.00 USD launch tuition ("Founding Cohort"), $449.00 standard
|
|
retail, paid in full, no deposit/payment plan** — founder-approved per Chase directly
|
|
(Phase 9.1). Validated against real Stripe TEST mode at this exact amount. Not yet
|
|
reflected in a committed pricing document in this canonical repo (referenced but not found
|
|
— see `docs/PHASE9_1_STRIPE_TEST_VALIDATION.md` §1/§33); set directly on the real Winter
|
|
Break offering via `PATCH /api/admin/offerings/:id` when ready to open registration.
|
|
- [ ] Whether registration opens ahead of, or alongside, a specific marketing push.
|
|
- [ ] Refund policy in plain terms (the platform can RECORD any refund decision; it does not
|
|
decide policy — see `docs/OFFERING_AND_REGISTRATION_MODEL.md`'s "Payment and the commerce
|
|
boundary" section for what "record, never auto-cascade" means operationally).
|
|
|
|
## Legal review — required before any real family sees the agreement
|
|
|
|
- [ ] The actual participation/media/liability agreement text, reviewed by a real attorney
|
|
(`agreement_definitions.body_summary` is currently a plain-language placeholder only — see
|
|
`docs/STUDENT_GUARDIAN_DATA_MODEL.md`'s legal-review list).
|
|
- [ ] Jurisdiction-specific minor-consent requirements confirmed.
|
|
- [ ] Data-retention/deletion policy decided and, if needed, reflected in the agreement text.
|
|
- [ ] A decision on whether emergency-contact fields need additional encryption at rest.
|
|
|
|
## Payments
|
|
|
|
- [x] **Stripe TEST-mode validation** — a real Stripe TEST Checkout Session, a real TEST payment
|
|
at the actual $399.00 founding-cohort price, a genuine signed webhook, the existing
|
|
registration→enrollment conversion, a real duplicate-delivery proof, a real automated
|
|
abandoned-checkout proof, and a real refund with the non-cascade rule reconfirmed — all
|
|
proven end to end in Phase 9.1. One real defect (webhook-event correlation) was found and
|
|
fixed as a direct result. See `docs/PHASE9_1_STRIPE_TEST_VALIDATION.md` for the full
|
|
evidence and reconciliation IDs. **This is TEST mode only — it does not authorize or imply
|
|
LIVE-mode readiness**, see the unchecked items below.
|
|
|
|
- [ ] Real Stripe account created/available (live mode).
|
|
- [ ] `STRIPE_SECRET_KEY`/`STRIPE_WEBHOOK_SECRET` (live values) provisioned into production
|
|
configuration only — see `docs/STRIPE_INTEGRATION_RUNBOOK.md`'s "Going live" section.
|
|
- [ ] At least one real, small, refundable test transaction run end to end in production before
|
|
opening registration publicly, then refunded.
|
|
- [ ] Recommended (not required — the test provider already validates the application logic):
|
|
one full rehearsal against Stripe's own TEST mode (fake cards, no real money) before
|
|
flipping to live credentials, per `docs/STRIPE_INTEGRATION_RUNBOOK.md`'s test-mode section.
|
|
|
|
## Website (separate repo, not RootNode-owned)
|
|
|
|
- [ ] rootnodeacademy.com's own registration/checkout form built against
|
|
`docs/WEBSITE_REGISTRATION_AND_CHECKOUT.md`. Not tracked or built in this repository — if
|
|
that repo becomes available to RootNode's own engineering effort, say so explicitly before
|
|
any code changes are made against it.
|
|
- [ ] The website's `INTEGRATION_SHARED_SECRET` provisioned into its OWN backend configuration
|
|
(never browser-reachable) — see `docs/WEBSITE_ENROLLMENT_INTEGRATION.md`'s "Production
|
|
secret handling."
|
|
- [ ] The website's success page built against the status-lookup polling pattern in
|
|
`docs/WEBSITE_REGISTRATION_AND_CHECKOUT.md` §6 — never derived from the redirect URL alone.
|
|
|
|
## Final go/no-go
|
|
|
|
Registration should not open to the public until every box above is checked. The platform side
|
|
(first section) has been true since this phase shipped; everything else is a business, legal, or
|
|
external-team dependency this phase deliberately did not — and should not — invent on Chase's
|
|
behalf.
|