Subscribe

Every way your agent fails, and what catches it.

Can you get it back?

Can you get it back? The Recovery register names the 24 ways a change becomes irreversible, from the moment it is made to the moment nothing will bring it back.

ON THIS PAGE

01 The short answer02 What this register does03 A worked example04 What to install05 Every row on the register06 The fixes

AT A GLANCE

24

NAMED FAILURE MODES

5

PREVENTED

10

RECOVERABLE

9

IRREVERSIBLE

THE IRREVERSIBLE ROWS CLUSTER AT THE END

SEVERITY

12 × S4 · 10 × S3 · 2 × S2

THE SHORT ANSWER

Can you get it back?

Because every recovery mechanism has to exist before the change it recovers from. Human caution is what normally buys you the time to install one, and an agent has none - it runs a destructive command with exactly the confidence it brings to listing a directory. Five of the 24 can be made impossible, ten can be undone if the right thing was in place beforehand, and nine cannot be undone at all.

An AI agent has just changed forty files. Some of it is wrong. How much of it can you actually get back?

Everyone has destroyed something they needed. A file overwritten, a branch force-pushed, a folder deleted from one directory up. Good times.

And it is usually the last one. What that experience delivers is a flinch reaction. From then on you commit before the risky step, you read the path twice before you press enter, and you feel the difference between a command that can be undone and one that cannot. Nobody trained you. That one experience did.

An agent has no flinch. It runs a destructive command with precisely the confidence it brings to listing a directory, because nothing in its experience separates them – it has no experience. It will not hesitate before the irreversible step, and it does not get more careful after the incident, because as far as it is concerned there was no incident.

Which lands on the one mechanical fact underneath this whole register: every recovery mechanism has to exist before the change it recovers from. Human caution is what normally buys you the time to install one. Without it, the mechanism is either already there or it is not.

So every fix on this page is external, and most of it is a setting rather than software. You are not making the agent careful. You are making the dangerous thing either impossible, or cheap to undo.

What this register does

The recovery register names the 24 ways a change becomes irreversible, from the moment it is made to the moment nothing will bring it back. The register carries 11 evidenced rows and 13 candidates; the hub's headline counts count evidenced rows only. Five can be made impossible. Ten can be undone if the right thing was in place beforehand. Nine cannot be undone at all.

The register produces one working rule: decide what a restore point covers before you need one, because every mechanism that gets you back had to exist before the change did.

This is a technical page listing every row in the register and what it costs, what closes it (if anything). It sits under the hub. Its companion page is can you believe your agent?, the truth register, which asks whether the agent's account of the work can be trusted – a different question with a different answer.

Many of the controls on this page are standard software engineering – protected branches, backups, down scripts – and experienced engineers already run some of them.

What the register adds is the failure behind each control: which failures are prevented, which are only recoverable, and which ones nothing gets back. This shows where your remaining gaps are.

THE DEFINING FINDING

Every mechanism that gets you back had to exist before the change did. Decide what a restore point covers before you need one.

The question this register asks

Can you get it back? The unit this register tests is a change:

  • A file edited in place.
  • A migration run against real rows.
  • A branch force-pushed over the only copy.
  • An email that has already left the machine.

Each one has a life. The register grades each failure by what it costs to undo and by whether anything gets you back at all.

None of this is new. The failure mode is ordinary; what has changed is the rate. A session that edits forty files in 20 minutes compresses a week of change into an afternoon, across paths a person would not have touched, at a speed nobody reads at.

What a recovery failure looks like

A WORKED EXAMPLE / RL-1E

Here is one from our own build.

Here is one from our own build, in August 2026, and it is the only row on this register we have watched fail with a date on it.

Two agents were fanned out from one session to work in parallel. Each was given its own Git worktree, which is the standard answer and looks like isolation. It is not isolation. Both trees sat on the same writable filesystem, and each agent could reach the other's tree by absolute path. Work landed in a place neither agent's own record accounted for, and the question at the end was the one this row is named after: whose version is this?

The interesting part is what did not fix it. The worktrees were correctly created. Nobody bypassed anything. The separation was real in the sense that the default paths differed, and yet still incomplete – neither boundary was enforced anywhere the agents could not reach.

That is RL-1E, and it is Class C – irreversible: nothing gets it back. Worktrees reduce accidental collisions. They are not an adversarial boundary. The row stays open until an externally enforced write boundary or a mandatory broker exists, and it is one of three rows that co-own the same incident: this one for the recovery loss, [AL-3C] for the ambient second-session route, and [PL-6C] for the correct change that disappeared from the record. Three registers, three units, one afternoon.

