0010 — Enrolment and progress are recorded against the canonical catalog
A recorded institutional decision, with reasoning and result.
- Authority rank
- 5
- Version
- v1.0
- Adopted
- unrecorded
- Held by
- Stewardship Office
- System
- SYS-10
Source · docs/codices/DECISIONS/0010-scholar-enrolment-and-progress.md · registered by rule
- Date: 2026-06-01
- Status: accepted
- Governing doctrine: Codex 0 §21 (lifecycle), Codex 5 (data foundation), Codex 6 (rubric), STD-D, STD-S
- Registry entries: SURF-11, SURF-15, SURF-16, SURF-17, WF-01
Decision
A Scholar's standing in the Academy is derived from two records only — enrollments (keyed user_id + path_slug, where the slug is school/program) and lesson_progress (keyed user_id + the canonical lesson path) — and every read of that standing is resolved against the canonical lrn_* catalog established in DECISIONS/0009. No progress is inferred, and no second source of truth is kept in the client.
Why
Article Zero requires one place for each thing. Progress written against editorial TypeScript slugs would drift the moment a course is revised in the database, so the lesson path is resolved through the catalog before a record is written or read.
How it works
src/lib/academy-progress.server.ts— enrol, withdraw, record a lesson, read standing and per-course progress, all through the caller's own authenticated client so row-level policies remain the single gate.src/lib/academy-progress.functions.ts— protected server functions behindrequireSupabaseAuth.- Completion is a Scholar's own claim of mastery ("I can act on what this taught"), not a play-time threshold: attention is never the measure.
What remains
Assessment attempts, credential award rules, and adaptive recommendation signals still write elsewhere; WF-01 stays partial until they resolve through the same standing.
Result (review: 2026-12-01)
To be written at the review date, whether or not it flatters the decision.