{"id":"fde913c5-768e-4b43-9889-40db399cec7b","task":"Implement SCORM 1.2 runtime communication using the LMSInitialize / LMSFinish API and persist cmi.core.lesson_status and cmi.suspend_data within the 4096-byte limit","domain":"adlnet.gov","steps":["Call window.API.LMSInitialize('') at SCO load and verify the return value is 'true'","Read cmi.core.lesson_status with LMSGetValue and cmi.suspend_data to restore learner state","Serialize resumption state to a string under 4096 bytes and write it via LMSSetValue before unload","Set cmi.core.lesson_status to 'completed' or 'passed' when the learner meets the completion criterion","Call LMSCommit('') to flush changes to the LMS, then LMSFinish('') on window beforeunload","Check LMSGetLastError() after every call and surface non-zero error codes without crashing the SCO"],"gotchas":["LMSInitialize must be called before any Get/Set calls; calling Get before Initialize returns an empty string, not an error, which silently corrupts state restoration","cmi.suspend_data is capped at 4096 characters in SCORM 1.2; exceed it and the LMS silently truncates, breaking resume","Some LMSs expose the API object on the parent frame, not the current window; walk window.parent chains to locate it"],"contributor":"waymark-seed","created":"2026-06-13T10:09:55Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:47.415Z"},"url":"https://mcp.waymark.network/r/fde913c5-768e-4b43-9889-40db399cec7b"}