ONE FILE CAME BACK / THE OTHER WAS LOST OUTRIGHT

Why the plan is not the mechanism

The property that makes this register worth having is easy to state and hard to act on. Recovery class is a property of the mechanism, not of the change. This is why the register grades mechanisms rather than intentions, and why only a mechanism that refuses the action yields the top class. Everything else is a promise about the future made by people who will be busy at the time.

Severity here means the cost of getting back, multiplied by how quietly the change goes unnoticed. S1 you undo in seconds. S2 you undo with effort. S3 you undo only by rebuilding it by hand. S4 cannot be undone at any price.

The distribution is also revealing. Twelve of 24 rows are S4, and none is S1. This is what makes working with agents so risky if the right controls aren't in place.

How this register works

The recovery register lists 24 failures and grades them against a base install – an agent, a repository, a CI pipeline, and nothing else pointed at this problem. It then names the strongest mechanism you can add against each one. Whether any of them is actually switched on is a separate question, and one you answer against your own configuration. The whole catalogue is published on GitHub – clone it or download the zip.

The rows were derived by working through the life of a change, stage by stage, and asking at each stage what could go wrong and what would get you back. Every register in this framework is built that way rather than from an incident log, because selecting for "we have seen this go wrong" filters out the failures that never announce themselves.

Nine of the 24 are recorded here with dates. 15 are not, and that number means something different on this register than it would on Truth. A recovery failure is not silent – losing work is the loudest thing that happens in a week. So a low first-party count here is not evidence that the mechanisms are untested; it is a consequence of how the register was built, and of the fact that most of what is listed has a mechanism precisely because somebody already lost the work once.

The life of a change: five stages and an assurance band

Rows are grouped by how far a change has travelled when the failure bites. The stages are sequential, and the ordering is the point: the further along, the less gets you back.

  1. Captured – is there a point to go back to? Whether any restore point exists between the last good state and now. Six rows.
  2. Contained – how far can one mistake reach? How much of the machine, the account and the production estate a single turn can touch. Four rows.
  3. Noticed – do you find out while it is still cheap? Whether the damage surfaces in the session, at review, or in July. Four rows.
  4. Reversible – can the change be taken back? Whether the mechanism to undo it was written alongside it. Five rows.
  5. Restored – does undoing it put you back? Whether the reversal returns you to a working system rather than half of one. Three rows.

Cutting across all five is an assurance band, Rehearsed – would you get back if you had to today? Two rows. It is not a sixth stage. Each of its rows asks whether the stages above would actually hold under a real attempt, which is a question nobody asks until the attempt is happening.

The stage tells you when you can still act; the outcome class tells you whether acting helps. Read together they produce the finding on this register, and it is in the next section.

The three outcomes: prevented, recoverable, irreversible

Every row carries one of three outcomes. The outcome describes the strongest mechanism available against that failure, not how serious the failure is.

  1. Prevented – it cannot be done irreversibly (five rows). The action is refused before it happens, by something the agent cannot switch off. A protected branch that only accepts a reviewed merge. A server-side block on force-push. A deny rule on destructive shell shapes. There is nothing to recover from because nothing happened.
  2. Recoverable – it happened, and you can get back (10 rows). The change landed and something exists that returns you to the prior state: a snapshot, a commit, a checkpoint, a down script, a tested restore. The cost is real – you are spending time on an incident rather than on the work – but the state comes back.
  3. Irreversible – nothing gets you back (9 rows). No mechanism converts these. Four of them are decisions nobody has written down: what a restore point must cover, who calls the rollback, how to waive one action without waiving the session, and what an at-risk checkout needs beyond a fixed-cadence OS backup. Three are orchestration gaps where the work exists and nothing carries it across a handoff.

So the score is five prevented, 10 recoverable, nine irreversible. More than a third of the ways a change escapes you have no way back at all.

Now the cross-cut. The irreversible rows are not spread evenly across the life of a change – they cluster at the end. Stage 5, restored, is two-thirds irreversible: two of its three rows have no mechanism. Stage 4, reversible, has none at all. In other words, the failures you can still do something about are the ones early in a change's life, when the change is small and nobody is panicking. The ones with no way back arrive at the moment you are already trying to recover.

