Source:
docs/adr/0003-prioritize-cmi5-and-scorm-1-2-with-2004-opt-in.md
0003 — Prioritize cmi5 and SCORM 1.2 with SCORM 2004 4th Ed opt-in
Context and Problem Statement
A technical-training framework must publish to whatever LMS a customer already operates. Supporting every packaging standard doubles the test matrix and ships dead code in every build. We need a policy that chooses which standards are first-class, which are opt-in, and which are dropped — grounded in real LMS behavior, not spec coverage.
Decision Drivers
- Market reach. SCORM 1.2 is universally supported by corporate LMSes and accounts for ~86% of real-world SCORM exports (per ScormHero, cited in research §3.1).
- Modern analytics. xAPI/cmi5 enables rich per-statement tracking that SCORM 1.2's
cmi.suspend_datacannot carry (4,096-character cap, vs 64,000 in 2004). - LMS behavior landmines documented in research §3.3:
- TalentLMS is SCORM 1.2 only. Shipping only a 2004 package locks TalentLMS customers out.
- SAP SuccessFactors accepts 2nd and 4th Ed but not 3rd, and cannot replace a 1.2 package with a 2004 package (SAP KB 2320891) — forcing a re-upload rather than an update.
- Moodle's SCORM 2004 support is incomplete (no Simple Sequencing or Navigation natively).
- Cornerstone receives interactions but does not persist them.
- cmi5 is gaining traction (Docebo, TalentLMS, SCORM Cloud, Rustici Engine, Trax, Watershed) and is the right modern export — iframe-free, mobile/offline capable, statements stored in an LRS.
- SCORM 2004 2nd and 3rd Editions are rarely needed. A 4th Ed package usually works in 3rd Ed LMSes with a
schemaversionstring swap. - SCORM Cloud's free tier is the de-facto conformance reference and has a REST API suitable for CI.
Considered Options
- A: cmi5 + SCORM 1.2 default, SCORM 2004 4th Ed opt-in, xAPI standalone as advanced config. Drop SCORM 2004 2nd/3rd Ed.
- B: SCORM 2004 4th Ed default, with 1.2 fallback.
- C: Ship all five (1.2, 2004 2nd/3rd/4th, xAPI, cmi5) as first-class outputs.
- D: cmi5 only, bet on the future.
Decision Outcome
Chosen option: A — cmi5 + SCORM 1.2 as the default export, SCORM 2004 4th Ed as opt-in, raw xAPI as a standalone configuration. SCORM 2004 2nd and 3rd Editions are not first-class outputs. cmi5 is the modern path forward; SCORM 1.2 is the universal safety net; SCORM 2004 4th Ed is the compromise when a customer's LMS genuinely requires sequencing or split completion/success reporting.
This policy maps directly onto the packagers in ADR 0015: scorm12, scorm2004-4th, cmi5, xapi-bundle, plain-html.
Consequences
- Portability, good: the default export covers ~86% SCORM-1.2-dominated LMS fleet and the growing cmi5-capable segment (Docebo, SCORM Cloud, Trax) simultaneously.
- Portability, bad: customers on "2004 3rd Ed only" islands must use the 4th Ed export with a documented
schemaversionswap workaround. - Performance, good: dropping 2nd/3rd Ed removes two packagers, two manifest templates, and two conformance test runs from CI.
- Testability, good: CI gate is SCORM Cloud REST API (see ADR 0017) — every release runs every packaged standard through SCORM Cloud before merge.
- Clarity, good: authors write against a single
Trackerinterface (ADR 0004); the standards complexity lives inside the packager, not in lesson authoring. - Security, good: cmi5's LRS-backed model lets us route all xAPI through a proxy (so browsers never hold LRS credentials, see ADR 0013).
Pros and Cons of the Options
A — cmi5 + 1.2 default, 2004 4th opt-in, xAPI standalone
- Good: covers the LMS fleet documented in research §3.3 without over-investing in the narrow 2004 segment.
- Good: lets customers adopt cmi5 incrementally while keeping 1.2 as the "always works" fallback.
- Good: single packaging story for the unified Tracker interface.
- Bad: two packages per release is slightly more CI work than option D; accepted.
B — 2004 4th Ed default
- Bad: TalentLMS is 1.2-only — making 2004 the default disenfranchises a whole LMS tier.
- Bad: Moodle's 2004 support is incomplete; defaulting to 2004 guarantees Moodle bug reports.
C — Ship all five SCORM flavors
- Bad: duplicate manifests, double the LMS-specific bugs, 2nd/3rd Ed has no real market gain over 4th Ed with
schemaversionswap. - Bad: CI conformance matrix explodes to 5× the runtime cost.
D — cmi5 only
- Bad: eliminates the 86% SCORM-1.2 fleet at stroke. Only defensible for a greenfield LMS customer base — not the technical-training market we target.
Critical Standards Facts (locked in)
From research §3.2; these are implementation constraints the packagers must honor:
- SCORM 1.2
cmi.suspend_datais 4,096 characters maximum. SCORM 2004 raises this to 64,000. The framework's bookmark/resume state for 1.2 targets must stay well under 4 KB. - SCORM 1.2
lesson_statusis a single field. Writing "passed" erases "completed". The Tracker'spass()call must not racecomplete()on 1.2 targets. - SCORM 2004 splits
cmi.completion_statusandcmi.success_status.complete()andpass()are independent writes. - SCORM 1.2
session_timeisHH:MM:SS.SS, not ISO 8601. SCORM 2004 uses ISO 8601 duration. imsmanifest.xmlmust be at the zip root. Never include__MACOSX/or.DS_Store(macOS authoring landmine — the #1 import-failure cause).- xAPI activity IDs are stable IRIs. Changing them on re-publish fragments learner history — the build must hash activity IDs from course+lesson slugs, not from timestamps.
Validation
- CI conformance gate: every PR that touches a packager runs the output zip through the SCORM Cloud REST API for each published standard (1.2, 2004 4th, cmi5). Failures block merge.
- Unit tests on zip structure:
imsmanifest.xmlat root, no__MACOSX/, no.DS_Store, no absolute URLs in bundled assets, suspend_data serialization fits in 4096 chars for 1.2. - Round-trip tests: import each standard's package into SCORM Cloud; launch; complete a quiz; verify the score and completion surface correctly in the LMS report. Documented in the LMS compatibility matrix.
- Manual matrix (documented, not CI'd) for Moodle, TalentLMS, Docebo, SAP SuccessFactors at each major release — these LMSes have reproducible quirks that SCORM Cloud does not catch.
More Information
- Research §3.1 "Which standards to emit and why"; §3.2 "Critical standards facts engineers will trip on"; §3.3 "LMS compatibility test matrix".
- Related ADRs: 0004 (unified Tracker), 0005 (scorm-again runtime), 0013 (self-hosted LRS), 0015 (packaging pipeline), 0017 (CI/conformance testing).
- LiaScript-Exporter source is the authoritative reference for manifest structure and the ILIAS/OpenOLAT iframe workaround.
- Open question / revisit trigger: if cmi5 reaches >50% LMS market share, promote cmi5 to sole default and demote SCORM 1.2 to "legacy export" status.