Umbrella for security work beyond #14. The original scope is done except for the three items below; everything else was verified closed out in the comment thread and re-verified 2026-08-31.
1. Host monitoring reports nowhere
gitbay-monitor.timer fires hourly on bay1 and has done so since !28, but /etc/gitbay/monitor.url has never existed, so gitbay-monitor.sh exits 0 at its second line every run. Disk, service-failure, and cert-expiry results are computed and discarded. An unset webhook and a healthy host are indistinguishable from the outside, and systemctl --failed stays clean either way.
The fix is not just to set a URL: the script should log its status to journald unconditionally and fail the unit on an alert condition, so the checks are visible on the host itself and the webhook is an optional second channel. A swallowed curl ... || true should also stop being silent.
2. govulncheck is not in the test loop
The original item asked for govulncheck "wired into the test loop". It lives only in deploy/audit.sh, which is run by hand. .gitbay/ci.yml has build and test jobs and neither invokes it. Dependency freshness is automated now (the deps checker, which filed #60), but nothing scans for vulnerabilities on a schedule or per-change.
3. Database durability and file mode
/var/lib/gitbay/gitbay.dbis mode 0644. The parent directory isdrwxr-x--- gitbay:gitbay, so traversal blocks other local users and this is not a live exposure — but the file mode is wrong as defence in depth andstore.Openshould set it.- Continuous replication was raised as "consider" and never decided either way.
gitbay-backup.timerandgitbay-offsite.timerare both daily, so the current RPO is roughly 24 hours. Either adopt a litestream-style continuous copy or record the decision not to.
referenced in commit 2e6467a72f: Audit logging, auth throttling, pack limits, user disable
2026-08-24 21:40 UTC