Adding support for unique backup IDs
Backup IDs: Delete obsolete log files with obsolete backup records
Backup Id: Akeeba Engine, return the backup id in the Kettenrad return array
Backup Id: Logging to the wrong file
Backup Id: Logs not removed automatically by quotas
Backup Id: Do not set a random backup ID in the engine, let the application handle that
Client-side wait: Option akeeba.basic.clientsidewait for enabling the client-side slow down in file 01.basic.ini
Client-side wait: Engine reports the remaining time to reach the minimum execution time (sleepTime), in milliseconds, when doing a backend/restorepoint backup and akeeba.basic.clientsidewait == 1
Client-side wait: Reports the remaining time to reach the minimum execution time as an integer. Sub-millisecond waits make no sense in our context.
Client-side wait: fixed the wait time reporting by Kettenrad
Resume backup: JPA and ZIP archivers to use AEAbstractArchiver's _fopen for resumable file opens
Resume backup: Store file offset of each part file in the class in AEAbstractArchiver::_fwrite()
Resume backup: AEAbstractArchiver::_fopen() Seek to last position when re-opening file
Resume backup: AEAbstractArchiver::_removeFromOffsetsList() Remove the resume pointer from the class when creating a new part file
Do not repeat step number 1 in the log
Resume backup: Kettenrad reports the step number which has just finished and the step object's state (error, init, prepared, running, postrun, finished)

Also make sure there's the right number of Starting and Finished Step number log records
Resume backups: Add options akeeba.advanced.autoresume, akeeba.advanced.autoresume_timeout, akeeba.advanced.autoresume_maxretries to 05.tuning.ini
Resume backups: missing scale in options
AEAbstractArchiver: hold file pointers to the archive file to reduce disk I/O
AEArchiverJpa: reduce disk I/O by not opening and closing the archive all the time