v2.1.1
v2.1.1 — Save Sync estable
Retención configurable y backup externo tras cada publicación confirmada.
Cambios principales
SAVE_SYNC_RETENTION_PER_SLOT(defecto 1): conserva N versiones por slot.SAVE_SYNC_POST_PUBLISH_COMMAND+SAVE_SYNC_POST_PUBLISH_TIMEOUT_SECONDS:
backup externo (p. ej. restic) tras publicar, con 201 garantizado aunque
falle el hook.pending_backupsatómico (protección contra la retención desde la misma
transacción de publicación),409 backup_in_progressenDELETE /history,
purga stale encleanup_canonical_versions.- Timeout con cancelación del grupo de proceso (SIGTERM → SIGKILL); auditoría
deexitCode/timedOutenbackup_hook_completed/backup_hook_failed. resticincluido en la imagen Docker (caché excluido del backup).SCHEMA_VERSION→ 3.
Dependencias y CI
- gunicorn 26, pytest 9.1.1, ruff 0.16 (hashes fijados); checkout v7 y
setup-python v7 en GitHub Actions.
Verificación
- 96 tests, cobertura 86.27 %, ruff limpio.
- Prueba DR end-to-end realizada: publicación → snapshot restic → pérdida del
volumen → restauración íntegra del save.