Restore and drill Forgejo backup coverage after kai-server restic drift #599
Labels
No labels
burndown-2026-06
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#599
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
During the 2026-07-23 DiskPressure incident, the documented Forgejo backup gate could not run because
resticwas absent from kai-server. The live cluster also had no Forgejo backup CronJob or backup PVC. The emergency purge proceeded only after Kai explicitly waived the backup gate.The documentation currently describes nightly host-level restic coverage to ser8, so the documented and live states have drifted. Related work: #596 and #320.
Work
docs/restic-backups.mdis updated if the actual ownership or topology differs from the documented design.Done when
2026-07-24 recurrence evidence
Infrastructure#642 records another operator-authorized Forgejo package purge without a new backup.
This is the second emergency package purge documented while the backup and restore-drill gate remains unresolved. The acceptance criteria on this issue remain unchanged and materially urgent.
2026-08-01 backup-plane repair checkpoint: commits
60967a2,c3b5221,4d3aabc, and8db55d7landed the Ansible-owned restic topology, check-mode safety, readiness evidence, and the upstream executable-mode correction. The missing /restic/kai-server/repo-password SecureString was created through the guarded file-source path. ser8 now has restic plus the pinned checksummed rest-server 0.14.0, the append-only repository initialized successfully, the prune timer active, and a second apply reported changed=0. kai-server remains untouched because its sudo boundary requires an attended apply. The first large snapshot, freshness monitoring, and restore drill remain open here.2026-08-01 checkpoint: ser8 rest-server and prune timer are converged and idempotent. The kai-server secret-resolution failures were traced to an unavailable native aosguard binary on the server-class control host. Commit
02a35b7now uses the installed AWS CLI bootstrap, pins us-east-1, adds a metadata-only preflight, and passed local plus Forgejo Actions validation. A direct read-only probe from kai-server confirmed both parameter visibility and decryption permission without emitting the value. The kai-server checkout is already at02a35b7. Remaining live boundary: Ansible convergence and the first attended backup need Kai's sudo password. No Forgejo package versions have been deleted.Restore drill completed 2026-08-12, database scope
Run entirely on ser8 against the local repository path, so the rest-server and the append-only HTTP path were untouched. No live system was written to.
Method
Timing
createdbpluspg_restoreof the full database: 8 secondsTABLE DATAentries, and 128 tables present ininformation_schemaafter loadFidelity
Stable tables match exactly. Growing tables grew by amounts consistent with roughly fourteen hours of ordinary activity. That is the signature of a faithful snapshot rather than a truncated one.
Non-interference
restic restoretakes a non-exclusive lock, so it cannot block the nightly backup. The exclusive-lock operation isrestic-prune, whose timer next fires 2026-08-16, four days out.Scope and what is still open
This drill proves the database is recoverable, which is the material risk for the Forgejo 16 upgrade in #620, since that upgrade runs irreversible schema migrations.
It does not cover the PVC payload. The same snapshot carries
forgejo-data,forgejo-db-data,registry-data, andcode-fleet-watch-state, totalling about 95.8 GiB, and a full-payload restore drill remains unproven. That is the remaining work on this issue.