Skip to main content
← All posts
2026-04-18

5 SCORM errors that break PowerPoint conversions (and what to do about each)

Manifest validation, completion tracking, suspend_data overflow, cross-origin, and the LMS-specific quirks we see repeatedly. A debugging checklist.


When a PowerPoint-converted SCORM package breaks, it breaks in one of five ways. Over the years we've seen every flavour, usually multiple times in the same client's library. Here's the checklist we run through before blaming the LMS.

1. Invalid imsmanifest.xml

The manifest is the metadata file that tells the LMS what's in the package and how to launch it. Most SCORM failures start here.

Common breakages:

  • Missing schemaversion. If it's not <schemaversion>1.2</schemaversion> (or 2004 3rd Edition / 2004 4th Edition), the LMS can't classify the package and either silently fails or throws an "invalid SCORM" error with no detail.
  • identifier not unique. Identifiers must be unique within the manifest. PowerPoint conversions that paste the same identifier on every resource fail validation.
  • Relative path issues. The href on each resource must match the actual zip layout. Converters that ship on Windows occasionally emit backslashes; SCORM requires forward slashes.
  • Missing adlcp:scormtype="sco" on the launchable resource. Some LMSs accept its absence; Cornerstone and Workday won't.

Debug: unzip the package and open imsmanifest.xml. Run it through SCORM Cloud's validator or Rustici's online manifest checker. If it fails there, your LMS doesn't stand a chance.

2. Completion isn't tracking

You finish the course. The LMS still says "In Progress". Classic.

Causes, in rough order of frequency:

  • The SCO never calls LMSFinish() (SCORM 1.2) or Terminate() (SCORM 2004). The JavaScript has an error and exits early, or the close button isn't wired up, or the converter didn't emit the call at all.
  • cmi.core.lesson_status set to the wrong value. For SCORM 1.2, the valid values are "passed", "failed", "completed", "incomplete", "browsed", "not attempted". Anything else — including whitespace — fails silently.
  • Progress is set to "completed" but the LMS is configured to require "passed". Some LMSs gate completion on a pass, not on finishing. Check with the LMS admin; the fix is usually a config change on their side, not a repackage.

Debug: open browser DevTools on the SCORM launch page. In the console, watch for calls to API.LMSSetValue / API_1484_11.SetValue. If you don't see lesson_status being set, that's your bug.

3. suspend_data overflow (silent failure)

Already covered in the SCORM 1.2 vs 2004 post, but worth repeating because it's the most insidious failure mode:

  • SCORM 1.2 caps suspend_data at 4,096 characters.
  • Most LMSs enforce the cap. Some truncate silently. Some accept more than 4KB for a while, then stop.
  • When truncation hits, the learner's progress resets on resume. They can't finish the course because they can never get back to where they were.
  • The LMS logs nothing. The browser logs nothing. The learner emails you saying "it keeps losing my place".

Debug: in DevTools, watch LMSSetValue("cmi.suspend_data", ...). If the string length grows past ~3,500 characters, you have a time bomb. Fix by splitting the course into multiple SCOs, or by changing what's stored (serialise only the last completed slide, not the full history).

4. Cross-origin content breaks inside the LMS iframe

SCORM packages are served by the LMS inside an iframe. If your course embeds a YouTube video, a Vimeo player, a Typeform, or an external survey, the LMS's iframe sandbox rules apply:

  • Videos with strict X-Frame-Options: SAMEORIGIN won't play.
  • Third-party cookies are often blocked (Chrome's phase-out, Safari's ITP), breaking anything that needs a login.
  • postMessage between the LMS parent and an embedded widget is usually blocked.

This isn't a SCORM problem per se — it's a general "iframes in iframes" problem — but it shows up in SCORM conversions because PowerPoint decks love embedded videos.

Debug: open the browser console with the LMS course loaded. Look for CORS errors, X-Frame-Options errors, or "blocked by sandbox" warnings. If you see any, the fix is usually to self-host the asset inside the SCORM package instead of embedding it externally.

5. LMS-specific quirks

The ones that will ruin your week:

  • Cornerstone OnDemand: converts all lesson_status of "passed" into "completed" regardless of your score. If scoring matters to you, check that your reporting joins on the right field.
  • Moodle: occasionally truncates suspend_data at 2KB (yes, half the spec) on older versions. Check your instance's config.
  • Docebo: ignores cmi.core.session_time if it's formatted in the SCORM 1.2 HHHH:MM:SS.SS format with more than 4 hour digits — which breaks courses that span multiple sessions.
  • SAP SuccessFactors: requires the manifest's <title> to be ≤ 255 characters. Your "Fire Safety Awareness and Evacuation Procedures for Building Supervisors Version 3 (2026)" title will fail ingestion.
  • Workday Learning: doesn't support SCORM 2004 4th Edition; falls back to 3rd Edition silently, dropping sequencing rules.

Debug: every LMS has its own error log, usually buried two menus deep under "Reports" → "SCORM" → "Launch History". Get your LMS admin to export it and grep for the course name.


The checklist

When a SCORM conversion breaks, before anything else:

  1. Validate the manifest.
  2. Watch LMSSetValue calls in DevTools.
  3. Check suspend_data length.
  4. Check for iframe/CORS errors in the console.
  5. Check your specific LMS's known quirks.

In our experience, 4 out of 5 "my SCORM is broken" calls are one of these five things.


If you've got a conversion that's misbehaving and you'd rather hand it off, we do SCORM rescue work as a flat-rate job. Get a quote.