RATUM

Method

The rule is a type, and the type is tested.

§1   The rule

Every figure on this site is a Staged<T>. There is no arm that carries a value without its stage, and the FINAL arm cannot be constructed without the Ethereum assertion that ratified it — not a boolean, not a string somebody typed, the reference itself.

type Staged<T> =
  | { stage: "CONFIRMED"; value: T; at: L2Block }
  | { stage: "BATCHED";   value: T; at: L2Block; batch: Batch }
  | { stage: "FINAL";     value: T; at: L2Block; batch: Batch;
      assertion: Assertion }
  | { stage: "UNREADABLE"; why: string; tried: string }

Deliberately absent: markFinal(), stage = "FINAL", assumeFinal, orElse. Those are the doors an unsettled figure walks through wearing the same font as a settled one.

§2   And it is proved, not asserted

scripts/check-stage.mjs writes each cheat out as real TypeScript, runs the compiler over it, and fails the build if the compiler accepts any of them.

rejectedFINAL cannot be assembled without an assertion
rejectedFINAL cannot skip the batch
rejecteda sixth stage cannot be invented
rejectedan L1 block cannot stand in for an L2 block
rejectedan unreadable figure has no value to read
compileda correctly staged figure DOES compile

The last case is the important one. A checker that only proves failures passes for the wrong reason the moment something unrelated breaks — a typo in an import path makes every probe “correctly rejected” while testing nothing at all. In a sibling project that is exactly what happened: four cheats were being rejected by a compiler flag, not by the rule, and only the case that had to succeed could tell the difference.

No probe carries @ts-expect-error or an as cast either. Both suppress the error the case exists to provoke, so the file compiles and the probe reports the rule broken while it is working perfectly.

§3   Three things that look alike

0

A reading of zero

We read it, and the answer was nothing. A fact about the world.

——

A failed reading

We asked and could not see. A fact about us, and the call that failed is printed beside it.

words

Nothing to read yet

There is no assertion, no batch, no round. Not a failure — an absence, and it says so in a sentence.

§4   What this is not

It is not a warning about Robinhood Chain

A challenge window is what makes an optimistic rollup safe. Six days is the cost of being able to prove fraud. The fault is not that the window exists — it is that sites built on the chain describe settlement as immediate.

It is not an audit

Nothing here inspects a contract for defects. It reads four public values from Ethereum and prints them beside the claims they contradict.

It is not complete

The per-assertion state — which batch covers which L2 block, and which assertions are confirmed — is not read yet. The rollup's ABI for that differs from the one this reader knows, and rather than guess, the site says so here.

It is not a price or a product

There is nothing to buy on this site and no transaction for anybody to sign.

nothing here is called final without the assertion that ratified it. Take every reading yourself on the reader page, where each call is printed in full against a public Ethereum endpoint.