Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.1 KiB
REPORT — controller v0.69.0: remove dead infra-backup stubs + unused restic-password report field (2026-06-16)
Deployed: controller v0.69.0 on guest 9201 / felhom-pve (bootstrap-managed; healthy, hub-reporting OK).
Scope: controller half of Phase-1 Infra Backup retirement (hub v0.12.0). See
felhom.eu/documentation/audits/SPIKE-infra-backup-2026-06-15.md. Commit 9f59bc2.
What changed (pure dead-code removal — no behaviour change)
- Removed
report.Pusher.PushInfraBackup(internal/report/pusher.go) — pushed the infra-backup payload to the now-removed hub endpointPOST /api/v1/infra-backup. Dead since slice 8C; no callers. - Removed
notify.Notifier.NotifyBackupCompleted(internal/notify/notifier.go) and thebackup_completedevent — caller-less since whole-guest backup moved to the agent in slice 8C. The hub's backup-deadline check now reads the agent host-report's PBS snapshots instead.NotifyBackupFailedand the DB-dump notifiers are untouched and still used. - Removed
report.BackupReport.ResticPassword(internal/report/types.go,json:"restic_password").
STEP-2 gate — confirmed before removing ResticPassword
The task required proving the live builder leaves ResticPassword empty (else it would be an ongoing
restic-password leak to the hub). Confirmed two ways:
- Source:
buildBackupReport(internal/report/builder.go) constructsBackupReport{Enabled:…}+LastDBDumponly; the comment at the disk-tier seam states restic/snapshot fields are left zero. No code anywhere assignsBackupReport.ResticPassword. - Live data (hub DB, read-only): the latest controller reports (v0.68.3) carry no
restic_passwordfield at all. So no ongoing leak — safe to remove.
Flagged (separate, worse historical finding — not in this task's scope): the hub's legacy
reportstable holds thousands of historical rows with a plaintextrestic_passwordvalue from old controller versions that DID populate it. The current controller does not, and this removal makes the field structurally unsendable, but the historical rows persist on the hub — a distinct purge/rotation decision for the operator.
Verification
go build ./... && go test ./...— green;go vetclean. No residual references toPushInfraBackup/NotifyBackupCompleted/BackupReport.ResticPassword(theconfig.goResticPasswordFileis the separate restic-password-file path config, intentionally untouched).- Built
felhom-controller:0.69.0, deployed to guest 9201 via the bootstrap mechanism (docker pull→/etc/felhom-controller-image→ restartfelhom-controller-bootstrap.service). - Live: container
Up … (healthy)on 0.69.0; startup clean (no errors/panics); hub connectivityHTTP 200;Hub report pushed successfully (8309 bytes)— confirming the caller-less removal causes no behaviour change and reporting still works.
Out of scope
Credential rotation (operator); the historical reports-table restic_password rows (flagged above);
the Komga healthcheck.