Files
rootnode-academy/docs/ROOT_V1_PREREQUISITE_MAP.md
T
ced4568andClaude Sonnet 5 d066410451
Release to Docker Hub / Build & Push Docker Image (push) Canceled after 0s
Release to Docker Hub / Create GitHub Release (push) Canceled after 0s
docs(phase6f): document ROOT_ V1 pilot readiness
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]>
2026-08-26 18:33:46 -05:00

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 prerequisites array 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 prerequisites array before excluding it) — its visibility=draft change cannot silently lock anything downstream.
  • No hidden prerequisite through ROOT 08/11: confirmed the same way — grepped for root-08 and root-11-m01 inside every other course/module's prerequisites array; zero hits in either direction.
  • Server-side enforcement: buildCourseTree()'s prerequisitesSatisfied() 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 in e2e-phase6e.js and for ROOT 06→09/10→12→Capstone in e2e-phase6b.js and e2e-phase6f.js (Step 31).
  • Direct API cannot bypass: POST /api/student/activities/:id/complete resolves the activity's own course+module through the same buildCourseTree() 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 a root-capstone-m02 activity complete before root-09 is done is rejected; see e2e-phase6f.js).
  • Optional activities never unexpectedly block progression: is_required=false activities 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 reaching complete=true.