# Changelog ## 1.2.0 - 2026-05-28 Operations-focused release for more reliable production backups and maintenance. ### Added - Staff-only updater page for checking configured Gitea releases, inspecting the installed git checkout, fetching tags, pulling the current branch, and running the native systemd updater. - Read-only control panel access level for authenticated non-staff users, with status pages visible and credentials, logs, configs, retention, and mutating actions kept staff-only. - Run completion notifications for email and webhooks, including recorded delivery history per run and target. - Dedicated hosts page with host cards, enabled/disabled filtering, and quick host/schedule/retention state controls. - Per-host rsync bandwidth limit overrides with inherit, unlimited, and explicit limit semantics. - Backup data totals by snapshot kind on dashboard and host detail pages, including unique/non-hardlinked data totals. ### Changed - Real backup runs now default to verbose rsync progress output so the live run view behaves consistently with dry-runs. - Run progress panels are shared between dry-runs and real runs for more consistent status, timing, cancellation, and log display. - Incomplete snapshot cleanup now requires operator review before deletion. - Incomplete snapshot size reporting now prefers on-disk measurement when metadata is stale or missing. - Installer and environment examples now include optional updater configuration. ### Fixed - Remote preflight shell commands are now quoted correctly, including roots such as `/`. - Worker reconciliation now detects real rsync failures and stale/running process state more reliably. - Retention pruning and incomplete cleanup can delete snapshots containing restrictive directory modes preserved by rsync archive mode. - Snapshot data summaries no longer count incomplete metadata/log files as backup data when measuring from disk. - Filesystem SSH credential tests use writable test state without changing production defaults. ## 1.1.0 - 2026-05-21 UI-focused release for the Django control panel. ### Added - Dedicated list pages for runs, snapshots, schedules, purged snapshots, and changelog navigation. - Dashboard priority panels for required action, next scheduled work, recent activity, and storage pressure. - Dashboard host cards with clearer backup activity, snapshot health, next run, and retention status. - Lightweight live refresh for active run detail pages, including status, timing, controls, and rsync log output. - Lightweight live refresh for dashboard priority and host status sections. - Current-page navigation states for primary and system navigation. - Responsive dashboard behavior for narrower screens. ### Changed - Reworked the primary navigation around day-to-day operator workflows and moved admin/system links out of the main path. - Simplified legacy-facing labels and removed source-of-truth wording that no longer applies to the Django-first model. - Improved run and snapshot detail pages with clearer links between backup runs, snapshots, logs, and review actions. - Improved dashboard spacing and card layouts to reduce cramped or overlapping text. - Documented the Django-template-first partial refresh pattern for future UI work. ## 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.