The Immutable Past · What Is
What Is Undo
You were taught that undo reverses an action and puts you back before it. Every undo you have ever pressed did the opposite — it added, and the systems where the feature works are add-only underneath. The foundation I work from says the direction of time is not a container that events sit inside but a property of a pair: a record that only grows and an expectation that only updates forward. Undo is the ordinary object that pries the two apart. It restores configurations, it does not restore readings, and its reach is exactly the set of marks nobody has read yet.
Control-Z is the most trusted key on the board. You reach for it without deciding to, dozens of times a day, and it works — the paragraph comes back, the deleted row returns, the colour you did not mean to apply goes away. Because it works, almost nobody looks at it. Underneath sits a picture, and the picture is a claim: the key performs a reversal, the last thing you did is removed, and you are returned to before it. That picture is comfortable enough that we have extended it a long way outward. An unsend button. A return window. A cooling-off period. A probationary month. Let us pretend I never said that. Each of those borrows its credibility from the key that works. Three ordinary situations show that the key does not do what the picture says it does, and the third one is the case where it works perfectly.
One neighbour first, so the two are not merged. I wrote a piece on forgiveness whose argument was that most accounts of it quietly define it as an edit to what happened, and that no such edit is on offer to anyone. That piece is about a wish with no mechanism under it. This one is about a mechanism that genuinely works — undo is not a false promise, it is a real operation used successfully several billion times a day — and the whole job here is saying where its boundary runs, and why it runs there rather than somewhere else.
What the ordinary picture commits you to
State it strongly, because the weak form is not what anybody believes.
Three commitments. First, that an undo removes: after the operation there is less in the world than there was before it. Second, that it restores the situation and not merely the object — put the state back and you are where you were. Third, that a complete undo leaves nothing behind, so that where the mechanism fully succeeds, the episode is closed as though it had not occurred.
Three ordinary situations do not fit inside those commitments.
Case one · the stack that only grows
Press Control-Z and the application is holding more than it held a second earlier, not less. It has the old state, the new state, and a pointer sitting between them. Redo is the proof: an operation that had genuinely removed the last minute would have nothing left to redo from.
This is not a quirk of one editor. It is what the formal treatment found forty years ago. James Archer, Richard Conway and Fred Schneider laid out the available strategies for building recovery into an interactive system, and the strategy that reads as the natural one — execute the inverse of the last command — is the one that mostly cannot be built, because ordinary commands are not one-to-one and so have no inverse. Assignment overwrites. What works instead is retention: checkpoint the object, or checkpoint just the components a command is about to change, and restore from the copy you kept. The system they describe in detail saves a complete new copy of any block that changes, without overwriting the previous version.
The first commitment says an undo removes. Nothing was removed. The mechanism is add-only, in the exact place where the picture says subtraction happens.
Case two · the thirty seconds
Gmail’s undo is not a reversal and Google does not describe it as one. The setting is called a send cancellation period, and you choose five, ten, twenty or thirty seconds. What that buys is an interval in which the message has not gone. Past the interval there is no button, and the absence of the button is not a limitation of the engineering.
Where a platform does offer removal after delivery — delete for everyone — the copy goes and a line appears in its place saying that a message was deleted. A new mark, announcing the old one. And if the recipient had already opened it, removing the copy does not remove the reading. The 1984 paper names this as the hard case and states it in a general form: once information has been communicated it cannot be un-communicated, and an instruction to forget something does not produce the state in which it was never sent.
The second commitment says the situation is restored. The object was restored. The situation was not, and past a certain moment there is no object to restore either.
Case three · the corrected typo
This is the one that matters, because it is the success case. You mistype a word. You see it, you fix it, and the file is now byte-identical to the file you would have had if your fingers had not slipped. There is no residue in the document. There is no residue in the version history if you caught it inside the same keystroke. By any measurement you can take of the object, the operation was total.
Something changed anyway. You now know that word can be got wrong in that particular way, and the next time you type it you are very slightly different — a fraction more careful, or a fraction more irritated, or you have quietly resolved to use a shorter word. Nothing in the document records that, and no better undo would reach it, because there is nothing in the file for a better mechanism to operate on.
The third commitment says a complete undo leaves nothing. The success case has a residue, and the residue is on your side of the transaction.
So the operation adds where the picture says it removes, leaves the situation standing where the picture says it restores it, and leaves a residue where the picture says it closes the episode. Something real is being restored — a great deal is, routinely and usefully, and I am not building toward the claim that undo is a lie. It restores one thing and not another, and the part it misses is not a shortfall in anybody’s engineering.
What the foundation says instead
I work from a short list of numbered primitives and results derived from them. The result doing the work today is one the series has leaned on a dozen times as scenery and has never once written about for its own sake.
R2, write-protection: records are add-only, and the update a record makes to expectation runs forward and does not re-open. Two clauses, and the second is the one that gets skimmed. It is not only that marks accumulate. It is that the thing the marks change — the expectation a person is carrying — has no reverse gear either.
R3, the Arrow Theorem: given an immutable numerator and a forward-only denominator, time has a direction. I want to be careful here, because this is a derived result and nearly everyone treats its content as a starting assumption instead. The direction is not a container that events are sitting inside. It is not a background against which things happen to happen. It is what the asymmetry between two terms amounts to, and both terms are required to get it — a record that only grows, and an expectation that only moves one way.
Here is what direction-as-derived buys that the one-way update does not buy on its own. If the arrow were only a rule about the second term, you would expect operations that never touch expectation to be arrow-free, and you would expect the arrow to show up in mental life and nowhere else. R3 locates the direction in the relation between the two terms. That makes a prediction the one-way rule alone does not make: any operation that reaches one term and not the other will look partly successful, and what it leaves behind will be exactly the other term. Not a vague shortfall. A specific one, with an address.
Which is a description of undo.
P4 gives the Reality Equation, R = A / E — the Actual over an Expectation made of subconscious prediction and ideas — and R8 says the human experiences only the quotient. Not the Actual, not the Expectation. The ratio. The framework’s locked distinction between an act and an artifact supplies the last piece: an act is a process, an artifact is a mark, and pressing Control-Z is an act performed now that produces a mark now. The mark it produces resembles an earlier one. Under write-protection it does not replace that earlier one; it joins it.
The operation adds where the picture says it removes, and leaves a residue where the picture says it closes the episode. The part it misses is not a shortfall in anybody’s engineering.
First marked construction
An undo restores configurations and does not restore denominators. Anything sold as a reversal is an act performed in the present that produces a new mark resembling an old one; it reaches the arrangement of things, and it has no purchase whatever on the expectation that reading the old mark installed.
Consequence of R2 and R3 with P4, R8 and the locked act/artifact distinction. Mine: the primitives supply the asymmetry and supply the quotient, and they do not say what the ordinary word undo is picking out.
Why it works as well as it does
That could be read as a debunking, and it is the opposite of one. Most of what anybody wants back is configuration. The paragraph, the file, the layer, the row, the transaction, the paint on the wall, the shape of a sentence before you ruined it. That is a real class and a very large one, and inside it the word means precisely what it says.
It is also why software is the native home of the word. A machine’s state is configuration the whole way down, so inside the machine an undo can be total — there is nothing else in there for the operation to miss.
Which raises the obvious question, and I am going to state it and stop, because the foundation records it as open and closing it in passing is exactly the move it forbids. The equation defines the quotient only where a host stands, and a host is defined as a living system. On that definition a machine has the whole of the configuration and none of the reading — which is precisely why undo inside it is complete. That is now the fifth piece in a fortnight to arrive at the same seam from a different direction, always in the same shape: the entire present-side arithmetic on one side of the line, and none of the host-side reading on the other. It is a sharper statement of the open problem than the open problem contains. It is not a resolution of it, and I am not going to pretend it is one.
Where the boundary actually runs
If the first construction holds, then the boundary of an undo is not set by how much time has gone past, and not by how hard the mechanism works. It is set by whether anybody has read the mark.
Second marked construction
The reach of an undo is the set of marks not yet read. An operation on a configuration is complete exactly where that configuration has not yet installed anything in a host — including the host performing the operation.
Consequence of the first construction with R2. Provisional, and the provisionality is real: the primitives define expectation as subconscious prediction and ideas and say nothing about what counts as a reading, so the sorting this construction performs is coarse. See the second edge below.
It predicts several things you can go and check.
Undo windows are timed to exposure rather than to elapsed time as such. Thirty seconds is not a physical constant. It is somebody’s estimate of how long a message sits unopened, and the number moves when that estimate moves.
A draft is trivially undoable and a published post is not, and the difference between them is not technical. The bytes are equally deletable in both cases. What differs is who has already looked.
The 1984 paper reaches the same place from the engineering side, which is the part I find most useful. Faced with effects that recovery cannot reach, the authors’ third strategy is to buffer the side effects — delay delivery so that the pending effect stays part of the object state and is therefore still reversible. That is the unsend button, thirty years early, arrived at from first principles about what a recovery facility can and cannot own. They add the honest footnote: the delivery command itself cannot be undone. They also note, in a sentence that has nothing to do with metaphysics and lands on it anyway, that no recovery facility can restore the universe to an earlier state, and that they must be content with restoring an object.
A surgeon has no undo. Not because a body is complicated — a body can be repaired, and a second operation is a real and frequently successful remedy. It is that the mark is read at the instant it is made, by the system it is made in. There is no unopened interval to race.
And the everyday one: you cannot un-know a spoiler, un-see a photograph or un-hear a sentence. The reason is not that these things are filed somewhere inaccessible. It is that the reading was the update, and the update runs one way.
Figure 01
Six operations, sorted by what they reach
| Operation | Configuration restored | Already read | What is left |
|---|---|---|---|
| Control-Z, one keystroke back | Fully. The object is identical. | No — by nobody except you | Small. You know the slip is available to your hands. |
| Gmail undo, inside the cancellation period | Not needed. The message did not go. | No — the interval is bought for exactly this | Small, and mostly yours. The recipient has nothing. |
| Delete for everyone, after it was opened | Yes. The copy is gone. | Yes, and a line is added saying so | Large. The reading, plus a new mark advertising the attempt. |
| A returned purchase inside the window | Yes. Money back, goods back. | Partly — you know what owning it was like | Medium, and often the point. The trial was what you bought. |
| A retraction, correction or apology | No. Nothing is removed. | Yes, by construction — it is a response to a reading | The whole of it. This operation is an addition and is not sold as anything else. |
| A deleted branch in version control | Yes, and the reflog keeps it anyway. | No, if nobody pulled it | Near nothing. The clearest case of pure configuration there is. |
Third marked construction
What is left after a configuration has been fully restored is an ordinal reading of how far the expectation moved. The direction is therefore not the obstacle an undo meets; it is the quantity a residual undo exposes. Where the residue is nil, no reading occurred. Where the residue is the whole of what mattered, the reading was the event.
Consequence of R3 with the first two constructions. Order only, and marked as such: the foundation supplies no rate, no floor and no scale for how expectation updates, so this ranks cases and cannot measure them.
What this costs
It costs the phrase “I can always undo it” most of its coverage. True of configurations and false of readings, and people plan under the first while living in the second. The version-controlled parts of a life are the parts with no readers in them, and those are not the parts anybody lies awake about.
It costs the standard framing of reversible decisions. Prefer reversible decisions is good advice badly stated. No decision is reversible; some have small residues. And the operative question is not whether a thing can be taken back but who will have read it before you would want to — which, unlike the first question, has an answer you can find out in advance, usually in about a minute.
It costs the hope of un-knowing. There is no operation that lowers expectation to a prior value: not a weak one, not a partial one, not a slow one. Under write-protection the update runs forward, and asking for it to run backward for a single move is asking for the direction to be absent for a single move. The direction is not a thing that could be absent, because it is not a thing at all. It is the name of the asymmetry doing all the other work. Remove it for one move and there is nothing left that the move could have been going backward through.
R14, on this idea as on any other: an idea is an orientation and a prejudice in a single act, and so is this one. It is kind to the person being far too careful with a document nobody has opened. It is unkind to the person whose real problem is a decision with a large readership, and who now has a crisp vocabulary for dread. Both readings sit inside the argument and only the first is what it says.
The three constructions, and where each fails
- 01 · An undo restores configurations and not denominators
- Fails if any mechanism restored a reading — if there were an operation, anywhere, returning a person to a prior expectation without new information arriving. The prediction is not that people cannot forget: forgetting is a mark decaying, which produces a weaker and differently-described state rather than the earlier one. Show a restoration that is identical on the original description rather than merely quieter, and this construction is finished.
- 02 · The reach of an undo is the set of marks not yet read
- Fails if undo windows tracked elapsed time rather than exposure. The prediction is specific in both directions: where reading is instantaneous the window should collapse to nothing however cheap the reversal is, and where reading is slow or improbable the window should be generous however expensive the reversal is. Find a class of operations that are trivially reversible, reliably unread for hours, and nonetheless given no window at all, and the sorting is doing no work.
- 03 · The residue is an ordinal reading of how far expectation moved
- Fails if the residue after a complete restoration were unordered — if the corrected typo and the retracted public statement left the same thing behind, or if the ranking ran opposite to readership. Worth saying plainly: the claim is only ordinal, so its failure condition is correspondingly weak. A scale would make it far easier to kill, and I do not have one.
Where this is unfinished
Four edges, stated so that somebody can hold me to them.
The first is the scale. The foundation supplies no rate, no floor and no scale for how expectation updates. The pieces on streaks, deadlines and pace each stated that gap and I inherit it rather than filling it. Everything above ranks cases and nothing above measures one, and the third construction is weaker for it in exactly the way I have marked.
The second is what a reading is. The second construction turns on a mark having been read, and the primitives define expectation as subconscious prediction and ideas while staying silent about thresholds. A glance, a skim, a thing seen and not understood, a message opened on a lock screen and not attended to — the sorting treats these as one and they are plainly not one. That silence is the room the construction is standing in, and if the threshold turned out to matter a great deal, the boundary I have drawn would be a smear rather than a line.
The third is whether a restored configuration is a mark in the locked sense. I have been calling the thing an undo produces a new artifact resembling an old one. Whether a state of affairs that stands in the world is itself a mark in the framework’s locked sense is a question two earlier pieces raised from other directions, and none of them has settled it. I keep it outside the vocabulary here, which means the first construction is a claim about the operation and not about what the operation leaves.
The fourth is the machine, stated above and left where the foundation leaves it. The tension is recorded as open, four earlier pieces have stopped at the same definition, and the accumulation of stopped pieces is not an argument for moving it.
A limit, stated plainly
The thing most people would undo is not a file. It is a sentence said to somebody, or a message sent at one in the morning, or a decision another person is still living inside. I have written a piece about a device and it does not contain a remedy for that, and I would rather say so here than let it be inferred from silence.
One thing it can take off, and only one: the belief that a quicker or a better or a less cowardly person would have found the button. There is no button. There was never a door there to fail to open, so there was no failing at it. That is a claim about a mechanism and not a claim about whether you should feel what you feel.
Two jobs run inside the wish to take something back and only one of them can finish. Reading the mark — what it tells you about how to act next — is available, is worth having, and is how anyone gets better at anything. Reaching for the state that stood before it has no completion condition, and knowing that does not stop the reaching and is on no schedule. If it has become a loop, something running many times an hour that does not stop when you are busy, that is work for a person and the person should be a clinician. A metaphysics can take shame off a mechanism. It cannot treat a mind that is grinding, and it must not be offered as though it could.
On a Tuesday
- Ask who reads it and when, rather than whether it is reversible. The first question has an answer you can look up in a minute. The second does not have the answer people think it has, and asking it is how the minute gets spent badly.
- Buy unread intervals. They are cheap and they are the whole game. A drafts folder, a staging environment, a branch, a thirty-second send delay, a night’s sleep before the reply. Every one of those purchases the same commodity: time in which a mark exists and nobody has read it. That interval is the entire operating range of undo, and unlike undo itself it can be extended.
- When an undo is available and complete, use it without ceremony. Configuration is where the word means what it says, and there is no virtue in refusing a tool that works. Being careful about a file nobody has opened is not the same as being careful.
- When it is not available, stop shopping for it. The move is a new mark beside the old one — a correction, a retraction, a changed practice, a better second attempt. The foundation is blunt that this is not a consolation prize: addition is the only operation anyone has ever had, and the reason it feels like a downgrade is a picture we acquired from a keyboard.
None of which is fatalism, and the foundation is careful about the difference. P5: the host can occupy a position from which its response to a readable condition is revisable. R13: agency is relocated, not abolished, and the host is the site of conscious responsibility. One term is closed. The other term is where you live, and what you do this afternoon is a term in it.
Undo has never once run backward. It works by keeping more — and the direction is not the obstacle. The direction is the difference between what comes back and what does not.