Bug Fixes
- Stall detection — Fixed a structural bug where stall detection never fired during running jobs because the agent's main loop was blocked. The heartbeat channel now carries stall signals and can kill a hung borg process. Configurable timeout under Settings → Agent, default 2 hours. (#117)
- Dashboard storage mismatch — Repo
size_bytesis now refreshed after prune and archive delete, so the dashboard matches the client detail page without needing to visit it first (#118) - Imported repos show 0 files —
catalog_syncnow readsnfilesfromborg infoduring import. Existing repos with 0 file counts are auto-backfilled from ClickHouse on next page view (#115) - Repo name sanitization on import — Import now sanitizes names the same way as create, preventing leading slashes and special characters (#114)
- Same-path rename — Renaming
/home→homeno longer fails with "target already exists" (#114) - False "update failed" — PHP-FPM restart failure no longer aborts the update script (#93)
- Agent offline severity — Downgraded from critical/error to warning (#111)
New Features
- Report frequency — Users can choose daily or weekly report emails with a day-of-week picker (#120)
- Log page client filter — Dropdown to filter log entries by client alongside the existing level filter
- Log retention — Server log auto-pruned at 30 days, backup jobs at 90 days
- Stall timeout setting — Configurable under Settings → Agent (10 min – 24 hours, default 2 hours)
Agent
- bbs-agent v2.24.3
- Heartbeat thread now processes stall detection and cancel signals from the server
- Stalled borg processes are killed automatically when the server detects no progress
- Cancel via UI now works even when borg is completely frozen (relayed through heartbeat)
Agent Update Safety
v2.24.10 included the self-recovery wrapper (bbs-agent-start.sh) and syntax validation. Agents bricked by the Python 3.4 incident need a one-time manual fix (re-run the install script from the BBS dashboard). After that, the wrapper prevents this class of failure permanently.