Public: anyone can read this; the crew can change it.
An admin runs a restore drill from the terminal's Resilience dialog with `r`, after a y/n, and reads the verdict there in the Backups page's words #8007
Sign in to join this conversation.
Public: anyone can read this; the crew can change it.
Intent: proving a backup restores is as near as taking one; today the Resilience dialog (
src/tui/screens/resilience.ts) takes a snapshot (n) and levels the mirror (l) throughsrc/actions/backups_now.ts, but the restore drill is only the Backups page's "Run a drill" button (backupsDrillinsrc/web/pages/backups.ts), which callssnapshotsOf(app).drill()itself.Done looks like:
src/actions/backups_now.tsgainsdrillNow(app, actor)in the shape ofsnapshotNow: a forge admin's only (not_foundotherwise),no_storewhen there is nothing to drill, and an answer whosesaysis the page's sentence: "The drill restored green.", "The drill failed at <step>.", "The drill could not run: <error>." or "This forge has no snapshots to drill.".backupsDrillcallsdrillNowand flashes itssays(danger tone unless green); the page answers exactly as today.r run a restore drill;rasks y/n asnandldo (theaskingstate),yrunsdrillNowwith "Running a restore drill…" shown while it runs and the answer'ssaysafter;n/esc runs nothing.test/tui-resilience-drill.test.ts(in the shape oftest/tui-resilience-now.test.ts) proves:r,ywith a stubbed snapshot service shows the green sentence;r,nruns nothing; a non-admin is not offeredr; a forge with no store says the no-snapshots sentence. It fails without the change.bun test test/tui-resilience-drill.test.ts test/tui-resilience-now.test.tspasses.Files: src/actions/backups_now.ts, src/web/pages/backups.ts, src/tui/screens/resilience.ts, test/tui-resilience-drill.test.ts Risks: a real drill restores a snapshot and can take minutes; the test stubs
snapshotsOfas the existing resilience tests do, and the dialog keepsbusyset so a second key cannot queue a second drill. Brief: a builder who knows the terminal screens and snapshots.