part of: the tour · chapter 12 of 12

Built to stay honest

The rules the code enforces on itself: works without JavaScript, no dead ends, no cookies, no verdicts.

Everything works without JavaScript

Every page here is complete and true with scripts disabled — including the explorer, the knowledge-time scrub and the search. It is checked route by route on every build — every public route, every time, including the chapter you are reading.

Why Scripts fail, are blocked, are stripped by readers and archives, and are invisible to most machines. If the canonical content lived in a script, the site would only exist for people with a working browser and no reason to distrust it.

Connects It is why every interactive element on this site is described as an upgrade to something that already worked.

See it live A page that needs no scripts

What the moving parts actually add

Collapse and focus on branches; a draggable knowledge-time cursor; readouts on the sparklines; instant re-filtering in the explorer; type-ahead in search. Each replaces a link, a form or an expanded section that is already in the page.

Why Named that way, each one is easy to judge: if removing it removed a fact, it was doing too much. None of them does.

Connects The rule is enforced, not intended — the check strips every script and demands the page still say what it exists to say.

See it live The islands, in place

The charts are drawn on the server

Sparklines and bars are server-rendered SVG with text equivalents. No charting library is shipped to your browser.

Why It keeps the pages light, keeps the numbers in one place, and means a chart survives into the Markdown twin, a screen reader and a printed page as a sentence.

Connects Same reason nothing in the browser computes belief: one implementation of the arithmetic, on the server.

See it live Server-drawn sparklines

Empty states state their mechanism

No section here says “None.” Every empty list explains why it is empty: “No independent evidence yet — 4 assertions await corroboration”, “Track record: not yet computed”, “narrative ranking pending”, “Promoted 2h ago; linking in progress.”

Why On a site about uncertainty, absence is information. An empty section teaches the reader that the site is broken; a sentence teaches them what the model currently knows and does not.

Connects It is audited: a page whose empty state says only “None” or “No data” fails the build.

See it live A page that is honestly thin

Sentences the site is not allowed to say

Certain phrasings are banned outright and checked for on every page — “probability that”, “proven true”, “we rate”, “verdict:”, “debunked”. Others are required: a leading branch always qualified, every share attributed to a lens, a derived claim always saying it was inferred and by what.

Why Copy is where a careful system becomes an overconfident one, one convenient sentence at a time. Making the rules machine-checkable means they survive their author.

Connects There is one deliberate exception: the About page may say “not a fact-checker issuing verdicts”, because the word is being denied. A blunt ban would have forced the truest sentence on the site off it.

See it live What it is not

Colour never carries meaning alone

Support and challenge are green and red and ▲ and ▼ and the words. Thin corroboration is faint and labelled. Every bar and chart has a text equivalent.

Why For colour-blind readers, screen-reader users, printed pages, bright sunlight and the Markdown twin — in all of which the colour is simply not there. Redundancy is not decoration here; it is the actual channel.

Connects The theme toggle in the header switches between a light and a dark palette, both built from the same set of named colours and both checked, so neither is an afterthought. It follows your system preference until you say otherwise.

See it live Colour with its labels

Accessibility — and what has not been checked

Real headings, real semantic elements, labelled controls, a skip link, keyboard-operable everything, and motion that respects a reduced-motion preference. All checked mechanically on every build.

Why And the honest half: colour contrast, focus order and screen-reader behaviour need a real browser, and have not yet been tested in one. The checker says so every time it runs rather than implying a clean bill of health.

Connects It is the same rule the rest of the site follows — state what you do not know, in the place where someone might otherwise assume you do.

See it live Report a problem

Slow pages get fixed, not cached

Every page has a query budget — ten for a content page, six for the front page — measured on each build, with the count returned in a response header.

Why Caching a page that asks eighteen questions of the database hides the design problem and adds a second one: a cached page can be wrong, and on a site whose whole value is being current, wrong is expensive.

Connects The budget is why the data-assembly modules exist in the shape they do — and the same shape is what makes the twins and the API free.

See it live The front page

The public site cannot write to anything

The application serving these pages holds a read-only database role, has no keys to any language model, and never calls the system that does the reading and reasoning. The two halves communicate only through the database.

Why It makes a whole category of failure impossible rather than unlikely: nothing you do as a reader can alter the record, and no page render can invoke a model or spend anything.

Connects It is also why visit counting writes to a file rather than a table — the boundary is worth more than the convenience.

See it live What this is

Counting without watching

Visits are counted as a timestamp and a path. Two fields. No cookie, no identifier, no referrer, no user agent, no address — and the site sets no cookies at all.

Why Knowing which Questions get read is genuinely useful for deciding what to improve. Nothing beyond that is needed, and on a site about contested events, a record of who read what is a liability to everyone including its readers.

Connects There are no third-party scripts of any kind on this site, so nobody else is counting either.

See it live Search privacy

No accounts, no comments, no votes

There is nothing to sign up for and nothing to vote on. The public site is read-only in every sense.

Why Belief here is computed from evidence. A voting mechanism would introduce exactly the quantity the whole design refuses — popularity — and an account system would create a record of readers for no benefit to them.

Connects The thing you can share is a URL, and a URL carries the whole state: the lens, the moment, the version of events.

See it live A world as a URL

What is not built yet

Semantic search over meaning rather than words; a small map of a node’s neighbourhood; a second belief model to switch between; written daily digests; a “what if I discounted this term” control on the audit table; a browser-based accessibility pass.

Why Listing them is cheaper than being asked, and it marks the boundary between what this site does and what it is imagined doing — a boundary that otherwise erodes in exactly one direction.

Connects When the second belief model arrives it will appear in the lens switcher automatically, because lenses were built as a list rather than as a pair.

See it live Lenses

If something here is wrong

Every page footer carries a report link. It goes to a person.

Why A model built out of other people’s reporting will get things wrong — a bad merge, a mangled quote, a claim attributed to the wrong speaker — and the people best placed to notice are the ones being written about.

Connects Corrections enter the record the way everything else does: as new evidence and new links, logged, never as a silent edit.

See it live Report a problem · The change log