Bug fixes and UI polish.
Fixes
- ClickHouse silently fails to start on Docker (#158): upgrade-bitten volumes had
/var/bbs/clickhouse/*owned bywww-dataleft over from an older image build. ClickHouse refuses to run when the process user doesn't match the data owner and the error was being swallowed. Entrypoint now scans service data directories on each start and repairs ownership if it finds a mismatch. Also stops suppressing ClickHouse's stderr and adds an explicit post-start health check so the next time anything like this happens it's visible. - Server-side jobs could execute twice (#163): a long-running compact/prune could be re-picked by the next cron-fired scheduler instance before the first one marked the row
running. Thesent → runningtransition is now a conditional UPDATE; if the row was already claimed by another scheduler, the iteration is skipped. - Missing compact output in task log (#162):
borg compactnow runs with--verboseso the "compaction freed about X GB" summary is captured into the task log. - Dashboard doughnut tooltip clipped (#164): the File Catalog canvas is only 110×110, so the default canvas-rendered tooltip got cut off. Switched to an external HTML tooltip appended to
<body>that escapes the canvas entirely, and the body now shows size and rows instead of duplicating the name.
UI
- Server Health progress bars on the dashboard switched to Bootstrap's
.progress/.progress-barwith an absolute-positioned percentage overlay — always centered, always visible regardless of bar width. - File Catalog card: stats table uses hairline row separators instead of striped backgrounds; Top Repositories list tightened up; table background made transparent so it matches the card body.
- Client detail header: hostname uses a
signposticon so theglobeicon is unambiguously the IP address.