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]>
3.5 KiB
3.5 KiB
ROOT_ V1 Prerequisite Map
Phase 6F Step 6 — the full, real, server-enforced V1 prerequisite graph, generated from the live
courses/course_modules tables (not hand-drawn), and the QA performed against it.
Course-level graph
ROOT 01 → ROOT 02 → ROOT 03 → ROOT 04 → ROOT 05 → ROOT 06 ─┬─→ ROOT 07
├─→ ROOT 09 ─┐
└─→ ROOT 10 ─┼─→ ROOT 12 → CAPSTONE
│ (also requires
ROOT 11 (bonus, │ ROOT 09 ─────┘
non-gating, jointly)
after ROOT 10)
ROOT 08 (Storage & Scheduling): excluded from V1 (visibility=draft). Its own prerequisite
(ROOT 07-m03) still resolves if ever re-included, but nothing in V1 depends on it.
CAPSTONE's real prerequisite array is ['root-12-real-ops', 'root-09-kubernetes-security'] —
both required, order-independent (see Step 7 decision in ROOT_V1_CURRICULUM_MANIFEST.md).
Module-level cross-course edge
root-09-m03-network-and-supplychain-security's prerequisites include
root-07-m04-ingress-networkpolicy-foundations (not just its own course's root-09-m02) — a
real, intentional cross-course module dependency (network policy concepts build on Ingress
concepts taught in ROOT 07). This is the one module-level edge that crosses a course boundary in
the V1 graph.
QA performed
- No cycles:
infra/scripts/validate-course-content.js's cycle-detection pass (course-level and module-level, run separately) — 0 errors, confirmed after every migration this phase. - No missing nodes: every
prerequisitesarray entry resolves to a real course/module id — same validator, "every course/module prerequisite id resolves to a real course/module" check. - No excluded course blocking V1 progression: ROOT 08 is referenced by nothing (audited by
grep across every course's and module's
prerequisitesarray before excluding it) — itsvisibility=draftchange cannot silently lock anything downstream. - No hidden prerequisite through ROOT 08/11: confirmed the same way — grepped for
root-08androot-11-m01inside every other course/module'sprerequisitesarray; zero hits in either direction. - Server-side enforcement:
buildCourseTree()'sprerequisitesSatisfied()is the single computation both the student and instructor views read — proven end to end for the full ROOT 01→02→03→04→05 chain ine2e-phase6e.jsand for ROOT 06→09/10→12→Capstone ine2e-phase6b.jsande2e-phase6f.js(Step 31). - Direct API cannot bypass:
POST /api/student/activities/:id/completeresolves the activity's own course+module through the samebuildCourseTree()and 403s if either is locked (the Phase 6E fix) — re-verified this phase against the NEW root-capstone/root-09 edge specifically (a direct attempt to mark aroot-capstone-m02activity complete before root-09 is done is rejected; seee2e-phase6f.js). - Optional activities never unexpectedly block progression:
is_required=falseactivities are excluded from a module's/course's "required" set (totals()); confirmed for ROOT 09's own optional CKS-advanced labs and ROOT 08's excluded (draft) content — neither can block a V1 course from reachingcomplete=true.