Changelog
Unreleased
Released 19 May 2026.
The agent pivots to bearer-token auth with sealed credentials. The control plane grows a verification pipeline and an alerts module.
Agent
Added
- AddedBearer-token authentication. The agent loads a token and a wrapping key from the environment, persists the wrapping key locally, and unseals the credentials envelope with AES-GCM at use time.
- Added
db_probecommand handler: live database-connectivity checks dispatched through the same lifecycle as backup and restore. The probe result is reported back overPostProbe. - AddedBounded-concurrency worker pool with durable lifecycle. Inflight rows are reconciled on startup by the recoverer, and the daemon drains the pool on shutdown.
- AddedEnd-to-end command handlers:
BackupHandler,RestoreHandler, and the probe handler all run their respectiverun_*flows through the worker pool. - AddedHeartbeat dispatch. Pending jobs are parsed from the heartbeat response and run through the worker pool. No long-poll, no side channel.
- AddedHalt-on-401 in
Daemon.Tick: the daemon refuses to keep talking to a control plane that has revoked its token. - AddedSFTP fingerprint mode in the credentials wire shape, aligned with the server's expectations.
- AddedOSS-prep:
LICENSE,SECURITY.md, a bearer-aware HTTP client, and daemon entrypoint polish for the first public release.
Changed
- ChangedCredentials wire shape aligned with the server's sealed-envelope format.
crl_cachetable dropped via a v1 to v2 state migration. - ChangedBinary registry. Published Postgres binaries are now sourced from a static-musl bash matrix.
- ChangedCI: race-detector step runs with CGO enabled, golangci-lint upgraded to v2 with the real lint debt cleared, and the licensed gitleaks action replaced with a binary install.
Control plane
Added
- AddedVerification module, server-side. A dedicated
bkpdb-verificationq-cluster runs a Docker-based pipeline against the latest backup. Trigger on successful upload, on-demand verify-now from the backup detail page, per-result detail page, and a policy config tab on the database detail. - AddedBoolean-returning SQL checks in the verification policy.
statement_timeoutis set viaPGOPTIONSso a runaway query does not block the worker. - AddedAlerts module. Events with dedup, incidents with recovery, channel CRUD with address verification, per-database channel scope, and a policy/events/incidents dashboard.
- AddedAlert channels: email via
QueuedEmailBackend, Slack via incoming webhook. A handler registry routes events to the right one with retry and backoff. - AddedAlert wiring: backup, verification, and retention modules fire
failedandrecoveredevents. A still-failing reminder cron fires for incidents that have not recovered. - AddedRestore from backup detail page, and adhoc-target restore with cancel and polling.
- AddedContainerised dev stack with separate
webappandworkerservices.
Changed
- ChangedAgent auth: mTLS replaced with bearer tokens and sealed credentials. The operator picks
agent_nameat token issue, not on the agent host. - Changed
/agent/v1/and/api/v1/surfaces force JSON responses. - ChangedHeartbeat
pending_jobsentries includeattemptso the agent can distinguish retries from first runs. - ChangedEnvironment variables renamed from
DBCRATE_*toBKPDB_*.
Fixed
- FixedAlerts:
record_eventenqueues fan-out reliably, and the reconnect recoverer no longer crashes on an unparsable agent primary key.