status-before-terminateThe course reported completion after calling Terminate, so the LMS was no longer listening.
The course believes the learner passed and says so on screen, while the LMS keeps the attempt incomplete. Re-taking it changes nothing, because the same thing happens again.
A write to a status element — cmi.core.lesson_status, cmi.completion_status or cmi.success_status — recorded after the Terminate call for that SCO.
After Terminate the session is closed and the API is required to reject further calls. The course is talking to something that has stopped answering. This is one of the few lint findings that is definite rather than probabilistic: the specification says the call fails.
Set the final status, then Commit, then Terminate, in that order. The usual cause is an exit routine that terminates first and then runs completion logic in a callback, so read the order the code actually executes rather than the order it is written in.
Open a package in SCORM Lab to see whether this applies to yours. It runs in your browser, and nothing is uploaded unless you choose to share it.
Stuck on this one, or seeing it only in a particular LMS? That is usually a short conversation — scormspecialist.co.uk.