- PHASE5A_STUDENT_IDENTITY_REMOTE_CLASSROOM.md: the full design doc. - RUNBOOK_STUDENT_ACCOUNT_LIFECYCLE.md, RUNBOOK_REMOTE_CLASSROOM.md: operational runbooks. - REMOTE_AND_SELF_PACED_ARCHITECTURE.md: closes the 'no real student authentication' gap this doc previously flagged as the one item blocking self-paced delivery. - ENGINEERING_SOP.md §5 rewritten (was describing a pre-Phase-2A state no longer true of any deployed version of this codebase) plus a new §14; roadmap item 3 updated. - LAB_ARCHITECTURE.md, PRODUCTION_VALIDATION_CHECKLIST.md, README.md, platform/README.md: cross-references and a Phase 5A production-validation section.
2.9 KiB
Runbook: Running a Remote Classroom
Covers scheduling, running, and recovering a live class through /admin → Classroom. See
docs/PHASE5A_STUDENT_IDENTITY_REMOTE_CLASSROOM.md for the underlying design. RootNode does
not provide video/voice — the meeting URL field just links out to Meet/Zoom/Teams/whatever
you already use for that.
Before class: schedule it
/admin → Classroom → pick the cohort → Schedule a class. Title is required; scheduled start,
description, and a meeting URL are optional. Only one class can be live per cohort at a time —
scheduling a second one is fine, starting it while another is live is rejected.
Right before class: Prepare Labs
Open the classroom → Prepare Labs. This provisions/warms every enrolled student's Lab ahead of
time (same underlying flow as the cohort-level Prepare Labs button) so nobody is waiting on a
cold start once class begins. If a Lab host is at capacity, that student shows as
capacity_waiting in the results rather than failing silently — check back or ease off other
concurrent load.
Start class
Open the classroom → Start class. Status moves to live; students now see a "LIVE NOW" banner
on their Classroom tab and can join.
During class
- Participants table: presence (
online/recently_active/offline, derived from each student's last heartbeat — not a hard real-time signal, allow ~30s of lag), Lab status, and a one-line current-work snapshot (stage, scenario, validation failures, hints used). - Set current activity: enter a scenario ID and Set. This only shows students a link — it never redirects their browser or marks anything complete. Use it to say "everyone open this next," not to force navigation.
- Post an announcement: short messages, shown newest-first on the student side.
- Help queue: students flag
lab_problem/dont_understand/validation_failing/otherwith an optional note. Acknowledge when you've seen it, Resolve when it's handled. There is no chat here — if it needs back-and-forth, use your actual video call.
End of class
Open the classroom → End class. Status moves to ended; this does not touch Labs or student
progress — destroy Labs separately from the cohort view if you're done with them for the day.
If you need to cancel a scheduled (not yet started) class: Cancel, from the classroom
detail view. A live class can only be ended, not cancelled.
If the Platform API restarts mid-class (deploy, crash, host reboot): nothing to do. Sessions,
the live classroom row, and participant presence all live in Postgres, not in the API process's
memory — students' browsers keep their existing session and heartbeat right through it, and the
dashboard shows the same state a few seconds after the API comes back. This is exercised for
real in infra/scripts/drills/test-phase5a-rehearsal.js, which restarts the API mid-rehearsal
and asserts on exactly this.