WARRANT is the grammar the figures, tables and numbers on this site are drawn in. The stroke of every line and the underline of every number say what it rests on: an exact decision, floating-point arithmetic, a choice, or nothing at all. A verdict is always a word. It covers the instruments and the pages read most; every other report takes it when it is next edited, and material already submitted elsewhere stays exactly as submitted. Below: the four marks, drawn live by the module; the sixteen rules, each with the finding on one of these pages that taught it; the colour law; the premise ladder for numbers that rest on a model; how the build enforces all of it; and how to use it in figures of your own.
A chart and a table both assert things, and neither usually says which of its marks the data forced and which the renderer, the solver or the tolerance chose. A fitted curve drawn solid looks exactly like a proved bound drawn solid. This grammar gives every mark one of four standings, and each standing one stroke:
A mark takes the weakest standing on its path to the pixel: a knot computed exactly is solid, and the line drawn between two such knots is dotted, because a straight line is one curve of many through them. Standing is not a verdict. CERTIFIED, REFUTED and REFUSED are what an instrument concluded about a claim; they are said in words and chips, never in a stroke, and a refutation proved here is drawn solid. Nor is standing a confidence: a value known to many decimals can still be undecided, and a decided value can have a wide bracket, which is drawn as its own extent.
Every mark below is drawn by playground/warrant.js as this page is built, on one curve: y = √x for x from −1 to 4. The exact parts are decided by this page’s builder in integer arithmetic; the float parts are Math.sqrt. If the module changes, these drawings change with it.
A number that rests on a model names what it rests on, in the order the number travelled, each premise with its grade: validated · compared · verified · assumed (the ladder is explained below). This is the chain behind a wave limit at a beach on Swell, built here from the records Swell reads:
The arithmetic is exact; the weakest premise is assumed. Where the island reads less than the Boussinesq model — Pântano do Sul (0.39×), Ingleses (0.43×) and Galheta (0.99×) — “under the limit” calls for more caution than the arithmetic shows.
The rulebook is design/WARRANT.md (v2, frozen 28 October 2026, with dated rulings since). Each rule below was found on a page here that broke it. Each names the page, what was wrong, and the change that fixed it; the fix is checked by that page’s own build, which refuses when its record stops supporting its sentence.
Ink comes first: a figure must read completely in greyscale, and a colour always arrives with a shape and a word. The law came from a measurement: run through the validator, the palette of Machinidae, a sibling project built on this grammar, showed its two main series colours ΔE 0.4 apart to a deuteranope. To that reader they were one colour.
Read from the rulebook when this page is built. No swatches: the only colour this page draws is the witness ×.
The witness red, #e0574e (the × in the meet specimen above), marks an exhibited counterexample and nothing else. Until 29 October the apps carried a second red for a refused state, ΔE about 4 from the witness: one red to the eye with two meanings, against law 2. It is folded now. The apps’ refused state reads the witness token, with the witness’s meaning: a decided state shown together with the datum that breaks the rule, always with its icon and its word.
Standing says how a number was computed. A number that rests on a physical model needs a second answer that standing cannot give: the arithmetic can be exact while the equations it was exact about have never met the thing they describe. So each premise carries a grade, which says where the checking of it stopped. Strongest first:
The ladder is the verification-and-validation ladder of the modelling literature — Roache (1998), Oberkampf and Roy (2010), the ASME V&V 20 standard (2009) — cut to four grades a reader can tell apart. A conclusion is as checked as its weakest premise (W.weakest), and the page that states it names that premise. A grade is never a probability and never a confidence. It is carried by a word first and a three-step glyph second, never by colour.
A read step (ruled 29 October). A proof step that was read and not run by a machine gets no grade of its own: it is assumed, and the gloss says so. It does not cap a verdict. CERTIFIED, PARTIAL, REFUTED and REFUSED keep the meaning their certificate gives them; every read step is listed, graded assumed, in the page’s “what it rests on”, and the chain’s last line names it. A reader always sees where the machine stopped; the verdict word never hides a reading, and a reading never demotes a decision it does not touch. δ₃ = 117/2192 is an example: a decided finite core, and three steps proved on paper and read, listed as assumed.
Where a model carries an extent, the same idea is drawn as the halo (rule 13, the key above): blur is the sign of uncertainty readers understand most readily (MacEachren et al. 2012).
A grammar that no build checks is a suggestion. Four programs read every built page and refuse the site when a page breaks the grammar or its layout gets worse. Each carries red controls, planted violations it must catch, so a check that cannot fail is caught too. The numbers below are read from their output and their records as this page is built.
This page is held to the same standard by its own builder, tools/build-grammar.js, which reads every number above from its record and refuses to build when one stops saying what the page says.
The module is one file, playground/warrant.js, MIT-licensed, with the five patterns in design/grammar.js beside it; it needs no library. In Node, with what each call returns as this page was built:
const W = require('./playground/warrant.js');
// a line: its standing picks the stroke
W.attrs(W.COMPUTED)
→ class="w-computed" fill="none" stroke-width="2" stroke-dasharray="5 4"
W.attrs(W.meet(W.DECIDED, W.CHOSEN), { width: 1 })
→ class="w-chosen" fill="none" stroke-width="1" stroke-dasharray="1 3" stroke-linecap="round"
// a number in text
W.value('3.1416', W.COMPUTED)
→ <span class="w-val w-computed" title="computed — float, or a number someone printed; nothing decided it">3.1416</span>
// the legend, compact beside a figure, and the stylesheet, once per page
W.legendHtml({ compact: true })
W.css()
// a chain of premises, in the order the number travelled through them
W.premisesHtml([
{ grade: W.VALIDATED, label: 'The open sea and its band', evidence: '...' },
{ grade: W.ASSUMED, label: 'Breaking', evidence: '...' },
], { meetLine: 'The weakest premise is assumed.' })On a canvas, setLineDash takes the same patterns from grammar.js: G.dash.claim is [5, 4] and G.dash.pick is [1, 5]. The legend and the ladder in Portuguese — suposto, verificado, comparado, validado — are in playground/warrant-pt.js. The rules are in design/WARRANT.md.
A print version and a Python kit for matplotlib are in preparation.