Bug Fixes
- Job cancellation hang — Killing borg on cancel now kills the entire process tree (including the SSH transport child) so the agent doesn't hang waiting on a dead pipe (#91)
- Catalog import on FUSE/shfs — Catalog files are now explicitly chgrp'd to www-data with a chmod 644 fallback, plus diagnostic logging to trace permission issues on Unraid and similar FUSE mounts (#84)
- Daily catalog rebuild loop — Archives with 0 indexable files no longer trigger a rebuild every 24 hours (#112)
- Import repo first-click failure — Removed
2>&1from verify-repo helper so borg's cache initialization messages don't corrupt the JSON output (#99) - Shell hook script arguments — Pre/post script paths now support arguments (e.g.
/path/script.sh before) via shell-style parsing (#107) - Queue detail overflow — Long file paths and command lines now wrap instead of overflowing the layout (#108)
- Prune imported archives — Prune can now clean up imported archives on single-plan repos (#109)
- False "update failed" — PHP-FPM restart failure during update no longer aborts the script before printing the completion marker (#93)
- Repo name sanitization on import — Import now sanitizes repo names the same way as create, preventing leading slashes and special characters (#114)
- Same-path rename — Renaming a repo where old/new paths resolve to the same directory (e.g.
/home→home) now just updates the DB name (#114) - Download .tar.gz diagnostics — "No files were extracted" now includes borg output, exit code, and a root-level view of the tmp dir in the server log (#81)
- Last Backup stat tile — Font size now matches the other stat tiles (#103)
- OIDC SSO — Fixed
addScopeTypeError when configuring multiple scopes (#95)
Agent
- bbs-agent v2.24.2
- Self-recovery from bad updates: syntax validation (ast.parse) before replacing the running script, automatic .bak backup, and a new startup wrapper (
bbs-agent-start.sh) that downloads a fresh copy from the server if the .py is broken - Shell hook scripts support command-line arguments
- Cancel kills the entire borg process group (not just borg) to prevent orphaned SSH children
- Windows: bundled Git-for-Windows SSH to avoid the built-in ssh.exe stdin forwarding hang
- Python 3.4 compatibility fix for
**kwargsunpacking
- Self-recovery from bad updates: syntax validation (ast.parse) before replacing the running script, automatic .bak backup, and a new startup wrapper (
Server / UI
- Log page — Added client filter dropdown alongside the existing level filter
- Log retention — server_log auto-pruned at 30 days, backup_jobs at 90 days
- Borg Management page — Windows/macOS agents no longer show a false "incompatible" warning; tooltip improved for Linux agents without a matching server binary
- Agent offline notifications — Downgraded from critical to warning severity (#111)
Agent Update Safety
A Python 3.4 syntax incompatibility in v2.24.4–v2.24.9 caused agents on CentOS 6/7 to crash on update with no auto-recovery path. This release adds three layers of defense:
- Syntax validation —
ast.parsechecks downloaded code before replacing the running script - Backup —
.bakcopy saved before every replacement - Startup wrapper —
bbs-agent-start.shruns before the Python agent, downloads a fresh copy from the server if the .py is broken, and restores from backup if the server is unreachable
Agents that were bricked by the earlier update need a one-time manual fix: re-run the install script from the BBS dashboard on the affected machine. After that, the wrapper prevents this class of failure permanently.