Retention behavior (metadata-first)

Реализация: internal/policy/retention/provider.go. Retention опирается на список BackupManifest в bolt, не на glob по destination.

Поля YAML

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

При dry_run: true для каждого кандидата на удаление вызывается AuditRetention со статусом dry_run, без вызовов DeleteArtifact/DeleteManifest.

Инварианты