saveEvents used .iso8601 encoding but loadEvents used the default
decoder (.deferredToDate). ISO8601 date strings could not be decoded
back, causing loadEvents() to return [] after the first log — breaking
event rotation and losing all previous audit entries.