New: PHASE6F_ROOT_V1_PILOT_READINESS.md (phase summary), ROOT_V1_CURRICULUM_MANIFEST.md (canonical V1 scope), ROOT_V1_PREREQUISITE_MAP.md, ROOT_V1_ASSESSMENT_MAP.md, ROOT_V1_SYLLABUS.md, ROOT_V1_INSTRUCTOR_GUIDE.md, ROOT_V1_STUDENT_REQUIREMENTS.md, ROOT_V1_INSTRUCTOR_LED_PILOT.md, WINTER_BREAK_CAMP_CURRICULUM_OPTIONS.md. Updated: ROOT_PROGRAM_ARCHITECTURE.md (course-sequence table reflects real V1 statuses), ROOT_PILOT_CURRICULUM.md (self-paced-readiness correction), ROOT_PROGRAM_DURATION_MODEL.md (real post-integration totals: 64.2 V1 hours / 68.3 program-wide), ROOT_CAPSTONE_READINESS.md (§1b, the new root-09 course-layer gate), platform/README.md (test list). Co-Authored-By: Claude Sonnet 5 <[email protected]>
186 lines
12 KiB
Markdown
186 lines
12 KiB
Markdown
# Phase 6F — ROOT_ V1 Curriculum Integration & Pilot Readiness
|
|
|
|
Phase 6F's mission: not more curriculum breadth, but integration, polish, and full-program QA —
|
|
answering, with evidence, "could RootNode Academy responsibly enroll a real student into ROOT_ V1
|
|
and take them through the intended learning journey?"
|
|
|
|
## Baseline verification
|
|
|
|
Confirmed at start: branch `main`, clean tree, HEAD = `origin/main` = Phase 6E's
|
|
`87ad1251ce4aee8597ef29a446e44b1247d68b1c`. Content validation: 0 errors, 13 courses, 48
|
|
modules, 312 activities, 126 scenario files — matching Phase 6E's own final numbers exactly.
|
|
|
|
## ROOT_ V1 scope — defined in `docs/ROOT_V1_CURRICULUM_MANIFEST.md`
|
|
|
|
12 of 13 existing courses are in V1 (all genuinely READY except ROOT 11, intentionally PARTIAL as
|
|
a single bonus orientation module). ROOT 08 is excluded (`visibility=draft`). See that document
|
|
for the full course-by-course table, and `docs/ROOT_V1_PREREQUISITE_MAP.md` /
|
|
`docs/ROOT_V1_ASSESSMENT_MAP.md` for the prerequisite graph and assessment coverage.
|
|
|
|
## The central integration finding: three "instructor-led-only" modules are load-bearing for the legacy Capstone gate
|
|
|
|
Auditing Phase 6E's own flagged limitation (three bare practice-bank modules) against the
|
|
pre-existing `rootnode-path.json` Capstone `unlock_rule` found their scenario_ids are not
|
|
generic extra practice — they are the *literal* content of three of its six gating stages. An
|
|
initial attempt to reclassify them `is_required=false` was caught and reverted before commit
|
|
(see `030_phase6f_capstone_gate_correction.sql`'s own header) once this was understood, in favor
|
|
of giving each a short, real intro-lesson activity instead — closing the self-paced gap without
|
|
touching the legacy gate's actual requirements. Full detail in
|
|
`docs/ROOT_V1_CURRICULUM_MANIFEST.md`.
|
|
|
|
A second, similar discovery came out of the end-to-end rehearsal (see below): the SAME legacy
|
|
gate also requires two scenarios (`services-mcq`, and all 5 of `root-07-m02`'s configuration
|
|
scenarios) that are not course-content-model prerequisites of anything on the path to
|
|
`root-capstone`. A student could reach "root-capstone unlocked" at the course layer while the
|
|
underlying assessment start route still 403s for an unrelated reason. **This is a real,
|
|
pre-existing gap, not introduced by Phase 6F** — flagged as a known limitation below rather than
|
|
fixed, since closing it is a real product decision (add root-07 as a course-layer Capstone
|
|
prerequisite, or extend the legacy stage list) that Phase 6F's mandate doesn't unilaterally make.
|
|
|
|
## Course-level status audit correction
|
|
|
|
`courses.status` had drifted stale for ROOT 05, 06, 07, 09, 10, 12, and Capstone — every module
|
|
in each had already reached real `ready` content in an earlier phase, but the course-level field
|
|
was never bumped. Corrected in `029_phase6f_root_v1_integration.sql`, verified against the live
|
|
module-level data, not assumed from prior phase reports.
|
|
|
|
## Capstone gate strengthened (Step 7)
|
|
|
|
`root-capstone.prerequisites` now also requires `root-09-kubernetes-security`, alongside the
|
|
pre-existing `root-12-real-ops` — the Capstone's own scenario pool has zero security-scenario
|
|
overlap, and ROOT 09 only reached genuine READY status this same phase. The pre-existing
|
|
six-stage legacy gate was deliberately left unchanged. See `docs/ROOT_CAPSTONE_READINESS.md` §1b
|
|
and `031_phase6f_capstone_security_prerequisite.sql`.
|
|
|
|
## ROOT_ V1 program + Lab orientation (new)
|
|
|
|
No orientation content existed anywhere before this phase. Added `root-01-m00-welcome-to-root`
|
|
— a new required front-door module (program overview, the Learn/Practice/Lab/Troubleshoot/
|
|
Validate loop, self-paced vs. instructor-led, assessments/Capstone, and a full Lab-lifecycle
|
|
orientation covering disposability, hints, reset, and help-requests) — sequenced before what was
|
|
previously ROOT 01's first module. See `032_phase6f_root_v1_orientation.sql`.
|
|
|
|
## Cascading regression fallout from these real changes
|
|
|
|
Every genuine content/schema change this phase (the orientation module, the three practice-bank
|
|
intro lessons, the new Capstone prerequisite) shifted real completion sequences that Phase 6A-6E's
|
|
own e2e suites and rehearsal scripts had hardcoded. Found and fixed, each with the underlying gap
|
|
named explicitly in a code comment: resume-pointer assertions in `e2e-phase6a/6b/6d/6e.js` and
|
|
`test-phase6d-foundations-rehearsal.js`/`test-phase6e-foundations-rehearsal.js`; missing new
|
|
intro-lesson completions in `foundations-helper.js`'s `completeThroughRoot06`/`completeThroughRoot10`
|
|
and in `e2e-phase6a.js`/`e2e-phase6b.js`'s own inline completion sequences; a stale course-status
|
|
assertion in `e2e-phase6b.js`; a draft-activity-visibility test in `e2e-phase6b.js` that had
|
|
targeted the now-fully-excluded ROOT 08 (repointed at ROOT 09); and a new completion chain
|
|
(root-07-m03/m04, all of ROOT 09) added to `e2e-phase6b.js`'s `bypass` student flow, now needed
|
|
because `root-capstone` gates on ROOT 09 too. None were platform bugs — every one was a stale
|
|
test assumption the newly-added/changed content revealed, the same pattern Phase 6E established.
|
|
|
|
## Testing
|
|
|
|
`platform/test/e2e-phase6f.js` — 17/17 passing (fresh stack): V1 manifest/status correctness,
|
|
ROOT 08 exclusion (both DB-level and student-visibility), no cycles/missing prerequisite nodes,
|
|
ROOT 01-04 re-verified ready, the new orientation module's unlock behavior, optional-activity
|
|
handling under the full Capstone-eligible chain, the strengthened Capstone gate in both
|
|
directions (locked with only ROOT 12 done; unlocked once ROOT 09 is also done; direct-API bypass
|
|
still rejected), version-bump content stability, instructor-notes RBAC (including on locked, not
|
|
just draft, content), cross-student isolation, full V1 course-list completeness for a fresh
|
|
enrollment, logout/login persistence, and an explicit age-independence check (no age/grade column
|
|
exists on `students`, enrollment never asks for one).
|
|
|
|
## Multi-student pilot rehearsal
|
|
|
|
`infra/scripts/drills/test-phase6f-root-v1-pilot.js` — 22/22 passing against a real, freshly-built
|
|
stack: a real cohort + live classroom session with three students in genuinely different states —
|
|
Student A on track (real manual-marker progression), Student B hitting a REAL Lab validation
|
|
failure, sending a real Need Help request, the instructor seeing and acknowledging it live, then
|
|
Student B genuinely fixing the failure with real shell commands and passing for real; Student C
|
|
having their real disposable Lab reaped mid-task via a real admin destroy (simulating an idle-
|
|
reaper event), confirming their academic progress survived intact, then recreating a fresh Lab
|
|
and resuming the same task. Instructor visibility distinguishes all three states; cross-student
|
|
isolation confirmed with real, not assumed, evidence (A's manual-marker progress vs. B's
|
|
Lab-only progress).
|
|
|
|
## End-to-end ROOT_ V1 rehearsal
|
|
|
|
`infra/scripts/drills/test-phase6f-root-v1-end-to-end.js` — 14/14 passing: one real student,
|
|
entirely through the real student API (no admin shortcut, no direct database completion write),
|
|
progressing ROOT 01→02→03→04 (via the established foundations helper) →05→06→09→10→12→
|
|
Capstone-eligible, with a genuine real-Lab checkpoint (a real nested-Docker container-networking
|
|
diagnose-and-fix, re-proven live on this specific student rather than assumed from an earlier
|
|
phase's rehearsal). Confirms direct API cannot skip ahead at the ROOT 06→09/10/12/Capstone
|
|
boundary. Ends with the real `rootnode-capstone` assessment genuinely `201`-startable — the
|
|
strongest possible proof the full V1 pathway is real, not merely "the course tree says complete."
|
|
|
|
## Regression
|
|
|
|
Full fresh-stack reruns after every fix: 6A (23/23), 6B (26/26), 6C (17/17), 6D (21/21), 6E
|
|
(23/23), 6F (17/17) — all green, each run against its own freshly-reset stack per the established
|
|
convention. `git diff` for this phase touches migrations/content/tests/docs only — no
|
|
`platform/api/src` application-code change was needed (unlike Phase 6E, which needed exactly
|
|
one). Phase 5A/5B/5C were not re-run: this phase's classroom/help-request/environment-destroy
|
|
usage (in the multi-student rehearsal) exercises routes those suites already cover, and no code
|
|
in `classroom.js`/`enrollment.js`/`notifications.js` was touched.
|
|
|
|
## Frontend, Lab image, nested Docker, k3s
|
|
|
|
Frontend: `npm run build` clean, no code changes this phase (content/schema only). Lab image:
|
|
rebuilt for every fresh-stack test/rehearsal run this phase; standalone Lab boot and real bash
|
|
task completion proven in the multi-student rehearsal (Students A/B/C); nested Docker proven in
|
|
both the end-to-end rehearsal's real container-networking fix and the earlier ROOT 04 content
|
|
itself; k3s health reconfirmed unaffected (the Phase 6E rehearsal's own k3s-health assertion was
|
|
rerun fresh, post-Phase-6F-migrations, and still passes).
|
|
|
|
## Resource observations (development-environment only, not production capacity numbers)
|
|
|
|
Real Lab boot-to-ready during rehearsals: consistently well under the existing dev-stack norm
|
|
established in Phase 6D/6E (no regression from added content — content changes don't touch Lab
|
|
boot code). Three concurrent student Labs in the multi-student rehearsal (A idle, B and C active
|
|
simultaneously) provisioned and ran without contention on a single dev host. No anomalies,
|
|
crashes, or resource exhaustion observed. These are qualitative development-environment
|
|
observations only — real capacity planning remains the dedicated production-server benchmark's
|
|
job, unchanged from every prior phase's own caveat.
|
|
|
|
## New application code and why
|
|
|
|
None. Every V1 integration requirement (orientation content, practice-bank framing, the
|
|
Capstone/ROOT 09 edge, the stale-status correction, the ROOT 08 exclusion) was satisfiable with
|
|
the existing `courses`/`course_modules`/`module_activities` schema and the existing `visibility`/
|
|
`status`/`is_required`/`prerequisites` mechanisms — consistent with this phase's own "integrate,
|
|
don't build" mandate.
|
|
|
|
## Documentation
|
|
|
|
New: `ROOT_V1_CURRICULUM_MANIFEST.md`, `ROOT_V1_PREREQUISITE_MAP.md`, `ROOT_V1_ASSESSMENT_MAP.md`,
|
|
`ROOT_V1_SYLLABUS.md`, `ROOT_V1_INSTRUCTOR_GUIDE.md`, `ROOT_V1_STUDENT_REQUIREMENTS.md`,
|
|
`ROOT_V1_INSTRUCTOR_LED_PILOT.md`, `WINTER_BREAK_CAMP_CURRICULUM_OPTIONS.md`, this document.
|
|
Updated: `ROOT_PROGRAM_ARCHITECTURE.md` (course-sequence table, prerequisite-chain notes),
|
|
`ROOT_PILOT_CURRICULUM.md` (self-paced-readiness correction), `ROOT_PROGRAM_DURATION_MODEL.md`
|
|
(real post-integration totals), `ROOT_CAPSTONE_READINESS.md` (§1b, the new third gate).
|
|
Reviewed, no change needed: `ROOT_FOUNDATIONS_PILOT_READINESS.md`, `COURSE_AUTHORING_STANDARD.md`,
|
|
`ENGINEERING_SOP.md`, `REMOTE_AND_SELF_PACED_ARCHITECTURE.md`, `platform/README.md`'s
|
|
architecture sections (its test list was updated — see below).
|
|
|
|
## Known limitations
|
|
|
|
- **The legacy six-stage Capstone unlock_rule and the course-layer prerequisite chain are not
|
|
fully congruent**: `root-07-m01`'s `services-mcq` and all 5 of `root-07-m02`'s configuration
|
|
scenarios gate the legacy assessment-start route but are not course-layer prerequisites of
|
|
anything on the path to `root-capstone`. Found via this phase's own end-to-end rehearsal;
|
|
documented, not fixed — closing it is a real product decision (extend the legacy stage list,
|
|
or add ROOT 07 as a course-layer Capstone prerequisite) outside a "polish and integrate" phase.
|
|
- ROOT 11's remaining six modules (CI/CD, GitOps, IaC) require lab infrastructure not yet built —
|
|
unchanged, explicitly out of scope again this phase.
|
|
- Instructor-led vs. self-paced timing remains prose in Instructor Notes, not a database field —
|
|
unchanged from every prior phase.
|
|
- No placement testing or instructor-override UI — explicitly out of scope; the age-independence
|
|
requirement (Step 29) is satisfied architecturally (no age/grade column, no age-based gate
|
|
anywhere in enrollment) rather than through a placement mechanism, since none was authorized.
|
|
|
|
## Recommended Phase 7 scope
|
|
|
|
Phase 7 is explicitly the business/product architecture layer per this phase's own authorization
|
|
— formalizing the INIT_/COMPILE_/ROOT_/BOOTCAMP_ family model, delivery-mode separation from
|
|
curriculum, and (informed by `docs/WINTER_BREAK_CAMP_CURRICULUM_OPTIONS.md`) whatever camp/
|
|
registration/payment platform work the business decides to build around ROOT_ V1's now-proven
|
|
Option A (Linux & Systems Foundations Camp) as a first commercial offering.
|