Loop/goalMaintenancehigh riskintermediatesafety C · 65Forward Futurepre-dates current gate · under review

Prove your backups actually restore

Restore random real recovery points, verify integrity and RPO/RTO, and keep every failure as a regression drill.

prompt
→ Claude Code
For each required recovery scenario, randomly select an eligible real backup or recovery point and restore from zero in a disposable, isolated clean-room using only documented materials. Verify integrity, dependencies, representative reads and writes, and actual RPO and RTO. Repair one blocker, destroy the environment, and retry fresh. Stop when every scenario reaches its predefined consecutive-success streak or an exception is explicitly accepted. Never overwrite production, expose restored data, or initiate failover without approval.
claude-code · codex

Use this when

Use this when backup existence is not enough and the organization needs repeatable proof that required systems can be restored from documented materials within agreed recovery objectives.

How it runs

  1. Define the required scenarios, eligible recovery points, unchanged success criteria, consecutive-success streak, isolation controls, and approval boundaries before restoring anything.
  2. Randomly select one eligible real recovery point, restore from zero in a disposable clean-room using only documented materials, and measure actual RPO and RTO.
  3. Verify checksums, control totals, referential integrity, keys, dependencies, and representative business reads and writes; preserve any failure as a regression drill.
  4. Repair one recovery blocker, destroy the environment securely, and retry fresh until every scenario passes its streak or an unresolved exception is explicitly accepted.

Done when

✓ Every required recovery scenario succeeds repeatedly from a real recovery point. Fresh clean-room restores satisfy integrity, dependency, representative read/write, RPO, and RTO checks under unchanged criteria, with failures preserved as regression drills and restored data destroyed securely.

Why it works

A backup is only useful if a real recovery point can rebuild the required system under documented conditions. Random selection, fresh environments, measured objectives, and repeated success expose gaps that a one-time scripted restore can hide.

Implementation note

Restored production data remains sensitive even in a test environment. Never overwrite production, weaken isolation, expose restored data, or initiate production failover without explicit approval; preserve immutable evidence and securely destroy test data after each run.

Source: Forward Future ↗graded C · 65/100 — how grades work →

More maintenance loops

Upgrade to current Node LTS

Loop/goallooprepoB

Move the project to the current Node LTS across .nvmrc, CI config, Dockerfiles, and engines, fixing deprecations until everything is green on the new runtime.

prompt
→ Claude Code
/goal the project runs on the current Node LTS — update .nvmrc, the engines field, CI workflow files, and any Dockerfile base images to the LTS version, then run install, build, lint, and the full test suite on it, fixing deprecation warnings and breakages one at a time; stop when all are green or after 15 turns

Upgrade dependencies one at a time

Loop/goallooprepoB

Walk through outdated dependencies one package per turn, upgrading, running the full check suite, and pinning back anything that breaks.

prompt
→ Claude Code
/goal `npm outdated` lists no minor or patch updates — upgrade exactly one package per turn, run tests, lint, and build after each, commit if green, and pin the previous version with a note in UPGRADE-BLOCKERS.md if it fails; stop after 20 turns

Triage untriaged issues to zero

Loop/looplooprepoA

Pick the oldest untriaged issue, validate it against the current build, then label it, close if obsolete, or document repro steps—one per turn until the queue empties or 12 iterations pass.

prompt
→ Claude Code
/loop pick the single oldest untriaged issue in the tracker; reproduce or validate it against the current build, then either label it (area, priority, effort), close it with a polite explanation if it is obsolete, or write the missing repro steps. One issue per iteration, never close anything that still reproduces, and propose bulk closes for maintainer review instead of executing them. Continue until the untriaged queue hits zero — stop after 12 turns and report the triaged/closed/escalated counts.
maintenancelow risk