Sign in

You came here from the screen you left, and it is still open behind you. Back to the screen you left

Using it · page 12 of 17

Reading a verdict

The run page exists for one moment: you are about to put your name on something. It is ordered the way a careful judge weighs things.

In one breath

At the top, what DoneMark observed, in a sentence. Four criteria passed every rung DoneMark could observe. Or no criterion passed every rung, with what is still arriving said plainly, because evidence still coming is not a failure.

Four squares on every line

Under Done when, and the proof for each, every line you approved has four squares, one per question DoneMark asks of the check that answers it:

SquareThe question
1 · Failed beforeWas the check seen failing before the change — so it can tell the change apart from no change?
2 · Passes nowDid it pass on this attempt's own commit, in your CI?
3 · Runs new codeDoes it actually execute the lines this change added?
4 · Caught a mistakeWhen a line the change added was deliberately broken, did the check notice?

A filled square is a yes DoneMark observed. A red one is a no. A hollow one means the check passed in a way that could never have failed. A dashed square means not measured — your CI did not publish what that question needs, and it is never drawn as green. A line with no check at all is yours to judge.

The count reads the same everywhere — 11 of 12 proofs · 1 not measured — on this page, on the release and on the sealed record. Lines not fully answered are listed first, and you can still sign off: the record will say so.

Show every detail opens the rest — every rung of every check, every screen the run photographed, and what the agent says it did — and Show the essentials folds it away again.

The criteria, rung by rung

Folded under Every proof, rung by rung, each criterion and how far its evidence actually goes. A criterion can be:

  • held — a check was named, it ran, it passed, and it was seen failing first
  • passed, but unproven — it passed, but nothing observed makes it load-bearing
  • in conflict — something observed contradicts its check proving anything
  • yours to confirm — no check was named, so it is a judgement, not a measurement
  • nothing observed — DoneMark could not see anything about it

No column ever says proven. That word belongs to your verdict, not to a measurement.

Trying it yourself

If the project runs on Vercel, the page links the preview your host built from this attempt's own commit — A copy of this build is running · Open it ↗ — and says whether that copy talks to your live database. Lines seen by a journey show the walk, step by step, with its recording. See Seeing it running.

Beyond the criteria

If the run at the attempt's own commit is red for something no criterion claims, the page names it: the failing check's full name, its first line of error, its file and line. This is the case that used to fool people — every criterion green, and the run red for a reason nobody mentioned.

Whose fault a red run is

Every check run says one of three things, so you never have to open GitHub:

  • the code's — a named check failed
  • the machine's — the job was killed, ran out of memory, or a runner lost a worker after the tests had passed
  • superseded — cancelled while queued because a newer run replaced it

The same check red at the same commit in two runs reads as the code's, and the page says so twice. Once is the machine; twice is the code.

This door

If the door was opened by a look at an earlier attempt, the page says so, names that attempt, and dates when this attempt's own evidence arrived. You should never be judging one attempt with another's evidence in front of you.

The agent's claims

In a column of their own, in the agent's words, never merged with the evidence. An agent that says a criterion is met when CI says otherwise is showing you something useful — about the agent.

Which attempt you are judging

The door you are reading belongs to one attempt, and the verdict you give is sealed against that attempt — not against whichever is newest by the time you press. If a newer attempt appears while the door is open, the page says so before it will take a verdict, so you are never asked about one attempt and recorded as having judged another. An attempt that produced nothing — no branch, no commit — never becomes the attempt a door opens on, because there is nothing there to read.

The reason

The box opens with a draft from what DoneMark observed: the criteria that held, what is red beyond them, whose fault the red run was. Edit it, replace it, or write your own. Nothing is sealed until you press.

And the buttons follow the facts: Not quite first when something is red beyond your criteria, Sign off first otherwise, with a sentence saying which and why. Under each, what it does: signed with your reason · cannot be revised, and your reason goes back to the agent. The choice is yours.

If the requirement itself no longer stands — somebody changed their mind, or another requirement covered it — seal it as overtaken instead: no judgement on the work, nothing merged, nothing created to fix.

What signing off does

Seals the record: the ask, the evidence as it stood, the agent's claim, your decision and your name, for ever. And queues the release.

Not quite is recorded too, with your reason and the marks you drew, and opens the next attempt. It takes no DoneMark number. Under the reason on either record, Make this reason a decision turns it into a rule every later attempt is told (The brief and the decisions).

This run is red. Is it this change's fault?

Not always. Every red check says whose it is: this change, already broken on main, or DoneMark's machinery. A check that also fails on main was broken before the attempt began. A job that was killed or ran out of memory is the machine's, and running CI again fixes it. Only red that belongs to this change is grounds to refuse.

What does "in conflict" mean for this criterion?

Its check passed, but something DoneMark saw says the pass does not show the criterion holds. Usually the check also passes on the code as it was before the change, never runs the new lines, or kept passing while CI broke one of those lines on purpose. The criterion may still be met: read which, then judge it yourself.