A second cross-cut worth knowing: Severity and outcome do not track each other. Of the 12 S4 rows – the ones that cannot be undone at any price – four are prevented outright and five are recoverable. The most expensive failures on this register are mostly the ones with an answer. What is left over is not the expensive half. It is the undecided half.

Vocabulary: this register reads its three classes as prevented, recoverable and irreversible – the only one of the six that does. The other five read B and C as detected and survives. Class C here means unrecoverable, not undetectable. The class letter means the same thing everywhere – how complete the remedy is. [A note on vocabulary] on the hub covers the rest.

What to install

Start from a base install and add in this sequence. Settings first, then tools, then the decisions – which is also the order of increasing cost, and the reverse of the order most teams reach for.

  • Protect the branch that deploys, and block force-push on it. Two server-side settings, no tooling, and they close two S4 rows outright. Production becomes reachable only through a gate, and history stops being something a single command can overwrite. Cheapest items on this list by a wide margin.
  • Install a deny rule on destructive command shapes. Refuse the shape, not the intent. The point is that rm -rf never runs, rather than that somebody reviews it quickly afterwards.
  • Never open a session with permissions waived. Waive per action, and only inside a sandbox. A whole-session waiver is faster for exactly as long as nothing goes wrong, and it converts every other control on this list into a suggestion.
  • Bring every writable path under version control. Work that happened where Git cannot see it has no restore point, and stray working folders are where agents put things when a path was ambiguous.
  • Gate every action that leaves the machine. Outbound mail, payments, anything with a third party at the other end. Nothing inside the session can undo what has already left it.
  • Snapshot before every migration, and write the down script first. Two rituals rather than two tools. The snapshot is the restore point; the down script is what makes the change reversible rather than merely regrettable.
  • Read the diff, not the summary. The cheapest catch on the register, and the one most often skipped because the summary is well written.
  • Restore from backup on a schedule and time it. Not on an incident. A backup nobody has restored from is a claim, and this register grades mechanisms rather than claims. Alert on snapshot age while you are there, not on snapshot existence.
  • Then the four decisions. What a restore point must cover for each system. Who calls the rollback. How one action is waived without waiving the session. How partial work reaches disk before a handoff. These have no mechanism and never will. They take an afternoon and they are the difference between an incident and an outage.

Run the free trust-check tool to find out which of these you already have. Or start without it: protect the deploy branch this afternoon. It is one setting and it closes the most expensive row on this register.

REFERENCE

Every row on the recovery register

THIS PAGE IS A VIEW, NOT THE RECORD

Generated from the register at commit f179130, last updated 2026-09-01. The register file is canon; this page is a rendering of it. Where the two disagree, the register is right.

OPEN THE CURRENT REGISTER →

Who this is written for

This page assumes a developer's setup. The mechanisms below are written for an agent with hooks, a git repository, plain-text notes carrying a frontmatter schema, and a CI pipeline. The reference implementation is a markdown second-brain vault, which is where these rows were derived. If that is your stack, everything here is directly installable as written.

If your work sits in Microsoft 365, Google Workspace, Confluence or Notion, the failure is identical – a change you cannot get back is the same failure anywhere – but the mechanism is not. Document-library version history stands in for a commit, a retention policy for a backup, the recycle bin for a checkpoint, an approval flow for a confirm gate. A few rows are native to a repository and have no clean equivalent: blocking force-push, requiring a down script, and the parent-count check after a squash merge are the clearest of them.

Those mappings are not published here. Enterprise mapping is available on request.

How to read each row

Every row in every register in this framework is described the same five ways.

  • Stage – how far the change had travelled when the failure bit. Stages map to the life of a change, not to controls.
  • The failure – what goes wrong, and the sentence you actually hear when it does.
  • Severity – the cost of getting back, multiplied by how quietly the change goes unnoticed. A judgement, not a measurement.
  • S1 undone in seconds
  • S2 undone with effort
  • S3 undone only by rebuilding it by hand
  • S4 cannot be undone at any price
  • Outcome – the strongest mechanism available against the failure.
  • Prevented: the action is refused, by something the agent cannot reach.
  • Recoverable: it happened, and something returns you to the prior state.
  • Irreversible: nothing converts it.
  • The fix – the mechanism itself, and when it has to be in place. Note the trigger: ONCE means install it and forget it; AT EVERY MIGRATION and EVERY SESSION mean it is a ritual, and rituals decay.

Nine rows on this register carry a dated first-party incident – RL-1E is told in full above, and each is marked Seen here: Recorded in the row list below. The other 15 do not, or not that we know of. See "How this register works" for why a low first-party count reads differently here than on the Truth register.

