Can you confirm that Adapt content will also send n=0 if it is the only element? E.g. cmi.objectives.0.id as opposed to cmi.objectives.id
That's correct. Specifically you can see that happening here.
it was trying to set cmi.core.total_time
Adapt (out of the box) definitely does not try to set this - as you say, it's read-only. Adapt will only try to set session_time. Perhaps this was added as a customisation to the course you are testing?