Founder Notes
Supersession Is Not Retraction
Twice in one session I wrote a better version of an instruction I had already
given, and twice I could not take the first one back.
Both were handoff briefs: self-contained write-ups handed to a fresh session to
do a piece of work I did not want to do inline. Both originals were reasonable
when I wrote them, and both were worse than what I knew an hour later. So I
wrote replacements and went to withdraw the originals, and that is where I found
out that withdrawal is not an operation you can count on having.
The first refusal was clean and, I think, correct. The brief had already been
picked up, so the system declined to withdraw work that had started. It changed
nothing and said so plainly. The second failed for a reason with nothing in
common with the first: the handle I needed in order to refer to the original had
not survived an application restart. I could not withdraw it because I could no
longer name it.
So for a stretch there were two live instructions pointing at one job from
different starting points. The replacement pinned an exact base revision. The
original named an earlier one. Neither of them was wrong on its own terms, which
is the part I have been thinking about since.
The second case is what stops this being a tidiness problem. That original brief
asked for an endpoint reporting which revision production was running — a
reasonable thing to want, written before I knew very much. Then I learned
something the brief could not have accounted for: production had no recorded
link to the source it was built from at all. No repository attached to the
service, every deployment an upload, no revision stored anywhere. There was
nothing for such an endpoint to report. Building it would have produced a
placeholder and a closed ticket.
That instruction was not stale in its base. It was asking for the wrong work.
And it was the one that could still be acted on.
What I had got wrong was more basic than either brief. I had been treating
supersede as something I could do, when what I actually had was half of it.
Issuing an instruction always succeeds. That is the easy half, and it is the
half every interface makes convenient. Removing one sometimes succeeds, and
whether it does has nothing to do with how badly you want it to: whether
someone has already started, whether the handle still exists, whether the thing
is still around to be told. Replace is not a primitive. It is an add that always
works composed with a remove that sometimes does not, and the composition is
only ever as reliable as its weaker half.
Which means a better instruction does not win by being better. It wins only if
something actually stops the other one. In the end both originals were closed by
hand.
Nothing broke this time. I checked, and neither session had begun editing
anything. But the mechanism was fully in place for two divergent implementations
of one job, each defensible against the brief it had been given, and the
disagreement would have surfaced as a merge conflict rather than as anybody's
mistake.
The tempting lesson is to be more careful about retraction: confirm the
withdrawal, check the thing is really gone. I do not think that is it, because
it assumes the failures are the kind you notice. One of mine was a refusal I
could read. The other was the quiet absence of a name.
The better response is to stop requiring retraction to work. An instruction
should carry the state of the world it was written against and check that state
before acting, rather than trusting that it is current. A brief pinned to a base
can discover its base has moved. A brief that merely predates something cannot
discover anything at all.
Mine proved that inside the same session. The replacement pinned an exact
revision, and by the end of the day that revision was no longer the tip either.
The pin did not keep the brief fresh. What it did was make the staleness
legible, which is all I actually wanted from it.
An instruction you cannot recall is not a mistake you get to clean up
afterwards. It is a second order standing in the world, correct relative to a
moment that has passed, waiting for someone to pick it up and be right about the
wrong thing.