# 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). - [ ] Real price and currency. - [ ] 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 — pending real Stripe credentials Phase 9.1 searched for Stripe TEST credentials specifically to run real validation and found none available anywhere this session could reach — see `docs/ PHASE9_1_STRIPE_TEST_VALIDATION.md` for the exact search and what Chase needs to provide. A permanent, opt-in test (`platform/test/stripe-integration-test.js`) is ready to run the real TEST-mode proof the moment `STRIPE_SECRET_KEY`/`STRIPE_WEBHOOK_SECRET` exist. - [ ] 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.