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]>
This commit is contained in:
2026-08-26 18:33:46 -05:00
co-authored by Claude Sonnet 5
parent bd55b74b4f
commit 8a42bc6748
14 changed files with 893 additions and 62 deletions
+185
View File
@@ -0,0 +1,185 @@
# 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.
+13
View File
@@ -27,6 +27,19 @@ This module derives its own completion the same way every other lesson-only modu
capstone assessment engine checks before allowing a start (see §3 below for why these two gates
are deliberately independent).
## 1b. A third, independent gate added in Phase 6F
Phase 6F added `root-09-kubernetes-security` to `root-capstone`'s own `courses.prerequisites`
array (alongside the pre-existing `root-12-real-ops`) — a course-content-model-level gate,
distinct from both this readiness module (still non-gating) and the curriculum-path
`unlock_rule` in §3 below (still unchanged: six K8s scenario stages, no security stage). This
means the `root-capstone` COURSE itself (visible in the student/instructor course tree) is now
locked until ROOT 09 is also complete, even though the underlying `/api/assessments/rootnode-
capstone/start` route's own gate did not change. See `docs/ROOT_V1_CURRICULUM_MANIFEST.md`
Step 7 for the full evidence and reasoning, and `031_phase6f_capstone_security_prerequisite.sql`
for the migration. This adds a third independent layer rather than blurring the existing two —
consistent with this document's own §3 reasoning for keeping enforcement layers separate.
## 2. What was NOT built
No answers, no exact scenario IDs from the current pool, no capstone-specific hint content
+13 -10
View File
@@ -1,5 +1,10 @@
# ROOT Pilot Curriculum — Authoritative Manifest
**Updated for Phase 6F**: `docs/ROOT_V1_CURRICULUM_MANIFEST.md` is now the canonical technical
definition of ROOT_ V1 scope (what's included/excluded and why). This document's own course-by-
course pilot table below remains accurate but its Phase 6E-era claim about three practice-bank
modules needing instructor-led delivery is now stale — see the correction immediately below.
This is the single authoritative answer to "what are we actually teaching in the first paid
pilot." It uses honest READY / PARTIAL / DEFERRED / NOT IN PILOT labels — nothing here is
marketed as more finished than it is. See
@@ -7,17 +12,15 @@ marketed as more finished than it is. See
means and [`docs/ROOT11_DEVOPS_PLATFORM_SCOPE.md`](ROOT11_DEVOPS_PLATFORM_SCOPE.md) for the
ROOT 11 scope decision referenced below.
## Pilot delivery mode: instructor-led (cohort-based), with a fully self-paced foundation
## Pilot delivery mode: fully self-paced-capable as of Phase 6F
The first pilot is scoped as **instructor-led** as its recommended default, not because most of
the curriculum requires it — as of Phase 6E, ROOT 01-04 (the entire foundational half) and every
Kubernetes/security/troubleshooting/real-ops/capstone module EXCEPT three specific practice-bank
modules meet the full self-paced bar (no "your instructor will explain this" gaps, verified
programmatically). Those three flagged modules — dense hands-on practice banks whose sibling
module in the same course already carries the taught concept — are READY for instructor-led
delivery only; running them live lets an instructor supply framing a self-paced student wouldn't
get. Fully self-paced delivery of those specific modules is deferred to a future phase pending an
authored teaching layer for each. See Section 16 discussion below.
As of Phase 6E, ROOT 01-04 (the entire foundational half) met the full self-paced bar. Three
specific practice-bank modules (`root-06-m01`, `root-07-m01`, `root-10-m02`) were flagged as
instructor-led-only — dense hands-on scenario banks with no lesson framing of their own.
**Phase 6F closed this gap**: each received a short, real intro-lesson activity explaining what
the bank is and how to use it (`docs/ROOT_V1_CURRICULUM_MANIFEST.md` Step 4) — all three, and
their parent courses, are now genuinely self-paced-ready. Instructor-led delivery remains fully
supported and recommended for a first cohort, but is no longer required by any content gap.
## Program: ROOT_ (root-kubernetes-foundations)
+17 -9
View File
@@ -29,15 +29,15 @@ prerequisite chain (01→02→03→04→05) enforced server-side.
| 2 | Linux Administration & Networking | **READY** | Phase 6E: 6 modules, real Linux/networking scenarios, a wired assessment — see `docs/PHASE6E_ROOT_FOUNDATIONS_COMPLETION.md`. Real prerequisite: ROOT 01 complete. |
| 3 | Git & Collaborative Development | **READY** | Phase 6E: 6 modules, real local-Git scenarios (including a real merge conflict and a real local-bare-remote push), a wired assessment. Real prerequisite: ROOT 02 complete. |
| 4 | Containers & Docker | **READY** | Phase 6E: 8 modules using the nested Docker Engine (built and verified Phase 6D, `docs/ROOT_FOUNDATIONS_LAB_STRATEGY.md` §3), real container scenarios, a wired assessment. Real prerequisite: ROOT 03 complete. |
| 5 | Kubernetes Foundations | **PARTIAL** | Phase 6B added a READY front-door module (`root-05-m00-kubernetes-mental-model` — full lesson/demo/knowledge-check/guided-exercise/lab/reflection) sequenced before the existing 20-scenario bare-lab bank (`root-05-m01`), which now sits behind it. |
| 6 | Kubernetes Application Workloads | **PARTIAL** | Phase 6B added a READY `root-06-m02-deployments-scaling-updates` and a PARTIAL `root-06-m03-jobs-cronjobs-daemonsets`, both in front of the existing bare-lab bank. |
| 7 | Kubernetes Networking & Configuration | **PARTIAL** | Phase 6B added a READY `root-07-m03-services-and-service-discovery` and a PARTIAL `root-07-m04-ingress-networkpolicy-foundations`. The existing configuration bank (`root-07-m02`) still has no authored teaching content — an honest, documented gap. |
| 8 | Kubernetes Storage & Scheduling | **PARTIAL** | Phase 6B wired the real scenario content the inventory identified (PV/PVC, StorageClass, taints/tolerations, PDB, quotas/limits) into two new PARTIAL modules — moved off PLANNED for the first time. |
| 9 | Kubernetes Security | **PARTIAL** | Phase 6B built the 22-scenario CKS-style bank into four modules (Security Model & SecurityContext — READY; ServiceAccounts & RBAC, Network & Supply Chain Security, Cluster Hardening & Runtime — all PARTIAL), classifying scenarios CORE/GUIDED/INDEPENDENT/ADVANCED/ASSESSMENT-BANK rather than exposing them as 22 disconnected tasks — moved off PLANNED. |
| 10 | Kubernetes Troubleshooting & Observability | **PARTIAL** | The Phase 6A gold-standard module (READY, unmodified) plus a new PARTIAL `root-10-m03-troubleshooting-framework` (the generalized Observe/Evidence/Hypothesis/Test/Repair/Validate/Prevent framework) and the existing bare-lab bank, now sequenced last. |
| 11 | DevOps & Platform Engineering Foundations | **PLANNED** | No CI/CD/IaC/GitOps scenario content exists anywhere in this repository — unchanged, out of Phase 6B's authoring scope. |
| 12 | RootNode Real Ops | **PARTIAL** | Phase 6B added an incident-response framing lesson and a post-incident reflection wrapping the existing 4-scenario module — the incidents themselves are unchanged, still deliberately un-guided. |
| 13 | ROOT Capstone — Operate and Recover a Production-Like Environment | **PARTIAL** | Phase 6B added a READY Capstone Readiness module (orientation, no answers) sequenced before the existing capstone assessment module — see `docs/ROOT_CAPSTONE_READINESS.md`. |
| 5 | Kubernetes Foundations | **READY** (Phase 6F) | Phase 6B added a READY front-door module (`root-05-m00-kubernetes-mental-model`) sequenced before the 20-scenario bare-lab bank (`root-05-m01`), which itself already carried a lesson+reflection wrapper — Phase 6F's audit found both modules genuinely ready and corrected the stale course-level status. |
| 6 | Kubernetes Application Workloads | **READY** (Phase 6F) | Phase 6B's READY `root-06-m02` and `root-06-m03` remain unchanged; Phase 6F gave the practice-bank `root-06-m01` a real intro-lesson activity, closing the last gap. |
| 7 | Kubernetes Networking & Configuration | **READY** (Phase 6F) | Phase 6C already converted `root-07-m02` to a full teaching module; Phase 6F gave the practice-bank `root-07-m01` a real intro-lesson activity, closing the last gap. |
| 8 | Kubernetes Storage & Scheduling | PARTIAL — **excluded from ROOT_ V1** | Phase 6B's two PARTIAL modules are unchanged; Phase 6F excluded the whole course from ROOT_ V1 (`visibility=draft`) since nothing downstream requires it — see `docs/ROOT_V1_CURRICULUM_MANIFEST.md`. |
| 9 | Kubernetes Security | **READY** (Phase 6F) | Phase 6B's four modules (all real CKS-style content) were already individually ready; Phase 6F's audit corrected a stale course-level status field. Now also a required Capstone prerequisite (Step 7). |
| 10 | Kubernetes Troubleshooting & Observability | **READY** (Phase 6F) | The Phase 6A gold-standard module and Phase 6C's `root-10-m03` remain unchanged; Phase 6F gave the practice-bank `root-10-m02` a real intro-lesson activity, closing the last gap. |
| 11 | DevOps & Platform Engineering Foundations | **PARTIAL, by design** | One real orientation module exists (lesson/knowledge-check/reflection); Phase 6F repositioned it explicitly as an optional bonus module, not a promise of a full course — see `docs/ROOT_V1_CURRICULUM_MANIFEST.md`. Deeper CI/CD/IaC/GitOps content remains unbuilt, unchanged. |
| 12 | RootNode Real Ops | **READY** (Phase 6F) | Phase 6B's framing lesson/reflection wrapping the existing 4-scenario module was already complete; Phase 6F's audit corrected a stale course-level status. |
| 13 | ROOT Capstone — Operate and Recover a Production-Like Environment | **READY** (Phase 6F) | Phase 6B's Capstone Readiness module was already complete; Phase 6F's audit corrected a stale course-level status and added ROOT 09 as a joint course-level prerequisite alongside ROOT 12 — see `docs/ROOT_CAPSTONE_READINESS.md` §1b. |
No course is marked READY at the course level in Phase 6A — that's honest: a course only earns
READY once every module in it has real teaching content, and Phase 6A deliberately built exactly
@@ -80,6 +80,14 @@ real student, verified live on both a fully-completed student and a fresh one. A
gap in the direct-API completion route (found while proving this chain, unrelated to any single
phase's own content) is also fixed this phase — see that document for detail.
**Updated for Phase 6F** (`docs/ROOT_V1_CURRICULUM_MANIFEST.md`): ROOT 05, 06, 07, 09, 10, 12,
and Capstone all reached genuine course-level READY status (a stale-status audit correction plus
real intro-lesson authoring for three practice-bank modules). ROOT 08 was excluded from ROOT_ V1
(`visibility=draft`). ROOT 11 stays PARTIAL by design, repositioned as an optional orientation
bonus. `root-capstone`'s own prerequisites now also require ROOT 09 (Security) complete,
alongside the pre-existing ROOT 12 requirement. A new required orientation module
(`root-01-m00-welcome-to-root`) now precedes ROOT 01's original first module.
## Deviations from the spec's suggested sequence, and why
The authorization's suggested sequence listed Security (09) after Storage/Scheduling (08) and
+40 -43
View File
@@ -1,48 +1,47 @@
# ROOT_ Program Duration Model
Phase 6E §28 — recalculated from actual authored activities in the live database. Run:
`SELECT c.course_id, SUM(a.estimated_duration_minutes) ... GROUP BY c.course_id` against the
current schema, same method as Phase 6D's original version of this document.
Phase 6F Step 25 (built on Phase 6E §28) — recalculated from actual authored activities in the
live database after Phase 6F's curriculum integration (orientation module + the three
practice-bank intro lessons). Run: `SELECT c.course_id, SUM(a.estimated_duration_minutes) ...
GROUP BY c.course_id` against the current schema, same method as every prior version of this
document.
## Per-course totals (self-paced estimate)
| Course | Activities | Minutes | Hours |
|---|---|---|---|
| ROOT 01 Computing & Linux Foundations | 35 | 338 | 5.6 |
| ROOT 02 Linux Administration & Networking | 37 | 388 | 6.5 |
| ROOT 03 Git & Collaborative Development | 31 | 312 | 5.2 |
| ROOT 04 Containers & Docker | 43 | 444 | 7.4 |
| ROOT 05 Kubernetes Foundations | 28 | 403 | 6.7 |
| ROOT 06 Kubernetes Application Workloads | 22 | 295 | 4.9 |
| ROOT 07 Kubernetes Networking & Configuration | 27 | 353 | 5.9 |
| ROOT 08 Kubernetes Storage & Scheduling | 15 | 250 | 4.2 |
| ROOT 09 Kubernetes Security | 40 | 745 | 12.4 |
| ROOT 10 Kubernetes Troubleshooting & Observability | 20 | 277 | 4.6 |
| ROOT 11 DevOps & Platform Engineering | 3 | 35 | 0.6 |
| ROOT 12 Real Ops | 6 | 115 | 1.9 |
| ROOT Capstone | 5 | 120 | 2.0 |
| **Total (all authored content)** | **312** | **4,075** | **67.9** |
| Course | Activities | Minutes | Hours | In ROOT_ V1? |
|---|---|---|---|---|
| ROOT 01 Computing & Linux Foundations | 38 | 353 | 5.9 | Yes |
| ROOT 02 Linux Administration & Networking | 37 | 388 | 6.5 | Yes |
| ROOT 03 Git & Collaborative Development | 31 | 312 | 5.2 | Yes |
| ROOT 04 Containers & Docker | 43 | 444 | 7.4 | Yes |
| ROOT 05 Kubernetes Foundations | 28 | 403 | 6.7 | Yes |
| ROOT 06 Kubernetes Application Workloads | 23 | 299 | 5.0 | Yes |
| ROOT 07 Kubernetes Networking & Configuration | 28 | 356 | 5.9 | Yes |
| ROOT 08 Kubernetes Storage & Scheduling | 15 | 250 | 4.2 | **No — excluded** |
| ROOT 09 Kubernetes Security | 40 | 745 | 12.4 | Yes (required for Capstone) |
| ROOT 10 Kubernetes Troubleshooting & Observability | 21 | 280 | 4.7 | Yes |
| ROOT 11 DevOps & Platform Engineering (orientation only) | 3 | 35 | 0.6 | Yes (optional bonus) |
| ROOT 12 Real Ops | 6 | 115 | 1.9 | Yes (required for Capstone) |
| ROOT Capstone | 5 | 120 | 2.0 | Yes |
| **Total (all authored content, incl. excluded ROOT 08)** | **318** | **4,100** | **68.3** | |
| **ROOT_ V1 total (excludes ROOT 08)** | **303** | **3,850** | **64.2** | |
**ROOT Foundations (01-04) subtotal: 146 activities, 1,482 minutes, 24.7 hours.** This is now
real, measured data — Phase 6D's own version of this document correctly flagged the eventual
"20-25 hour" range as a planning ESTIMATE pending real authorship; the actual total (24.7 hours)
landed inside that estimated range.
ROOT 01's activity/minute count grew by 3 activities / 15 minutes this phase (the new
`root-01-m00-welcome-to-root` orientation module). ROOT 06/07/10 each grew by 1 activity / 3-4
minutes (their new practice-bank intro lessons). See `docs/ROOT_V1_CURRICULUM_MANIFEST.md` for
why.
**ROOT Foundations (01-04) subtotal: 149 activities, 1,497 minutes, 25.0 hours.**
## Self-paced vs. instructor-led
As in Phase 6D's version of this document: the figures above are self-paced estimates (the sum
of each activity's own `estimated_duration_minutes`). Instructor-led classroom time is still not
a separate summable database field — every Instructor Notes section documents approximate live-
facilitation timing in prose (e.g. ROOT 02 Module 3's "25 minutes read; 15-20 minutes live with
discussion — longer than a typical lesson, deliberately"), but this remains per-activity
guidance embedded in Markdown, not a column a query can sum. A future phase could add a distinct
Unchanged from Phase 6D/6E: the figures above are self-paced estimates (the sum of each
activity's own `estimated_duration_minutes`). Instructor-led classroom time is still not a
separate summable database field — every Instructor Notes section documents approximate live-
facilitation timing in prose. A future phase could add a distinct
`estimated_duration_minutes_instructor_led` column if precise classroom scheduling becomes a
real, measured need.
As a conservative approximation, instructor-led delivery of the full 67.9-hour curriculum should
be expected to run somewhat longer once live discussion and demonstration time is added —
consult the relevant Instructor Notes before scheduling a live cohort session, don't treat the
self-paced total as a classroom-time promise.
real, measured need. See `docs/ROOT_V1_INSTRUCTOR_LED_PILOT.md` for the cohort packaging this
duration model supports.
## What this is NOT
@@ -51,12 +50,10 @@ Not a marketing duration, not a promise, not a certification-hours figure.
`docs/COURSE_AUTHORING_STANDARD.md` §4) — this total will get more accurate as real completion-
time data accumulates from actual students, not before.
## Program completeness
## Program completeness — ROOT_ V1 vs. the full authored program
With ROOT 01-04 now authored, the ROOT_ program's structured curriculum (excluding ROOT 08,
deliberately deferred as non-capstone-gating, and ROOT 11 modules 2-7, deferred pending future
lab infrastructure — see `docs/ROOT_PILOT_CURRICULUM.md`) now runs a complete, measured
beginning-to-advanced path: Linux fundamentals → Linux administration/networking → Git →
containers → Kubernetes → security → troubleshooting → real operations → capstone. This is the
first phase where the FULL foundational-to-capstone path has real, authored content and a real
measured duration at every step, not a partial curriculum starting mid-stack.
ROOT_ V1 (`docs/ROOT_V1_CURRICULUM_MANIFEST.md`) is 64.2 of the program's 68.3 authored hours —
everything except ROOT 08, deliberately excluded as non-Capstone-gating and not yet authored to
V1 standard. ROOT 11's remaining six modules were never counted in either total (they don't
exist yet, unlike ROOT 08's PARTIAL-but-real content) — see `docs/ROOT_CURRICULUM_COVERAGE_
MATRIX.md` for the honest READY/PARTIAL/PLANNED breakdown across the entire program.
+53
View File
@@ -0,0 +1,53 @@
# ROOT_ V1 Assessment Map
Phase 6F Step 8 — every formal assessment in ROOT_ V1, what it actually tests, and how it
relates to course completion. Formative checks (knowledge checks, guided exercises) exist inside
every module and are not separately catalogued here — see `docs/COURSE_CONTENT_MODEL.md` for
how they're modeled.
| Course | Assessment | Required scenarios | Random pool | Hints | Duration |
|---|---|---|---|---|---|
| ROOT 01 | `rootnode-linux-foundations-assessment` | linux-shell-basics, linux-permissions-foundations | 2 from a 4-task pool + 2 MCQ | disabled | 30 min |
| ROOT 02 | `rootnode-linux-networking-assessment` | linux-network-inspection, linux-troubleshooting-framework | 2 from a 4-task pool + 2 MCQ | disabled | 35 min |
| ROOT 03 | `rootnode-git-fundamentals-assessment` | git-everyday-basics, git-branching-and-merge | 1 task + 2 MCQ | disabled | 35 min |
| ROOT 04 | `rootnode-containers-assessment` | docker-cli-basics, docker-build-image | 2 from a 3-task pool + 2 MCQ | disabled | 40 min |
| ROOT 09 | `rootnode-security-assessment` | cks-pod-security-context, cks-rbac-least-privilege, cks-network-policy | 2+1+2 across three CKS-style pools | disabled | 60 min |
| — | `rootnode-capstone` | rootnode-runaway-monitor, broken-deployment, rootnode-probe-port-mismatch, rootnode-enforce-limits | 1 each from workloads/config/troubleshooting pools | flagged (visible but logged) | 90 min |
| — | `rootnode-quick-assessment` | none | draws from workloads/networking/troubleshooting/real-ops pools | disabled | 60 min |
`rootnode-quick-assessment` is a pre-existing, general Kubernetes proficiency check not wired to
any single course's completion — it predates the course-content-model layer and is left as-is
(unaffected by this phase, still reachable via `/api/assessments/rootnode-quick-assessment/start`
for practice/diagnostic use, e.g. by an instructor assessing a transfer student's baseline).
## Relationship to course completion
Every course-gating assessment (ROOT 01/02/03/04/09) is wired to exactly one `assessment`-type
activity (`completion_behavior = 'auto_assessment'`) inside that course's last module. Passing
it is derived the same way a scenario Lab's completion is derived — from a real
`achievements` row written on a real pass — never a second, independently-tracked flag
(`COURSE_CONTENT_MODEL.md` §4).
## What's a real, server-authoritative draw vs. fixed
Every assessment's `random` pool is drawn fresh per attempt, server-side, at `POST /api/
assessments/:id/start` — confirmed for ROOT 02's pool specifically in `e2e-phase6e.js`
("ROOT 02 assessment pool matches the documented design") and for the security assessment in
`e2e-phase6c.js` ("two independent students each get their own 9-scenario draw, and it is
server-authoritative"). `required` scenarios are always included, every attempt, for every
student — they are the non-negotiable floor of what "passing this course's assessment" means.
## Coverage gaps and redundancy, evaluated honestly
- **No assessment gap found** in the V1 required sequence: every required course (01-04, 09) has
one, sized to its content (30-60 min matching course depth), and none were added merely for
symmetry — `ROOT_PILOT_CURRICULUM.md`'s existing per-course rationale is unchanged this phase.
- **ROOT 05, 06, 07, 10, 12 have no formal timed assessment** — their real hands-on Labs plus the
Capstone's own scenario pool (drawn partly from workloads/configuration/troubleshooting
content) already exercise this material under timed, graded conditions at the end of the
program. Adding a redundant mid-program timed exam for each would test the same skill twice
without new instructional purpose — deliberately not built.
- **`rootnode-quick-assessment` and `rootnode-capstone` share scenario pools** with several
course-level Labs (by original Phase 1-5 design, unchanged) — this is intentional reuse
(`ROOT_CURRICULUM_COVERAGE_MATRIX.md`'s documented "scenario reused across activities" list),
not accidental duplication.
+138
View File
@@ -0,0 +1,138 @@
# ROOT_ V1 Curriculum Manifest
Phase 6F — the canonical technical definition of what ROOT_ V1, the first sellable version of
the ROOT_ program, actually includes. Where this disagrees with an older doc (`ROOT_PILOT_
CURRICULUM.md`, `ROOT_PROGRAM_ARCHITECTURE.md`), this document is the current source of truth;
those documents have been updated to point back here.
## V1 course list
| # | Course | In V1? | Status | Required? | Prerequisite(s) | Duration (38-40 activities/course avg) |
|---|---|---|---|---|---|---|
| 1 | Computing & Linux Foundations | Yes | READY | Required | — | 353 min (38 activities) |
| 2 | Linux Administration & Networking | Yes | READY | Required | ROOT 01 | 388 min (37) |
| 3 | Git & Collaborative Development | Yes | READY | Required | ROOT 02 | 312 min (31) |
| 4 | Containers & Docker | Yes | READY | Required | ROOT 03 | 444 min (43) |
| 5 | Kubernetes Foundations | Yes | READY | Required | ROOT 04 | 403 min (28) |
| 6 | Kubernetes Application Workloads | Yes | READY | Required | ROOT 05 | 299 min (23) |
| 7 | Kubernetes Networking & Configuration | Yes | READY | Required | ROOT 06 | 356 min (28) |
| 8 | Kubernetes Storage & Scheduling | **No** | PARTIAL | Excluded | — | 250 min (15) — excluded from V1 total |
| 9 | Kubernetes Security | Yes | READY | Required for Capstone | ROOT 06 | 745 min (40, includes CKS-depth optional labs) |
| 10 | Kubernetes Troubleshooting & Observability | Yes | READY | Required | ROOT 06 | 280 min (21) |
| 11 | DevOps & Platform Engineering (orientation) | Yes | PARTIAL (by design) | Optional bonus | ROOT 10 (non-gating) | 35 min (3) |
| 12 | RootNode Real Ops | Yes | READY | Required for Capstone | ROOT 10 | 115 min (6) |
| — | ROOT Capstone | Yes | READY | Terminal | ROOT 12 AND ROOT 09 | 120 min (5) |
**ROOT_ V1 total: 3,850 minutes = 64.2 structured hours** (12 courses, excludes ROOT 08's 250
min). Program-wide total including the excluded ROOT 08: 4,100 minutes = 68.3 hours. Full
per-module breakdown in `docs/ROOT_PROGRAM_DURATION_MODEL.md`.
Every V1-included course's real per-module evidence (activity counts, lab list, assessment
wiring) lives in `docs/ROOT_FOUNDATIONS_PILOT_READINESS.md` (ROOT 01-04) and `docs/
ROOT_CURRICULUM_COVERAGE_MATRIX.md` (ROOT 05-13). This manifest is the scope decision; those
documents are the evidence.
## ROOT 08 — excluded from V1 (Step 2)
ROOT 08 (Storage & Scheduling) exists with 2 PARTIAL modules (bare scenario banks, no lesson
scaffolding) but critically **is not required by anything downstream** — ROOT 09 and ROOT 10
both branch directly off ROOT 06 by design (see `ROOT_PROGRAM_ARCHITECTURE.md`'s "deviations
from the suggested sequence"). Leaving it visible mid-sequence (course #8, between two READY
courses) would look to a self-paced student like a course they skipped, when V1 was never
designed to require it.
**Mechanism**: `visibility = 'draft'` on the course and both its modules — the existing hard
gate (`COURSE_CONTENT_MODEL.md` §6), excluded from every student-facing query, still fully
visible/manageable for instructors. No content was deleted; this is reversible the moment ROOT
08 gets the same authoring pass ROOT 01-04 got.
## ROOT 11 — included, repositioned as orientation-only bonus (Step 3)
ROOT 11 has exactly one real, finished, self-paced-ready module (lesson + knowledge check +
reflection) bridging "systems administration" to "platform engineering thinking." The other six
designed modules (CI/CD, GitOps, IaC) require lab infrastructure not yet built and are
explicitly out of Phase 6F's scope (per the authorization's own DO-NOT-BUILD list).
**Decision**: keep it in V1, but its course description was rewritten to say plainly that it is
a single orientation module, not a full DevOps course, and that the remaining six are designed
but not yet built. It stays `status = 'partial'` (honest) and `visibility = 'published'`
(real, finished content worth keeping visible). Nothing downstream requires it — a student who
skips it loses nothing gating-wise.
## The three instructor-led-only practice banks (Step 4)
`root-06-m01-deployments-and-workloads`, `root-07-m01-services-and-networking`, and
`root-10-m02-general-troubleshooting` were flagged in Phase 6E as instructor-led-only: bare
scenario banks with zero lesson/demonstration/knowledge-check framing.
**Critical finding before any fix was applied**: these three modules' scenario_ids are not
generic supplemental practice — they are the *literal* content of the pre-existing
`scenarios/rootnode-path.json` "workloads"/"networking"/"troubleshooting" stages, the older,
separate mechanism that gates whether a student can even **start** the `rootnode-capstone`
assessment. An initial attempt to reclassify them `is_required = false` (making them optional
for course completion) was caught during this phase's own audit before being committed: it would
have let a self-paced student reach a course-tree-"complete" state while remaining silently,
confusingly blocked from the Capstone by the older stage gate. See `platform/api/migrations/
030_phase6f_capstone_gate_correction.sql` for the full self-correction record.
**Actual fix (Option A, not B)**: each module kept its activities `is_required = true` and
received one short intro-lesson activity (`*-a00-lab-bank-intro`) explaining what the bank is,
why it has no per-scenario teaching, and how to use it — the minimum real authoring needed to
be honestly self-paced-ready, not a reclassification. All three modules, and their parent
courses (ROOT 06, 07, 10), now genuinely earn `status = 'ready'`.
## Course-level status audit correction (Step 0)
Auditing `courses.status` against actual module-level status (not trusting prior phase reports)
found it had drifted stale for ROOT 05, 06, 07, 09, 10, 12, and Capstone — every module in each
had already reached real `ready` content, but the course-level field was never bumped. Corrected
in `029_phase6f_root_v1_integration.sql`; no new content was required for ROOT 05, 09, 12, or
Capstone (already fully authored), only for 06/07/10 (the practice-bank intro lessons above).
## Capstone gate review (Step 7)
Two separate, independent gates protect the Capstone:
1. **The legacy stage-based gate** (`scenarios/rootnode-path.json`'s `unlock_rule`, checked by
`POST /api/assessments/rootnode-capstone/start`): six K8s scenario stages (foundation,
workloads, networking, configuration, troubleshooting, real-ops). **Left unchanged** this
phase — it has no natural "security stage" without new scenario-bank authoring, out of scope.
2. **The course-layer gate** (`courses.prerequisites` on `root-capstone`, checked by
`buildCourseTree()`): previously `{root-12-real-ops}` only.
**Decision: strengthened.** `root-capstone.prerequisites` now also requires
`root-09-kubernetes-security`. Evidence: the Capstone's own scenario pool
(`assessment_definitions.pool_spec`) has zero overlap with the security assessment's CKS-style
pool — a student could pass the Capstone having never touched a security scenario. ROOT 09 only
reached genuine `ready` status this same phase, so requiring it any earlier would have gated on
unfinished content. ROOT 09 and ROOT 12 are already sibling courses (both prerequisite = ROOT
06), so this adds no new sequencing burden — either order, or in parallel. See `031_phase6f_
capstone_security_prerequisite.sql`.
## Program + Lab orientation (Steps 9-11)
No orientation content existed anywhere before this phase (audited by grep across
`content/root`). Added `root-01-m00-welcome-to-root`, a new required front-door module — the
same pattern `root-05-m00` already established — with two lessons (program overview and Lab
lifecycle) and a knowledge check, sequenced before what was previously ROOT 01's first module.
See `032_phase6f_root_v1_orientation.sql`.
## ROOT_ V1 curriculum version (Step 26)
No second versioning system was built — this manifest reuses the existing per-row `version`
integer (`courses`/`course_modules`/`module_activities`), unchanged in convention from
`COURSE_CONTENT_MODEL.md` §6b. "ROOT_ V1" itself is a scope label (which course/module ids are
included, defined by this document), not a new database concept. What's frozen for a historical
enrollment is exactly what was already true pre-Phase-6F: a student's `activity_completions`
row stays valid across a later semantic edit to the same `activity_id`, keyed by the stable id,
not a snapshot. A future "V1.1" content correction follows the same rule `COURSE_CONTENT_MODEL.md`
§6b already documents — bump `version` on the changed row for a semantic edit, skip it for a
typo-only fix. A future V1 SCOPE change (adding/removing a course from the manifest) is a change
to this document plus a `visibility`/`prerequisites` migration, exactly like ROOT 08's exclusion
this phase — not a new mechanism to build.
## What this manifest deliberately does not cover
Pricing, registration, marketing copy, and camp scheduling are out of scope for this document —
see `docs/WINTER_BREAK_CAMP_CURRICULUM_OPTIONS.md` and `docs/ROOT_V1_INSTRUCTOR_LED_PILOT.md`
for delivery packaging, and Phase 7 for the business/product architecture layer.
+111
View File
@@ -0,0 +1,111 @@
# ROOT_ V1 Instructor Guide
Phase 6F Step 12 — a practical guide for teaching ROOT_ V1. This does not duplicate any
individual module's own Instructor Notes (every lesson/lab content file ends with an
`## Instructor Notes` section — facilitation tips, timing, common mistakes); it covers what
spans the whole program instead.
## Program overview & audience
See `docs/ROOT_V1_SYLLABUS.md` for the full course sequence, outcomes, and duration. Audience is
approximately age 15+ through adults — readiness (comfort with a keyboard, following multi-step
instructions), not age, is the real gate.
## Using CurriculumView
The instructor curriculum view (`/admin`, Curriculum tab) shows every course/module/activity for
a given student or cohort with the exact same lock/completion state the student sees — plus
`instructor_notes` on every activity (never shown to students). Use it to see precisely where a
student is stuck before a help request even comes in.
## Preparing Labs
Use **Prepare Labs** (classroom/cohort view) to provision every enrolled student's disposable
Lab ahead of a session, rather than each student launching cold when class starts — this was
built and load-tested in Phase 2B and confirmed to run concurrently across a full cohort.
## Classroom workflow
1. Prepare Labs before the session starts.
2. Students work through the current module at their own pace; you see live progress per
student in the classroom view.
3. A student's **Need Help** request notifies you immediately with a category and message —
respond in whatever way your delivery format supports (in person, chat, screen share).
4. If a Lab environment itself seems broken for a student (not just the task being hard), an
instructor can reset it the same way a student can (Reset Scenario & Environment) — this
never touches the student's academic progress.
5. At the end of a session, cohort Labs can be destroyed in bulk (build/reprovision cost, not an
academic reset) — progress survives regardless (proven in Phase 2B/5B).
## Self-paced vs. instructor-led
The platform makes no code-level distinction between the two — the same courses, Labs, and
assessments work identically either way. The difference is entirely in who else is watching:
an instructor-led student additionally has a live instructor able to see their progress and
receive help requests. Timing/pacing guidance for instructor-led delivery lives in each
module's own Instructor Notes and in `docs/ROOT_V1_INSTRUCTOR_LED_PILOT.md`.
## Assessments & Capstone
Formal assessments (ROOT 01/02/03/04/09) and the Capstone are timed and hints-limited by design
— see `docs/ROOT_V1_ASSESSMENT_MAP.md`. Do not pre-brief students on the exact random-pool draw;
it's server-authoritative and drawn fresh per attempt specifically so this isn't possible to
game, and pre-briefing undermines what the assessment is actually checking.
## Help-request workflow
`Need Help` categories exist to help you triage at a glance (e.g. `lab_problem` vs. a conceptual
question) — treat a `lab_problem` report as potentially a real broken environment worth
checking yourself before assuming the student made an error.
## Common student issues
- **"My Lab disappeared / lost my work"** — expected if a Lab was recreated; see the student
Lab-orientation content (`root-01-m00-a02-lesson-disposable-lab`) and reassure them their
academic progress is untouched.
- **Confusing a module's optional activities for a blocker** — `is_required=false` activities
(e.g. ROOT 09's advanced CKS labs) never block module/course completion; the platform will
never require them, but some students assume more is mandatory than actually is.
- **Getting to ROOT 09/10/12 out of order** — real, server-enforced module prerequisites inside
a course (e.g. `root-06-m01`'s own practice bank requires `root-06-m02` first) sometimes
surprise a student used to free-form navigation; this is intentional sequencing, not a bug.
## Lab reset/recreate — what it means
Resetting a Lab rebuilds the disposable environment from scratch; recreating one (e.g. after a
Lab-host failure) does the same at the infrastructure level. Neither ever touches
`activity_completions`, `progress`, or `achievements` — a student's actual academic record.
## What student progress actually means
Course/module/activity `complete` flags are computed live, every time, from real underlying
facts (a real scenario pass, a real assessment pass, or an explicit manual marker for lesson-type
content) — never a separately-maintained flag that could silently drift from reality. See
`docs/COURSE_CONTENT_MODEL.md` §4.
## What not to do
- Don't manually flip a student's completion state via the admin API/database to "help them
along" — it breaks the guarantee that a complete flag reflects real work, and the Phase 6E
security fix means the platform will refuse a manual mark on a still-locked module anyway.
- Don't rely on the legacy `rootnode-quick-assessment` as a course-completion signal for any
V1 course — it's a general diagnostic tool, not wired to any course's own gate.
- Don't assume ROOT 08 or ROOT 11's un-built modules are "coming soon this cohort" — they're
explicitly out of V1 scope (see `docs/ROOT_V1_CURRICULUM_MANIFEST.md`); don't promise
timelines the curriculum doesn't yet support.
## Security boundaries
Every student's Lab is an isolated, disposable, non-privileged-to-the-host container — even
though it runs a real nested Docker Engine and a real k3s cluster inside itself. No student Lab
can reach another student's Lab, the Lab host's own Docker daemon, or any RootNode credential.
This is unchanged infrastructure from earlier phases (see `docs/LAB_ARCHITECTURE.md`,
`docs/ROOT_FOUNDATIONS_LAB_STRATEGY.md`) — instructors do not need to configure anything for
this to hold.
## Troubleshooting/operations notes
If a whole cohort's Labs seem slow to provision, check Provisioner health before assuming a
content problem — this program's content changes never affect Lab boot performance (see
`docs/PHASE6F_ROOT_V1_PILOT_READINESS.md`'s resource observations for real numbers from this
phase's own rehearsals).
+40
View File
@@ -0,0 +1,40 @@
# ROOT_ V1 Instructor-Led Pilot Plan
Phase 6F Step 19. Realistic delivery packaging from the ACTUAL curriculum duration
(`docs/ROOT_PROGRAM_DURATION_MODEL.md`) — not a business/pricing decision, an
operational/academic one.
## The three natural cohort groupings
The real prerequisite chain (`docs/ROOT_V1_PREREQUISITE_MAP.md`) already divides ROOT_ V1 into
three coherent stretches, each a legitimate standalone cohort length:
| Cohort | Courses | Duration | Suggested cadence |
|---|---|---|---|
| **Foundations** | ROOT 01-04 | 1,497 min ≈ 25.0 hrs | 8-10 weeks at 2.5-3 hrs/week, or a 1-week intensive |
| **Kubernetes Core** | ROOT 05-07, 10 | 1,338 min ≈ 22.3 hrs | 7-9 weeks, requires Foundations complete |
| **Operate & Secure** | ROOT 09, 12, Capstone | 980 min ≈ 16.3 hrs | 5-6 weeks, requires Kubernetes Core complete |
**Full ROOT_ V1 pathway**: all three back to back, 64.2 hours total, realistically a
20-24 week (one semester-plus) commitment at a sustainable 3 hrs/week pace — not a single
short cohort. This mirrors how the content itself is sequenced (ROOT_PROGRAM_ARCHITECTURE.md's
own course graph), not an arbitrary split.
## Weekend/intensive packaging
Any single cohort above also works compressed into a multi-day intensive (e.g. Foundations as a
5-day, 5-hr/day intensive) — the content and Labs are identical; only pacing changes. This is
exactly the reasoning behind `docs/WINTER_BREAK_CAMP_CURRICULUM_OPTIONS.md`'s Option A, which is
the Foundations cohort's first half (ROOT 01-02) sized for a single week.
## What doesn't change between formats
Server-enforced prerequisites, Lab lifecycle, assessment integrity, and instructor tooling
(`docs/ROOT_V1_INSTRUCTOR_GUIDE.md`) are identical regardless of cadence — a cohort meeting
weekly for 9 weeks and one meeting daily for 5 days use the exact same platform mechanics.
## What this document deliberately does not decide
Price, enrollment minimums/maximums, marketing, and specific calendar dates — packaging
decisions belong to the people running a specific cohort, informed by real demand, not
prescribed here.
+56
View File
@@ -0,0 +1,56 @@
# 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`.
+38
View File
@@ -0,0 +1,38 @@
# ROOT_ V1 Student Requirements
Phase 6F Step 14. RootNode's Labs run remotely — nothing computationally heavy needs to happen
on a student's own device.
## Remote / self-paced learners
- **Browser**: any current Chromium-based browser (Chrome, Edge) or Firefox. No browser
extensions or plugins required.
- **Internet**: a stable broadband connection sufficient for a persistent web session and a
terminal-like interface (similar bandwidth needs to a video call, generally lower).
- **Device**: a laptop or desktop with a physical or usable on-screen keyboard. A
**Chromebook is sufficient** — all Lab computation happens on RootNode's infrastructure, not
the student's device.
- **Tablets/phones**: not recommended as a primary device — the terminal-and-multi-pane
interface assumes a real keyboard and a reasonably sized screen; nothing about it is
technically blocked on a tablet, but it will be an uncomfortable experience.
- **Local installation**: none. No Docker, no Kubernetes, no Git client needs to be installed
locally — every Lab (including the nested Docker Engine and the Kubernetes cluster from ROOT
05 onward) runs in RootNode's disposable, remote Lab environment.
- **Microphone/camera**: not required by the platform itself. Only relevant if a specific
instructor-led delivery format (e.g. a live video cohort) separately requires it for its own
video conferencing — that's a delivery-format decision, not a platform requirement.
## In-person / camp delivery
- **RootNode provides**: the Lab environment (accessed via any device meeting the remote
requirements above), course content, and instructor tooling.
- **Student/venue provides**: the device itself (or the venue provides one), a keyboard, and
internet access to reach RootNode's platform. No specialized hardware, no local software
installation, no purchase requirements beyond program enrollment.
- **Venue/instructor should verify** in advance: enough physical outlets/devices for the
cohort size, and that the venue's network doesn't block outbound HTTPS to RootNode's domain.
## What RootNode explicitly does NOT require
No specific CPU/RAM/GPU spec, no paid software license, no local admin rights on the student's
device (nothing is installed), and no specific operating system beyond "runs a current browser."
+89
View File
@@ -0,0 +1,89 @@
# ROOT_ V1 Syllabus
## Program description
ROOT_ is RootNode Academy's path from general computer literacy to operating and repairing real
infrastructure — Linux, Git, containers, and Kubernetes, taught through real hands-on Labs in a
disposable environment, culminating in a capstone that operates and recovers a production-like
system under realistic conditions.
## Intended audience / readiness
Approximately age 15 and up, through college students, adults, and career changers — including
help-desk technicians, junior sysadmins, developers, and anyone moving toward DevOps, cloud, or
platform engineering. Age is guidance, not a technical gate; readiness is what actually matters
(comfort with a keyboard and following multi-step instructions is the practical floor).
## Prerequisites
None external. ROOT_ does not require completing RootNode's INIT_ or COMPILE_ course families —
its own internal course sequence (below) is the only enforced prerequisite chain.
## Learning outcomes
By the end of ROOT_ V1, a student can: administer a Linux system and diagnose common failures;
use Git for real collaborative version control including merge conflicts; build, run, and
compose multi-container Docker applications; deploy, scale, and update workloads on a real
Kubernetes cluster; secure a cluster against common CKS-style findings; systematically
troubleshoot a broken system using a repeatable framework; and operate and recover a
production-like environment under a real incident.
## Course sequence
1. **Computing & Linux Foundations** — how a computer runs software, the shell, the filesystem,
files/text, processes, permissions.
2. **Linux Administration & Networking** — service lifecycle, storage/filesystem administration,
the networking mental model, network/DNS/HTTP diagnosis, structured troubleshooting.
3. **Git & Collaborative Development** — why version control exists, the Git mental model,
everyday Git, branching and real merge conflicts, remote repositories, engineering workflow.
4. **Containers & Docker** — why containers exist, images vs. containers, the Docker CLI,
container networking, container storage, Dockerfiles, Compose, and the bridge to Kubernetes.
5. **Kubernetes Foundations** — the Kubernetes mental model and core objects, Pods and kubectl.
6. **Kubernetes Application Workloads** — Deployments, scaling, rolling updates, Jobs/CronJobs.
7. **Kubernetes Networking & Configuration** — Services, service discovery, Ingress,
NetworkPolicy, ConfigMaps/Secrets.
8. **Kubernetes Security** — SecurityContext, ServiceAccounts/RBAC, network and supply-chain
security, cluster hardening — a formal CKS-style assessment, required before the Capstone.
9. **Kubernetes Troubleshooting & Observability** — health probes, the RootNode troubleshooting
framework, general operational troubleshooting.
10. **RootNode Real Ops** — real, deliberately un-guided incident response.
11. **ROOT Capstone: Operate and Recover a Production-Like Environment** — a graded, timed,
real-Lab final assessment combining every prior domain.
*(ROOT 08 — Kubernetes Storage & Scheduling — and the deeper modules of ROOT 11 — DevOps &
Platform Engineering — are not part of ROOT_ V1; see `docs/ROOT_V1_CURRICULUM_MANIFEST.md`. A
single ROOT 11 orientation module is included as optional bonus content.)*
## Assessments
Four course-ending assessments (ROOT 01, 02, 03, 04) validate foundational competency; one
(ROOT 09) validates security competency and is required before the Capstone. See
`docs/ROOT_V1_ASSESSMENT_MAP.md` for exact scope and duration of each.
## Capstone
A 90-minute, real-Lab, graded final assessment. Requires ROOT 12 (Real Ops) and ROOT 09
(Security) both complete, plus the pre-existing six-stage scenario gate (foundation, workloads,
networking, configuration, troubleshooting, real-ops). No new teaching — it tests what the
program already taught, under conditions closer to a real incident than a classroom exercise.
## Approximate structured hours
**64.2 hours** across the 12 V1 courses (excludes the deliberately-excluded ROOT 08). See
`docs/ROOT_PROGRAM_DURATION_MODEL.md` for the exact per-module breakdown this is built from.
This is instructional content time — it does not include instructor discussion, camp
activities, or self-paced review time, which vary by delivery format (see
`docs/ROOT_V1_INSTRUCTOR_LED_PILOT.md`).
## Tools & technologies
A real Linux shell, Git, Docker (via a safely nested Docker Engine inside each student's
disposable Lab, never touching the Lab host's own daemon), and a real single-node Kubernetes
cluster (k3s) — all provisioned automatically per student, with no local installation required.
## Learning expectations
Every module follows Learn → Practice → Lab → Troubleshoot → Validate (see `docs/
PHASE6F_ROOT_V1_PILOT_READINESS.md`'s orientation content for the full explanation given to
students). Labs validate themselves — a student always knows, immediately and objectively,
whether a task actually passed.
@@ -0,0 +1,84 @@
# Winter Break Camp — Curriculum Options
Phase 6F Step 20. The question this document answers: **what subset of existing READY ROOT_
curriculum makes an excellent, academically coherent, standalone Winter Break Camp** — not
"how do we fit all 64.2 hours into a week."
## A real constraint that shapes every option below
ROOT_'s course prerequisites are enforced server-side, for real, including against direct API
attempts (`docs/ROOT_V1_PREREQUISITE_MAP.md`). A camp curriculum cannot skip straight to, say,
Kubernetes for a brand-new student — ROOT 05 is genuinely locked behind ROOT 04, which is locked
behind ROOT 03, 02, and 01. Any option below that starts past ROOT 01 is explicitly scoped as a
**continuing-student** camp, not a walk-in-and-start one. This phase does not build a placement/
waiver mechanism (out of scope, see the DO-NOT-BUILD list) — these options work within the real
chain as it exists today.
## Option A — Linux & Systems Foundations Camp (recommended first camp)
**Target readiness**: complete beginners; no prior RootNode enrollment needed.
**Age guidance (not a gate)**: ~13+ through adult.
**Content reused**: ROOT 01 (Computing & Linux Foundations) + ROOT 02 (Linux Administration &
Networking) — 100% existing READY content, zero new authoring.
**Duration**: 353 + 388 = 741 minutes ≈ **12.4 structured hours** — fits a 4-5 day week camp at
2.5-3 hours/day comfortably, with room for camp-format activities (breaks, group discussion)
around the core content.
**Hands-on Labs**: real Linux shell throughout — filesystem, processes, permissions, service
lifecycle, storage/network/DNS diagnosis, structured troubleshooting.
**Final mini-project/challenge**: the existing ROOT 02 assessment
(`rootnode-linux-networking-assessment`) already IS a real, timed, diagnose-and-fix challenge —
usable as the camp's own capstone moment with zero new content needed.
**Staffing**: one instructor can reasonably run this for a cohort using Prepare Labs + the
classroom Need-Help workflow (`docs/ROOT_V1_INSTRUCTOR_GUIDE.md`); no specialized TA skill
needed beyond basic Linux fluency.
**Delivery**: works in-person, fully remote, or hybrid — no format-specific content.
## Option B — Containers & Kubernetes Starter Camp (continuing students)
**Target readiness**: students who have already completed ROOT 01-03 (e.g., graduates of a
prior camp, or a self-paced student continuing over break).
**Age guidance**: ~14+ through adult.
**Content reused**: ROOT 04 (Containers & Docker) + ROOT 05 (Kubernetes Foundations) — 444 + 403
= 847 minutes ≈ **14.1 structured hours**.
**Hands-on Labs**: real nested Docker (build, run, network, persist, Compose) then a real
single-node Kubernetes cluster (Pods, kubectl fluency).
**Final mini-project/challenge**: the existing ROOT 04 assessment plus a self-contained "deploy
your own containerized app to the cluster" framing built from ROOT 05's existing Pod/kubectl
Labs — no new content needed.
**Staffing**: instructor should be comfortable with both Docker and basic kubectl.
**Delivery**: remote-friendly (no local Docker/Kubernetes install needed, per `docs/
ROOT_V1_STUDENT_REQUIREMENTS.md`); works in-person too.
**Eligibility note**: market this explicitly as "Camp 2" or "for students who've done ROOT 01-03"
— do not advertise it as a standalone entry point, since a walk-in student would hit a real
locked course on day one.
## Option C — Build, Break & Fix: Kubernetes Operations Camp (advanced continuing students)
**Target readiness**: students who have completed ROOT 01-05 (e.g., graduates of Camps A+B).
**Age guidance**: ~15+ through adult.
**Content reused**: ROOT 06 (Application Workloads) + ROOT 07 (Networking & Configuration) +
ROOT 10 (Troubleshooting & Observability) — 299 + 356 + 280 = 935 minutes ≈ **15.6 structured
hours**.
**Hands-on Labs**: Deployments/scaling/rolling updates/Jobs/CronJobs, Services/Ingress/
NetworkPolicy/ConfigMaps, then real diagnose-and-fix troubleshooting using the RootNode
framework.
**Final mini-project/challenge**: a real, deliberately-broken multi-symptom scenario drawing on
ROOT 10's existing troubleshooting Labs — genuinely operational, not a quiz.
**Staffing**: instructor should be comfortable diagnosing real Kubernetes failures live, since
students will hit genuine dead ends by design.
**Delivery**: remote-friendly; works well as a more intensive, fewer-day format (e.g. 3 full
days) given the deeper focus per topic.
## Recommendation for THIS Winter Break
**Option A** is the clear first camp: it needs no prior enrollment, needs zero new curriculum
authoring, fits a standard week-long camp format cleanly, and gives a complete, honest,
standalone learning arc (a real beginner walks in, and walks out having genuinely administered
and diagnosed a real Linux system). Options B and C are natural follow-on offerings for
returning students later in the year, once a first cohort exists to return.
## Explicitly out of scope for this document
Pricing, registration flow, payment processing, and marketing copy — this is curriculum
packaging only, per the Phase 6F authorization's own scope fence. See Phase 7 for the
business/product layer.
+16
View File
@@ -95,6 +95,22 @@ further instructor accounts from the Instructors tab).
prerequisite chains through the newly-inserted front-door modules, the optional-vs-required
(`is_required`) completion rule, and the capstone server-side unlock fix in both directions
(a direct bypass attempt rejected, a legitimately unlocked attempt still accepted).
- `test/e2e-phase6c.js` — curriculum completion upgrades, the security assessment bank, and
ROOT 11's honest lesson-only scope.
- `test/e2e-phase6d.js` — ROOT 01 (Computing & Linux Foundations) as the program's real front
door, and the real ROOT 01-04 foundational prerequisite chain.
- `test/e2e-phase6e.js` — ROOT 02/03/04 completion, the full ROOT 01->02->03->04->05 chain
proven via direct API, and the course/module lock-enforcement fix on the manual-completion
route.
- `test/e2e-phase6f.js` — the ROOT_ V1 curriculum manifest (inclusions/exclusions), the full V1
prerequisite graph (no cycles, no missing nodes), the strengthened Capstone gate (ROOT 09 AND
ROOT 12 both required) in both directions, the new orientation module, and an explicit check
that no age/grade gate exists anywhere in enrollment.
`infra/scripts/drills/` also holds real-Lab dress rehearsals per phase (Phase 6D/6E foundations,
Phase 6F's multi-student pilot and full end-to-end V1 journey) — see each script's own header
and `docs/PHASE6F_ROOT_V1_PILOT_READINESS.md` for what they prove beyond what the e2e suites
above already cover via direct API.
All e2e suites need `OWNER_EMAIL` / `OWNER_PASSWORD` set to a real bootstrapped instructor
account (see "Running the full stack locally" above) — the old `ADMIN_PASSWORD` mechanism is