AICC / CMI-5_Spec_Current

cmi5
http://adlnet.gov
Apache License 2.0
181 stars 91 forks source link

What is the best practice for when to send completed or passed statements? #715

Open thomasturrell opened 3 years ago

thomasturrell commented 3 years ago

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?

brianjmiller commented 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 ;-).)

brianjmiller commented 3 years ago

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.

cawerkenthin commented 3 years ago

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.

andyjohnson commented 3 years ago

We could add this to "bad practices"

MrBillMcDonald commented 2 years ago

(Reviewed per June 3, 20220 meeting)