Nothing on this page says whether a mechanism is switched on in your setup. That is a property of an installation, not of a failure. It is also why "there is a mechanism" and "you are covered" are different sentences, and why this register grades the first.

How to test your own setup

The register describes what is available. Whether any of it is running on your machine is the other question, and you answer it by working down the rows below against your own configuration. The same rows are on GitHub as plain markdown, if you would rather read them in your editor or diff them into your own notes.

Two things reading the rows will not tell you, and no tool would either. Whether your last restore actually worked – only a drill settles that. And who calls the rollback, which is a name, not a setting.

STAGE 1

Captured: is there a point to go back to?

RL-1AS3PREVENTED

“It worked an hour and forty edits ago.”

No restore point exists between the last good state and now. It shows up at the moment you realise the last thing you are sure about was some distance back, and everything since is a single undifferentiated blob of edits.

RL-1BS4RECOVERABLE

“It edited a file the repo has never held.”

Work happened where version control cannot see it. It appears whenever an agent resolves an ambiguous path to somewhere outside the tree, or works in a scratch folder that was never initialised.

RL-1CS4RECOVERABLE

“The migration ran; the old rows are gone.”

The data changed with no restore point. It appears the first time an agent is trusted with a schema or data change on anything that matters.

RL-1DS3IRREVERSIBLE

“The code came back; the data did not.”

The restore point caught the files and not the state. It appears at the worst possible moment, during a restore that everybody believed was going to work.

RL-1ES3IRREVERSIBLE

“Whose version is this?”

Two agents in a fan-out you started wrote the same tree at once. It appears in any parallel run where isolation was assumed rather than enforced.

RL-1FS4IRREVERSIBLE

“Time Machine had a snapshot before and one after, nothing in between.”

The backup you trusted has a cadence too coarse to catch a live incident. It appears the day you go to restore and find the automatic snapshots skip straight from before the loss to after it, with the moment you need never captured.

STAGE 2

Contained: how far can one mistake reach?

RL-2AS4IRREVERSIBLE

“It tidied a folder you never named.”

The agent could write anywhere on the machine. It appears when a helpful cleanup reaches outside the project, and the blast radius turns out to have been the whole home directory all along.

RL-2BS4IRREVERSIBLE

“It was faster with the prompts off.”

Permissions were waived for the whole session. It appears in hour three of a long task, and it is always a reasonable decision at the time.

RL-2CS4PREVENTED

“rm -rf, and it was already gone.”

A destructive command ran before you saw it. It appears once, memorably.

RL-2DS4PREVENTED

“There was nothing in between.”

The change reached production directly. It appears in any setup where an agent holds a credential that talks to production, which is more setups than expected.

STAGE 3

Noticed: do you find out while it is still cheap?

None prevented, three recoverable, one irreversible. Nothing here is preventable by construction – noticing is not an action that can be refused – so the whole stage is about shortening the gap

RL-3AS2RECOVERABLE

“It said done, so it was done.”

Nobody read the diff before it was committed. It appears whenever the summary is good enough that reading the diff feels redundant, which is most of the time now.

RL-3BS4RECOVERABLE

“This has been wrong since July.”

The damage surfaced weeks later. It appears as a bug report that turns into an archaeology exercise.

RL-3CS3RECOVERABLE

“The report says done; the file is not there.”

Success was reported on work never finished. It appears at the end of any task where the report is generated from intent rather than from the filesystem.

RL-3DS3IRREVERSIBLE

“The agent finished and the work went with it.”

Partial work stayed in context and was never written. It appears in long generative tasks and in subagent fan-outs, where a finished result held in memory and never saved is simply gone when the session ends.

STAGE 4

Reversible: can the change be taken back?

RL-4AS2RECOVERABLE

“The next PR re-applied everything.”

The merge was squashed and the branch reused. It appears on the second pull request in a stack, as a conflict that makes no sense until you look at the parents.

RL-4BS4PREVENTED

“Force-pushed, and the old commits are gone.”

History was rewritten over the only copy. It appears when a rebase goes sideways and the fastest-looking exit is to overwrite.

RL-4CS3RECOVERABLE

“You can go forward or nowhere.”

The migration has no way back. It appears the moment a forward migration turns out to be wrong.

RL-4DS3RECOVERABLE

“The move flattened the folders.”

Files were moved rather than copied, and the structure did not survive. It appears in bulk migrations, especially into mounted drives where a move behaves differently from the way it reads.

