Most of the calls I take fall into one of these patterns. Common causes are listed — the actual root cause depends on your specific package and LMS.
SCORM passes in SCORM Cloud but fails in Cornerstone (or your LMS)
Your package validates in SCORM Cloud, the team signs it off, then the production LMS does something different. Validation success in a reference environment doesn't guarantee identical LMS behaviour.
Common causes include: LMS launch configuration (player settings, sequencing support, completion rules), browser privacy/session handling (Safari ITP, third-party cookie blocking), iframe or pop-up launch context, API discovery or call timing, and LMS-specific SCORM behaviour around mastery score and reporting delay.
Completion fires but Workday (or your LMS) shows 'Incomplete'
The course logs a completion event, the learner sees the success screen, but the LMS dashboard still says incomplete. This is one of the most common emergency calls I take.
Common causes include: Missing or mismatched cmi.completion_status / cmi.success_status values (SCORM 2004), LMS completion rules that require a score above an internal threshold, score/mastery handling, reporting delay or caching, or package logic that sets completion before commit.
Course works for the first learner, broken for everyone else
First test passes. Second learner gets a corrupted state, can't resume, or sees the wrong slide. The package is leaking state somewhere — and migrations expose this fast.
Common causes include: Commit timing (data not flushed before window close), cached/shared state across learners, LMS attempt settings, suspend/resume bugs that surface only on second launch, learner-state handling, or packaging errors that bake test data into the SCO.
'SCORM API not found' on launch
The package opens, looks for the LMS runtime API in the launch window, and can't find it. The course either silently runs in standalone mode (no tracking) or shows an error.
Common causes include: API discovery code not scanning the full parent/opener frame chain, the LMS launching the SCO in an unexpected window context, browser policies blocking cross-frame access, or an LMS configuration that hosts the API on a different frame than the package expects.
Resume worked yesterday, broken today (suspend_data overflow)
Bookmarking works on short test runs but breaks once a real learner gets deep into the course. SCORM 1.2 has a 4,096-character cap on suspend_data — once you hit it, resume silently corrupts.
Common causes include: Suspend_data exceeding the SCORM 1.2 4,096-character limit, JSON-encoded state ballooning with quiz answers or progress arrays, LMS character-encoding differences, or the package not handling the overflow gracefully (no fallback, no warning).