---
title: "SCORM authoring checks — what each lint finding means | SCORM Lab"
canonical_url: "https://scorm-lab.com/lint"
last_updated: "2026-09-23T11:50:25.414Z"
meta:
  description: "Every check SCORM Lab runs over a package: what each finding means, what a learner sees when it bites, and how to fix it."
  "og:description": "Every check SCORM Lab runs over a package: what each finding means, what a learner sees when it bites, and how to fix it."
  "og:title": "SCORM authoring checks — what each lint finding means"
  "twitter:description": "Free in-browser SCORM debugger. Drop a SCORM 1.2 or 2004 .zip to inspect the API transcript, CMI data model, sequencing and lint. Nothing uploaded unless you choose to share."
  "twitter:title": "Debug any SCORM package in your browser, free"
---

# What each authoring check means

SCORM Lab runs these checks over a package while it plays, using the manifest, the API transcript and the data model together. Each one below describes what a learner or an administrator actually sees when the problem bites — which is usually how it gets noticed, long before anyone looks at a transcript.

## Will break

- [Will breakStatus set after the session was closedThe course reported completion after calling Terminate, so the LMS was no longer listening. `status-before-terminate`](https://scorm-lab.com/lint/status-before-terminate)
- [Will breaksuspend\_data over the limitBookmark data is longer than the SCORM version allows, and the overflow is usually truncated in silence. `oversized-suspend-data`](https://scorm-lab.com/lint/oversized-suspend-data)
- [Will breakA SCO that never calls InitializeThe course never opened a SCORM session, so nothing it did was ever tracked. `never-initialized`](https://scorm-lab.com/lint/never-initialized)
- [Will breakProgress written before any statusThe course saved a bookmark before telling the LMS it had started, and some systems throw that away without saying so. `writes-before-progress-declared`](https://scorm-lab.com/lint/writes-before-progress-declared)
- [Will breakReporting an outright failureThe course reported a failed status, which on some systems is final and cannot be retaken. `terminal-failure-reported`](https://scorm-lab.com/lint/terminal-failure-reported)

## Risky

- [RiskyMissing imsss:deliveryControls in SCORM 2004An activity does not declare how completion is decided, so different systems apply different defaults. `missing-delivery-controls`](https://scorm-lab.com/lint/missing-delivery-controls)
- [RiskyA SCO that never calls TerminateThe course never closed its session, so the LMS may discard the final state of the attempt. `never-terminated`](https://scorm-lab.com/lint/never-terminated)
- [RiskyA SCO that never calls CommitTracked data was never explicitly flushed, so an interrupted attempt can lose everything since the start. `never-committed`](https://scorm-lab.com/lint/never-committed)
- [RiskyAn interaction written without an idA question result was recorded with no identifier, and most systems drop it. `malformed-interactions`](https://scorm-lab.com/lint/malformed-interactions)
- [RiskyA score reported with no statusThe course sent a score but never said whether the learner passed, so the LMS has to guess. `score-without-status`](https://scorm-lab.com/lint/score-without-status)

## Worth a look

- [Worth a lookSlow LMS API discoveryThe course took seconds to find the LMS API, which usually means it was retrying after failures. `slow-api-discovery`](https://scorm-lab.com/lint/slow-api-discovery)

These checks run automatically on any package you open in [SCORM Lab](https://scorm-lab.com/). It is free, runs entirely in your browser, and nothing is uploaded unless you choose to share it.

If a package is failing in one LMS and not another, that is usually worth a conversation rather than an afternoon — [scormspecialist.co.uk](https://scormspecialist.co.uk/).