Open thomasturrell opened 3 years ago
Without knowing the vendor tool(s) used to generate the AUs I could posit a couple of guesses.
1) This is just historically how things have been done, and I don't mean in the last 2 years, but literally the last 20. Unload wasn't always considered the evil (unreliable, yes, but evil, no) device that it is now, so it was mostly okay. 2) The tool vendors are notoriously difficult to get to update the dependencies they use, even when there are newer versions that use better practices available (cough like our product). 3) The understanding of implementers using (and to a somewhat lesser degree implementing) said products weren't thinking at or reading documentation at this level at the time they were developed. 4) The content is sophisticated enough to want a formalized concept of an "attempt" but there isn't really such a thing. So waiting until the very last moment to capture immutable data becomes a workaround for the fact that some data is immutable (IOW once a failed/passed/completed is stored for a session there isn't a way to undo it).
As mentioned in other places, it isn't necessarily the work of the spec to instruct people on better development practices for their implementation. (Lest we have a lot of work to do ;-).)
Having said that, I want to be clear, that I don't think you're wrong about what should be done as good practice, merely that I don't think we need to call all of it out.
In another issue we are were discussing the returnURL. If the LMS makes use the returnURL, you likely solve this issue. The content I've seen has a button at the end that returns to the LMS. At the point, all the statements should have been sent. If not, the content would need to send them before executing the return.
We could add this to "bad practices"
(Reviewed per June 3, 20220 meeting)
I have noted multiple cmi5 units from different vendors send passed and completed statements just before (or maybe with) the terminated statement.
The trigger in the AU for passed and completed statements appears to be the window close event. I believe this to be bad practice because window close events are not guaranteed happen (see #714).
I suggest best practice would be for the AU to send completed or passed statements as soon as the AU is passed or completed and not wait for a window close event.
As an aside, I am puzzled why multiple vendors would implement this same logic, is there something in the spec or the best practices that I am missing?