# Changelog ## 1.0.0 - 2026-05-21 Initial stable release of the Django-first pobsync control panel. ### Added - Django control panel for hosts, global settings, schedules, SSH credentials, snapshots, runs, self-checks, and logs. - Native systemd installer and updater for production backup servers. - SQLite by default, with optional MariaDB support. - Scheduler and worker services for queued manual backups and scheduled backups. - Manual backup, dry-run, cancellation, verbose rsync logging, and run detail views. - Snapshot discovery for existing backup directories and SQL-backed snapshot records. - SQL retention planning and apply flow with base snapshot protection and incomplete snapshot visibility. - Explicit cleanup flow for incomplete snapshots, separate from normal retention pruning. - Purged snapshot audit overview with reason, action source, operator, host, kind, path, and timestamp. - Dashboard and host pages with backup health, latest run/snapshot, next run, and storage/stat summaries. - Review resolution for failed/warning runs and incomplete snapshot tasks so operational warnings can be acknowledged. - Worker heartbeat metadata and stale running-run reconciliation for queued backup workers. - SSH key generation, upload, edit, guarded delete, known_hosts management, and per-host key selection. - In-app changelog page sourced from this changelog. - Restore guidance on snapshot detail pages. ### Changed - Django and the database are now the source of truth for configuration. - Docker Compose is documented as development and disposable test tooling rather than the primary production path. - The `pobsync` console entrypoint is now a maintainer layer around Django management commands. - Scheduled pruning is evaluated by the pobsync scheduler service and recorded through Django, not host cron. - Retention and incomplete cleanup now preserve audit history even after source snapshot records are removed. ### Removed - Legacy YAML config import/export workflow. - Public short aliases for configuration commands. - Obsolete global config storage fields.