Реализация: internal/policy/retention/provider.go.
Retention опирается на список BackupManifest в bolt,
не на glob по destination.
policies:
retention:
enabled: true # optional pointer; false отключает политику
dry_run: false # только audit `dry_run`, без delete
keep_last_days: 14
keep_days: 14 # alias keep_last_days
keep_last_successful: 7
keep_last: 7 # alias keep_last_successful
delete_orphaned: false # зарезервировано; логика plannedПри dry_run: true для каждого кандидата на удаление
вызывается AuditRetention со статусом dry_run,
без вызовов DeleteArtifact/DeleteManifest.
delete_orphaned в будущем).RetentionCleanupEvent и не затирают
историю run.