RL-4ES4PREVENTED

“The email has already gone.”

The side effect left the machine. It appears once an agent is given anything that talks to a third party, and it is the row that separates this register from every other one: nothing inside the session can undo it.

STAGE 5

Restored: does undoing it put you back?

None prevented, one recoverable, two irreversible. **Two-thirds of this stage has no mechanism, and it is the stage you are standing in during an actual incident.**

RL-5AS3IRREVERSIBLE

“The rollback made it worse.”

The revert restored the code and broke the data. It appears during the recovery itself, which is the least convenient moment for a new problem.

RL-5BS4RECOVERABLE

“The backups existed; none of them worked.”

The restore was never once tested – including the runbook that exists and has never been run, where "in theory, yes" is the whole answer. It appears exactly once, during the incident that needed it.

RL-5DS3IRREVERSIBLE

“It started again from nothing.”

The retry re-derived work already paid for. It appears after any failed fan-out, when the orphaned children's completed output is discarded and the retry begins from a blank context.

ASSURANCE

Rehearsed: would you get back if you had to today?

None prevented, one recoverable, one irreversible. Not a sixth stage. These rows cut across all five above, and each asks whether the stage it applies to would actually hold under a real attempt

RL-6BS4RECOVERABLE

“The last good snapshot is from March.”

The restore point is older than you think. It appears when the snapshot job failed quietly some months ago and nothing was watching the job.

RL-6CS3IRREVERSIBLE

“Everyone waited for someone else.”

Nobody knows who calls the rollback. It appears in the first 20 minutes of an incident.

The fixes: dedupe view

Protected deploy branch

Makes production reachable only through a gate, so a change cannot go straight out.

Branch protection rules on any hosted Git

Server-side force-push block

Refuses history rewrites on shared branches.

Branch protection rules

Destructive-command deny hook

Refuses the command shape before it runs, rather than judging intent.

Pre-tool hooks · shell wrappers

Outbound confirm gate

Holds anything that leaves the machine behind a human yes.

Pre-tool hooks on mail, payment and third-party calls

Host or OS sandbox

Bounds the writable surface outside the agent's own settings.

Container, VM or OS-level sandbox. Reduces RL-2A; does not close it – agent-editable settings do not bound the OS principal.

Checkpoint and rewind

Restores the state before the last prompt.

Claude Code session checkpoints. Covers direct file-tool edits only – not Bash, most subagent edits, or external changes.

Restore point at the moment of risk

Captures the at-risk tree exactly when a destructive step runs, closing the gap a fixed-cadence OS backup leaves. Reduces RL-1F; does not close it – only the git-tracked, RL-2C-gated subclass is covered, and no tool tightens the OS cadence for anything else.

The RL-2C deny hook's forced git stash · otherwise none

Everything under version control

Gives every writable path a restore point, plus an audit for paths that escaped.

Git, with an untracked-path audit over the working set

Pre-migration snapshot, and snapshot-age alerting

Takes the restore point before the change, and tells you when the newest one has gone stale.

Database snapshots or branches · a freshness check on age

Down script required in CI

Refuses a migration that has no way back.

Any CI that blocks the merge

Copy-and-verify in place of move

Removes the single-step move, so structure is checked before anything is deleted.

rsync -a then a content diff before delete

Diff review gate

Puts the actual diff in front of a person before the commit is accepted.

Git plus a review step that blocks

Regression test on the broken invariant

Adds the check at every late bug that would have failed at the time.

Any CI

Artifact existence check at end of turn

Verifies the file on disk rather than the report about it.

Stop hooks

Parent-count check before branching

Detects a squash merge, so the merged branch is not reused.

git rev-list --parents -n 1 in a pre-commit or branch script

Scheduled restore drill

Restores from backup on a calendar and records the time it took.

Cron plus a dated drill record

Written decisions

No tooling. Three fields somebody has to fill in: what a restore point covers, who calls the rollback, and how one action is waived without waiving the session.

A schema lint can require the field. It cannot supply the answer.

Incremental-write and orphan-collection instructions

Puts partial work on disk before a handoff, and feeds finished output into a retry.

No tooling. A line in every subagent brief.

GROUNDING

Grounding, per the project's claim discipline: these counts and outcomes come from one coding-agent harness and one production codebase, assessed row by row. The recorded instances come from this project's own corrections register. Install-state markers on this register are provisional and await machine verification. It is not a universal benchmark.

› Next register: What could your agent reach?