The guards
28 automated checks run against this site. Each one names a file, a rule and a finding; each one exits non-zero when the site and its own source of truth disagree. This page is generated from those scripts and from the workflow files that run them, so a guard cannot be added, removed, renamed or quietly unwired without this table following.
Why that matters more than the count. A hand-written list of what CI checks is the artifact a reviewer should trust least: it is a claim about coverage, written by the people whose coverage it describes, with nothing keeping it true. MEASURED 2026-09-24: four of these 28 were referenced by no workflow at all and had never been — they ran only when somebody remembered. They are wired now, and an unwired guard is a red run rather than a footnote.
Controls is how many planted defects a guard is tested against by its own self-test: a fixture is mutated and the run must go red for the named rule. A rule that cannot be made to fail is not a rule. 15 of 28 guards carry a self-test, 87 controls in total, and on 2026-09-24 every one of them passed.
⚠ These numbers are measured, not counted from the
source, and the difference is not pedantry. The first version of this page derived them
by counting call sites and published 28 against
a real 87 — short by exactly one per guard, which is the kind of near-miss that
survives review. They now come from
guard-controls-2026-09-24.json,
which runs every self-test and records what it printed.
3 guard(s) run a self-test that prints no count —
check-cost-qualifier, check-design-system, check-tool-names —
so their cell says runs, count not printed rather than a number nobody measured.
| Guard | What it measures | Runs | Controls |
|---|---|---|---|
check-agent-skills-digest |
The published agent-skills bundle matches its digest, so the skill text an agent installs is the text this site vendored. | agent-skills-index: push, PR, manual |
none |
check-canonical-links |
Every HTML page declares a canonical pointing at its OWN url. A copied <head> would point two pages at one url and pass a mere has-a-canonical check. | prose-and-structure: push, PR, manual |
none |
check-claim-table-versions |
Every element marked data-version-of names the version releases/atomic-stack.json says is published. The versions are read from the release manifest, never typed on the page. | claim-table-versions: push, PR, manual |
9 |
check-claims-verbatim |
Every page a claim names carries that claim's exact_copy in VISIBLE text — attributes and comments do not count, which is how a phrase living only in <meta keywords> is caught. | claims-verbatim: push, PR, manual |
6 |
check-cost-qualifier |
Cost and savings figures carry the qualifier that makes them honest, rather than standing as bare numbers. | prose-and-structure: push, PR, manual |
runs, count not printed --selftest |
check-css-classes |
Pinned utility classes are present and the known-missing set does not grow silently. | css-classes: push, PR, manual |
none |
check-decision-result-consumer |
The vendored Decision Spec consumer schema loads and every fixture validates against it. | decision-result-consumer-gate: push, PR, manual |
none |
check-design-system |
Pages obey the design-system rules in assets/design-system.css, against a baseline so an existing exception is not reported as new. | css-classes: push, PR, manual |
runs, count not printed --selftest |
check-enforcement-vocabulary |
The word 'enforce' appears on a surface only where the platform truth table says that surface PREVENTS — and never attached to a COMMAND, because a command does not enforce, a boundary does. | enforcement-vocabulary: push, PR, manual |
7 |
check-guard-claims |
Claims about the shipped agent-guard package agree with what that package actually is, with the floor derived from the release manifest rather than typed. | guard-claims: push, PR, manual |
none |
check-host-stamps |
Every documented install route carries a measurement stamp. Older than 30 days, or never measured, it must say 'LIVE_ROUTE — unverified on current host', and no card may claim support without a current stamp. | host-stamps: push, PR, manual, daily 40 6 * * * |
8 |
check-internal-links |
Every internal link resolves on disk or through a declared redirect; external links are reported, never failed; and pinned external urls stay on their canonical form. | internal-links: push, PR, manual |
8 |
check-limits-count |
The published limit count in the prose equals the length of the shipped does_not_prove list, and one named page carries every entry verbatim. | limits-count: push, PR, manual |
7 |
check-mcp-server-card |
The served MCP server card is byte-identical to the mirror this site vendors. | mcp-server-card-drift: push, PR, manual, daily 0 12 * * *mcp-surface-anchor: push, PR, manual |
none |
check-mcp-surface-anchor |
The MCP surface anchor, its mirror and the HTML that quotes it all carry the same digest. | mcp-surface-anchor: push, PR, manual |
none |
check-orphan-pages |
Every INDEXED page is reachable by at least two internal links, or by one from its section's hub. The sitemap is a list we hand a crawler; the link graph is what a reader walks. | orphan-pages: push, PR, manual |
6 |
check-position-sentence |
The homepage, llms.txt and llms-full.txt open with the same positioning sentence, byte for byte, and the email signature carries its headline. | position-sentence: push, PR, manual |
9 |
check-pricing-truth |
Every pricing surface agrees on the decided unit, tiers and limits, including the structured data. | pricing-truth: push, PR, manual |
none |
check-proof-badges |
Every badge on /verify/ says what the newest proof run actually found, and the run is not older than eight days. | proof-run: PR, manual, daily 20 6 * * * |
8 |
check-prose-claims |
The vendored prose-claims mirror matches the table the app serves. | prose-claims-drift: push, PR, manual, daily 0 12 * * * |
none |
check-provider-statements |
Statements about what a PROVIDER does are the provider's own words, or are marked as ours. | prose-and-structure: push, PR, manual |
none |
check-selection-claims |
No selection number is published anywhere while benchmark/north-star.json holds no results entry measured by selection-parser/2. | selection-claims: push, PR, manual |
11 |
check-served-html |
The bytes coderifts.com serves match this repository, with only the two named third-party insertions tolerated. An uncommitted difference is reported as pending deploy, not drift. | served-html-drift: push, PR, manual, daily 0 13 * * * |
none |
check-system-prompts |
The published system prompts match the ones the app serves. | system-prompts-drift: push, PR, manual, daily 0 12 * * * |
none |
check-token-drift |
No tracked page declares its own :root block or introduces an off-palette colour. Scoped to git-tracked files, so the verdict does not depend on whose machine ran it. | token-drift: push, PR, manual |
4 |
check-tool-catalog |
The published tool catalogue matches the live tools/list, in both the default and the advanced-tools form. | tool-catalog-drift: push, PR, manual, daily 0 12 * * * |
none |
check-tool-names |
Only canonical tool names are presented as the surface: a hidden deprecation alias is never listed as current, and an opt-in advanced tool is never called a deprecation. | prose-and-structure: push, PR, manual |
runs, count not printed --selftest |
check-wellknown-parity |
coderifts.com and app.coderifts.com serve the SAME DOCUMENT at /.well-known/coderifts.json — normalised, so formatting may differ and a field may not. | wellknown-parity: push, PR, manual, daily 50 6 * * * |
4 |
What this page does not prove
- That the site is correct. A guard proves the site agrees with a source of truth we also wrote. Where that source is the platform itself — a live endpoint, a published package, a registry — the agreement is worth more; where it is a file in this repository, it is worth exactly as much as that file.
- That every claim on the site is guarded. These checks cover what somebody built a check for. A sentence nobody thought to guard is unguarded, and no number on this page would reveal that.
- That a control count is a quality measure. 87 planted defects across 12 guards says those rules have been shown to fail; it does not say the rules are the right rules.
- That the 13 guards with no self-test are weaker. Several of them compare bytes to a LIVE surface, where the surface itself is the control and a planted fixture would prove less.
- That the controls ran in CI on the date above. That capture is one machine on one date. CI runs the same self-tests on every push, and that is what makes the numbers load-bearing rather than decorative.
- That a daily run happened. 8 guard(s) are on a schedule, and a schedule is
a promise about intent. Two of them fail on their own if the run stops —
check-proof-badgesafter eight days,check-host-stampsafter thirty — which is the only reason a stopped schedule becomes visible.
Related: what is a gate today versus planned, what each proof proves, and the proof runs that re-execute the terminal blocks on /verify/ every day.