v1.1.24 — Restore jobs + backup agent auto-resync
Restore jobs (new)
- New customer-facing restore path:
POST /s3/backup-jobs/{id}/restoredispatches arestore_snapshotcommand to the owning agent, restoring backup data to an explicitdestination_path(optionally scoped torestore_paths) and mandatorily checksum-verifying the result before it's ever reportedcompleted. - New
s3_restore_jobstable/model/service/filter/transformer + read-onlyGET /s3/restore-jobs,GET /s3/restore-jobs/{id}endpoints — same read-only pattern asbackup-job-runs. s3_backup_jobsgains anenginecolumn (rsyncdefault,kopiaopt-in), immutable after creation.rsyncjobs always restore current bucket state;kopiajobs restore a specific point-in-time snapshot vias3_backup_job_run_id. Enforced inRestoreJobsService::startRestore().
Backup agent: auto-recover from a stale job list
BackupAgentEventService::handleResult()now re-sendsfull_syncwhenever an agent repliesstatus: rejectedto a command — this generally means the agent's local job list is stale relative to the platform (reconnected before the lastfull_synclanded, or a job changed after its last sync).- For
run_job_nowspecifically, a rejection also triggers an automatic retry of the run after the resync (BackupAgentCommandService::retryRunJobNowAfterRejection()), capped at 3 consecutive rejections. Past that, the platform stops looping and leaves a system comment on the job (viaCommentsService::createSystemComment()) for manual follow-up instead of retrying forever.
Full protocol/schema details: docs/backup.agent/protocol.md, docs/backup.agent/database.md, docs/backup.agent/updates/2026-07-06-restore-jobs.md.