@brenden_goetz , great work!
When I looked at this, I said "I don't have time to look at this." I'm glad someone else took it on.
I will say that for the online text entry submissions, nothing is created when the student starts typing and there isn't an auto-save, although there have been some feature requests for that. Jive auto saves text while creating comments, but Canvas doesn't. There is even a feature request "under development" since 2015 with delivery during Q1 or Q2 of 2016 that says the new TinyMCE has a plugin for this: https://community.canvaslms.com/ideas/1300
I opened up the developer tools and watched the network traffic. There was nothing sent to the server other than to fetch the TinyMCE (Rich Content Editor) contents when I clicked on the "Submit Assignment" box to open up the text entry.
When I clicked Submit, then there was a POST made to the submissions page. This was not an API call, by the way, it was to an AJAX page within Canvas that handled things.The URL included the course and the assignment ID So it's similar to the Submit an assignment API endpoint except that the field names aren't the same.
All that was sent was a flag that it was in utf8, an authenticity token, the submission type of "online_text_entry" and the submission body that I had typed in. There was also a blank submission comment sent.
But that means that no information about when the person started typing was transmitted to Canvas.
When I retrieve the submission information through the API, I get
And you'll see that the only timestamp there is the submitted at.The graded at timestamp is added when it's graded.
There's not a created_at field there, which leaves the question where does Canvas Data come up with that at? Presumably, it's when Canvas processed it, but I did this test just now, so the data isn't into Canvas Data yet to verify. I looked at what is in Canvas Data and have 50,036 online_text_entry fields in my submissions_dim. 38,018 of those have the same created_at and submitted_at timestamps. 12,018 have different ones. Strangely, 764 of those 12,018 had a submitted_at timestamp that was before the created_at timestamp, but all of them were only by 1 second. Only 25 had a difference of less than 10 seconds, so it seems like it's something other than just processing delay involved. Of those with a positive difference (submitted_at > created_at) The average difference is 380,735 seconds (4.4 days) with a standard deviation of 1,370,050 seconds (15.8 days) suggesting that the data has some outliers and is skewed and the numbers I just gave are useless (there were 7 submissions where the submitted date was more than 6 months after the created date). Those were all in a non-teaching course and it makes you wonder if the person had clicked the "ignore for now" in the todo list.
It's not the workflow_state (11,649 graded, 369 submitted). It's not by whether it was graded anonymously (69 were, 11,949 weren't). It's not by grade state (11,776 human graded, 242 not_graded). The attempts are not all the same, either.
I opened up a text entry and let it sit for a while. The only thing sent to Canvas was a page view token that I had spent 19 interaction seconds with the page. But that was sent well after (minutes) I had moved off the page and was responding to this message, so 19 seconds can't be used to determine a starting time.
I left the text entry box open for about an hour and there was no autosave attempt. Only page_view_tokens and pings were sent back. Also, the submissions API doesn't returns the first submission because nothing has been created yet, it's all in the browser at this point. Once I click submit, then the submissions API returns the re-submission.
All this started off just to say there's no autosave on text entry. I sometimes get carried away in my analysis.