Here is a sentence you have read many times: “I’ve implemented the fix and all tests pass.”
It is usually true, and it does not answer your actual question: whether the change is on the branch you ship from. Four separate facts sit inside the word done, none implying the next.
“All tests pass” is a claim about one of four different things
The third column earns its place: it tells you what to look at.
| What “done” might mean | Who is asserting it | What settles it |
|---|---|---|
| The session believes it is finished | The session, about its own work | Nothing. This is the claim; it is not evidence for itself |
| Somebody who did not write it has read it and agrees | A reader with no stake in the code | A review that names what it opened: a file and a line, or a command and its output |
| The commit is contained by the branch you ship from | The repository | git merge-base --is-ancestor $commit main |
| The tests that passed cover what changed | The test run | Which suite, and which tree it ran against |
The third and fourth go missing quietly. On 26 August 2026 a whole-file git add in our own
repository twice carried three lines whose type stayed in the working tree. Both trees were green;
neither commit could build alone.
In a shared checkout the tree is the union of everybody’s work and your commit is only your slice. A green suite answers a question about the tree, not about what you are pushing.
For one session in one tab, taking that claim at its word is the right call
One agent, one terminal, one repository: read the report, glance at git log, move on. Trusting it
costs one scroll-back the rare time it is wrong, and anything more is ceremony you will drop by
Thursday.
What breaks that is arithmetic, not distrust. Four tabs, and “is that one on main?” costs four scroll-backs. A week later the session is closed, and the claim survives only in a transcript nobody will reopen.
What the extra buys is a place where the four facts are written down separately, each at the moment it becomes true.
In Clawdline the four are four separate marks, and no session can write its own
Every session row carries four independent status axes rather than one good/bad icon, and one of them is what the session still owes. A debt survives until it is explicitly cleared.
One check means Delivered; awaiting approval, written only from a result bound to the exact process in that terminal now. Review, integration and landing may all still be outstanding.
The second check the app takes nobody’s word for. Recording a landing means naming a target branch
and a commit. The app refuses the record unless that commit is an ancestor of that branch. The check
is git merge-base --is-ancestor: your own tool, run by something with no stake in the answer. It
gates nothing; a pending landing blocks nobody. What it cannot do is quietly become a tick because
the session that wrote the code said so.
A review step works the same way: a reviewer reporting success does not advance it. The verdict has to name three axes: does the change do what was specified, does it break the invariants, does it fail properly. “Looks fine to me” is agreement, not verification.
The screen this buys you is a list called “Delivered, not landed”
The join is a group on the Projects page with that name. Its description is this post in two sentences: nothing says the work reached the tree: no landing record, and no branch git has merged. It is done; nothing merged it.
Every row carries its landing evidence in the app’s words. A root recorded and verified it; git: the branch is in HEAD; git: the branch is still unmerged; git: the branch is gone. Next to it is what would clear the row: land it, or write it off.
The fifth answer is git could not be asked. A stale, missing or ambiguous reading gets an explicit unknown rather than a tidier list. Doubtful evidence does not merely remove a row; it makes the list’s completeness unknowable. A list you cannot trust to be complete gets read as a checklist.
The Clawdfather page is the same idea from the other end: one coordinating session holds the machine-wide picture, not every session a partial copy.
What this does not prove
The containment check proves the commit is an ancestor of the branch you named, on your machine. Not that you pushed, that anybody deployed, or that the green tests ran against that tree.
Nor does recording a landing prove the review was independent. The app can refuse a session’s claim about itself and check a commit against a branch. It cannot tell you whether the reviewer opened the file.
A person working in the same checkout with nothing dispatched is invisible to all of it: no task, no row, no owner, no landing owed.
The four columns, with or without us
Keep four facts where you were keeping one. The report goes where reports go, and the review goes
next to the file and line it names. The landing is one command: git merge-base --is-ancestor $commit main && echo on-main. A test result is worth nothing until you record git rev-parse HEAD
beside it. That is the difference between “green” and “green on the tree I am asking about”.
Then the rule no tool gives you. Never let the party that did the work write the mark that says it is finished.
The workflows guide covers dispatch, delivery and landing in order. Two neighbours: sending work out in a way you can still cancel at minute three, and what happens when two sessions share one git index.