Files
rootnode-academy/docs/WINTER_BREAK_LAUNCH_CHECKLIST.md
T
ced4568 a4c0058f8c docs(stripe): document real Stripe TEST-mode validation results
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.
2026-08-28 09:47:11 -05:00

5.8 KiB

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

  • Offering, capacity, registration lifecycle, agreements — built and tested (Phase 7/8).
  • 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).
  • Website registration + checkout + agreement + status-lookup contract — documented and tested (docs/WEBSITE_REGISTRATION_AND_CHECKOUT.md).
  • Admin UI for offering pricing and per-registration payment/refund status.
  • GET /api/admin/offerings/:id/readiness reflects real configuration state, including the new price and payment_provider checks.
  • 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).
  • 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).
  • 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

  • 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.