LMS policies
LMS policies & decisions
Section titled “LMS policies & decisions”Audience: product, domain, backend, ux
Status: specced
Owns: product
Depends on: Lifecycle, Personas, System architecture
Document decisions here before encoding them in LMS app code.
Accepted (v1 — 2026-08)
Section titled “Accepted (v1 — 2026-08)”| ID | Topic | Decision |
|---|---|---|
| LMS-01 | Multi-role | One OL account may be learner + instructor + staff. CAP allows candidate + centre staff on the same OL account (not arbitrary persona stacking: assessor/AB mixes stay 409). |
| LMS-02 | Onboarding gate | Per-persona draft → submit. Learner: names, gender, country/state/LGA (OL Address) + schemaVersion. Instructor/staff onboard after invite. |
| LMS-03 | Content runtimes | Native authoring + SCORM 1.2 import. LMS owns module/item order (not SCORM 2004 sequencing). cmi5/xAPI later. |
| LMS-04 | Publish | Course owner and platform staff may publish. Co-instructors edit only. |
| LMS-05 | Co-instructors | course_instructors: owner | co_instructor. Owner manages assignments. |
| LMS-06 | Catalogue | Authenticated browse of published courses. Item bodies / player / assessments require active entitlement. |
| LMS-07 | Entitlements | self_pay, admin_grant, cap_recommendation, sponsor. No LMS organizations. Orgs later on OL; sponsor stays “someone paid.” |
| LMS-08 | Payment | LMS prices; client POST /enrollments/{id}/checkout; OL InitiatePayment (referenceType: lms_enrollment). |
| LMS-09 | CAP linkage | Optional sectorId, tradeId, unitIds[] on course. gRPC RecommendCourses. |
| LMS-10 | Certificates | LMS certificate is independent of CAP. Completion also emits lms.course.completed. |
| LMS-11 | Storage | LMS never uses Cloudinary SDK. Zip + media via OL assetId. LMS extracts/serves SCORM player. Optional later: OL package adapter (S3/R2). |
| LMS-12 | Staff roles | admin, content_manager, support. Staff capabilities ⊇ instructor, broader scope. |
| LMS-13 | Instructors | Invited strictly by the platform. |
Open (not v1 blockers)
Section titled “Open (not v1 blockers)”| ID | Topic | Notes |
|---|---|---|
| LMS-O1 | Certificate PDF template | System-generated vs uploaded template |
| LMS-O2 | Max quiz attempts defaults | Per-item override exists; platform default TBD |
| LMS-O3 | Sponsor Paystack path | v1 grant may record paymentId optionally; dedicated sponsor checkout later |
| LMS-O4 | OL organizations | When OL grows orgs, add entitlement source organization_seat without rewriting the player |
Architecture notes
Section titled “Architecture notes”lms_users.userIdunique → OLusers.id; all LMS FKs point atlms_users.id.- Two-layer authz: capability gate +
assertScope— RBAC. - SCORM player URL is LMS-owned, not
res.cloudinary.com. - Full topology: System architecture.