Bug Fixes
- Fix long-running backups killed at 24 hours despite active progress (#51) — PHP and MySQL timezone mismatch on Docker caused
last_progress_atto always appear stale. All database timestamps now use MySQL's clock directly. - Fix queue blocking: offline agents no longer block all backups — Two stuck jobs for offline agents could fill the 4-slot queue and prevent all other agents from running backups for hours. Slot counting now excludes jobs for offline agents and management tasks.
- Fix Rebuild Full not recovering wiped archives (#47) — Now properly re-reads all recovery points from the borg repository with sizes, then rebuilds the file catalog.
- Fix borg warnings wiping all archive records (#47) — Separated stderr from JSON stdout in bbs-ssh-helper, added JSON validation guards.
- Fix client creation on NAS/NFS storage paths (#48) — SSH home directories are created on local filesystem when storage_path points to a NAS mount.
- Fix allowed-storage-paths lost on Docker container restart (#47) — The file is now regenerated from the database on every container start.
- Fix auto-catalog-rebuild infinite loop — Added 24-hour cooldown.
Improvements
- update_borg/update_agent bypass queue slots — Management tasks run freely without waiting for backup slots. They only wait if the agent has an active backup.
- Stale job detection no longer fails queued jobs — Only sent/running jobs are failed when an agent goes offline. Queued jobs wait for the agent to come back.
- Shell script plugin test now runs scripts (#46) — Reports exit code and output instead of just checking file existence.
- FreeBSD borg updater support — Added
pkg install borgbackupand pip3→pip fallback. - Better error diagnostics — Catalog sync, SSH provisioning, and borg list failures now report actual errors.