{
  "generatedOn": "2026-09-28",
  "count": 159,
  "source": "package.json → scripts.build / build:no-prerender / check:explore-real",
  "build": {
    "commit": "ba0993b3bed66b964f4305636462fa137dd9d2f8",
    "commitSource": "VERCEL_GIT_COMMIT_SHA",
    "rankingsDigest": "e1eb24980abb51668d59af44b58e827d7a27ae1b19b646740329aedd81002843",
    "rankingsDigestOf": "sha256 over public/data/rankings.json with its top-level generatedAt removed and every object's keys sorted (scripts/lib/build-identity.mjs)",
    "rankings": {
      "categories": 119,
      "products": 983,
      "engine": "2026.09.15"
    },
    "chain": "build",
    "sealed": true,
    "exitStatusBasis": "Rewritten by the last step of npm run build: its steps are joined with &&, so every gate it runs exited 0 to reach this step. null: the gate is not in this chain."
  },
  "checks": [
    {
      "name": "check-a11y-rendered",
      "file": "scripts/check-a11y-rendered.mjs",
      "headline": "ACCESSIBILITY, IN THE RENDERED DOM (WCAG 2.2 AA — the part static analysis",
      "exitStatus": null
    },
    {
      "name": "check-a11y",
      "file": "scripts/check-a11y.mjs",
      "headline": "check-a11y — static WCAG-AA accessibility ratchet, in CI",
      "exitStatus": 0
    },
    {
      "name": "check-affiliate-blind",
      "file": "scripts/check-affiliate-blind.mjs",
      "headline": "check-affiliate-blind — ranking-vs-affiliate firewall, in CI",
      "exitStatus": 0
    },
    {
      "name": "check-affiliate-ids",
      "file": "scripts/check-affiliate-ids.mjs",
      "headline": "check-affiliate-ids — every earning id must resolve to a real catalog product",
      "exitStatus": 0
    },
    {
      "name": "check-alert-policy-matches-server",
      "file": "scripts/check-alert-policy-matches-server.ts",
      "headline": "CHECK — the alert promise matches the alert rule",
      "exitStatus": 0
    },
    {
      "name": "check-answer-notes-live",
      "file": "scripts/check-answer-notes-live.ts",
      "headline": "check-answer-notes-live — an explanation keyed to a criterion that is gone",
      "exitStatus": 0
    },
    {
      "name": "check-answer-targets-exist",
      "file": "scripts/check-answer-targets-exist.ts",
      "headline": "EVERY ANSWER MUST ASK FOR SOMETHING THE ENGINE CAN READ",
      "exitStatus": 0
    },
    {
      "name": "check-api-functions",
      "file": "scripts/check-api-functions.mjs",
      "headline": "CI guard: enforces the Vercel Hobby-plan 12-serverless-function ceiling.",
      "exitStatus": 0
    },
    {
      "name": "check-api-imports-are-bundled",
      "file": "scripts/check-api-imports-are-bundled.mjs",
      "headline": "check-api-imports-are-bundled — an API handler may not import code from src/",
      "exitStatus": 0
    },
    {
      "name": "check-api-no-literal-scores",
      "file": "scripts/check-api-no-literal-scores.mjs",
      "headline": "check-api-no-literal-scores — the agent API states no number it did not publish",
      "exitStatus": 0
    },
    {
      "name": "check-api-routers-guarded",
      "file": "scripts/check-api-routers-guarded.mjs",
      "headline": "check-api-routers-guarded — no public router runs without the shared guards",
      "exitStatus": 0
    },
    {
      "name": "check-asset-directory-mirrors",
      "file": "scripts/check-asset-directory-mirrors.ts",
      "headline": "check-asset-directory-mirrors — three hand-written copies of one public set",
      "exitStatus": 0
    },
    {
      "name": "check-availability-language",
      "file": "scripts/check-availability-language.ts",
      "headline": "check-availability-language — no surface rounds an availability state up",
      "exitStatus": 0
    },
    {
      "name": "check-availability-tier-matches-regions",
      "file": "scripts/check-availability-tier-matches-regions.ts",
      "headline": "check-availability-tier-matches-regions — a product may not claim more reach",
      "exitStatus": 0
    },
    {
      "name": "check-axis-scorers-publish-their-rule",
      "file": "scripts/check-axis-scorers-publish-their-rule.ts",
      "headline": "FIVE CATEGORIES SCORE 62 PRODUCTS BY A RULE THEY DO NOT PUBLISH",
      "exitStatus": 0
    },
    {
      "name": "check-bestfor-labels-current",
      "file": "scripts/check-bestfor-labels-current.ts",
      "headline": "check-bestfor-labels-current — renamed a criterion? the copy did not follow",
      "exitStatus": 0
    },
    {
      "name": "check-brand-region-consistency",
      "file": "scripts/check-brand-region-consistency.ts",
      "headline": "check-brand-region-consistency — one brand, one answer about where it operates",
      "exitStatus": 0
    },
    {
      "name": "check-build-test-exclusions",
      "file": "scripts/check-build-test-exclusions.ts",
      "headline": "check-build-test-exclusions — the build gate is allowed to skip tests, but",
      "exitStatus": 0
    },
    {
      "name": "check-byline-is-derived",
      "file": "scripts/check-byline-is-derived.ts",
      "headline": "check-byline-is-derived — who wrote it, who checked it and when, from a record",
      "exitStatus": 0
    },
    {
      "name": "check-catalog-unique-ids",
      "file": "scripts/check-catalog-unique-ids.ts",
      "headline": "check-catalog-unique-ids — product ids must resolve deterministically",
      "exitStatus": 0
    },
    {
      "name": "check-category-clone-leak",
      "file": "scripts/check-category-clone-leak.ts",
      "headline": "check-category-clone-leak — no two categories may share user-facing prose",
      "exitStatus": 0
    },
    {
      "name": "check-category-goals-cover",
      "file": "scripts/check-category-goals-cover.ts",
      "headline": "EVERY CATEGORY MUST BE REACHABLE BY DESCRIBING WHAT YOU WANT",
      "exitStatus": 0
    },
    {
      "name": "check-category-icons-are-distinct",
      "file": "scripts/check-category-icons-are-distinct.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-category-labels-are-names",
      "file": "scripts/check-category-labels-are-names.ts",
      "headline": "check-category-labels-are-names — a label is a NAME, not a sentence",
      "exitStatus": 0
    },
    {
      "name": "check-category-pool-sizes",
      "file": "scripts/check-category-pool-sizes.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-comment-counts-current",
      "file": "scripts/check-comment-counts-current.mjs",
      "headline": "A COMMENT THAT COUNTS THE CATALOG GOES STALE EVERY MINT",
      "exitStatus": 0
    },
    {
      "name": "check-commission-state-is-stated",
      "file": "scripts/check-commission-state-is-stated.ts",
      "headline": "check-commission-state-is-stated — silence is not a disclosure",
      "exitStatus": 0
    },
    {
      "name": "check-compare-summary-is-supported",
      "file": "scripts/check-compare-summary-is-supported.ts",
      "headline": "CHECK — the compare summary only says what the numbers say",
      "exitStatus": 0
    },
    {
      "name": "check-comparison-pool-integrity",
      "file": "scripts/check-comparison-pool-integrity.ts",
      "headline": "check-comparison-pool-integrity — a category may only compare its own products",
      "exitStatus": 0
    },
    {
      "name": "check-consent-before-trackers",
      "file": "scripts/check-consent-before-trackers.mjs",
      "headline": "check-consent-before-trackers — nothing external loads before the visitor says yes",
      "exitStatus": 0
    },
    {
      "name": "check-consent-locales",
      "file": "scripts/check-consent-locales.mjs",
      "headline": "check-consent-locales — the consent bar fits a phone in every language it ships in",
      "exitStatus": 0
    },
    {
      "name": "check-content-clone-leak",
      "file": "scripts/check-content-clone-leak.ts",
      "headline": "check-content-clone-leak — the SECOND layer of cloned prose",
      "exitStatus": 0
    },
    {
      "name": "check-contracts",
      "file": "scripts/check-contracts.mjs",
      "headline": "check-contracts — A2 input-contract coverage floor (ratchets UP)",
      "exitStatus": 0
    },
    {
      "name": "check-contrast",
      "file": "scripts/check-contrast.mjs",
      "headline": "check-contrast — static WCAG-AA text-contrast gate for the design tokens",
      "exitStatus": 0
    },
    {
      "name": "check-corrections-applied",
      "file": "scripts/check-corrections-applied.ts",
      "headline": "check-corrections-applied — a correction written in prose is not a correction",
      "exitStatus": 0
    },
    {
      "name": "check-corrections-reconcile",
      "file": "scripts/check-corrections-reconcile.ts",
      "headline": "check-corrections-reconcile — a published number that changed says why",
      "exitStatus": 0
    },
    {
      "name": "check-country-page-eligibility",
      "file": "scripts/check-country-page-eligibility.ts",
      "headline": "check-country-page-eligibility — the country pages and the engine must agree",
      "exitStatus": 0
    },
    {
      "name": "check-counts-match-their-label",
      "file": "scripts/check-counts-match-their-label.ts",
      "headline": "A COUNT MAY ONLY BE CALLED WHAT IT COUNTS",
      "exitStatus": 0
    },
    {
      "name": "check-criteria-are-scored",
      "file": "scripts/check-criteria-are-scored.ts",
      "headline": "check-criteria-are-scored — the published methodology must be the real ranking",
      "exitStatus": 0
    },
    {
      "name": "check-criterion-bands",
      "file": "scripts/check-criterion-bands.ts",
      "headline": "WHAT DOES A 7 MEAN?",
      "exitStatus": 0
    },
    {
      "name": "check-criterion-citations",
      "file": "scripts/check-criterion-citations.ts",
      "headline": "check-criterion-citations — a score without a citation cannot be audited",
      "exitStatus": 0
    },
    {
      "name": "check-criterion-tables-live",
      "file": "scripts/check-criterion-tables-live.ts",
      "headline": "check-criterion-tables-live — a lookup keyed on a criterion id that is gone",
      "exitStatus": 0
    },
    {
      "name": "check-criterion-variance",
      "file": "scripts/check-criterion-variance.ts",
      "headline": "check-criterion-variance — a criterion nobody varied is a criterion unscored",
      "exitStatus": 0
    },
    {
      "name": "check-cron-auth-fails-closed",
      "file": "scripts/check-cron-auth-fails-closed.mjs",
      "headline": "check-cron-auth-fails-closed — a cron handler may not authorise on a header,",
      "exitStatus": 0
    },
    {
      "name": "check-data-layer",
      "file": "scripts/check-data-layer.mjs",
      "headline": "check-data-layer — ratchet: raw Supabase REST only inside api/_lib/db/",
      "exitStatus": 0
    },
    {
      "name": "check-dates-name-their-concept",
      "file": "scripts/check-dates-name-their-concept.ts",
      "headline": "A DATE MUST SAY WHICH DATE IT IS",
      "exitStatus": 0
    },
    {
      "name": "check-decision-vocabulary",
      "file": "scripts/check-decision-vocabulary.ts",
      "headline": "FIVE NAMES, FIVE THINGS — the decision vocabulary holds (Brief 3 §22)",
      "exitStatus": 0
    },
    {
      "name": "check-dimension-separates",
      "file": "scripts/check-dimension-separates.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-display-score-resolution",
      "file": "scripts/check-display-score-resolution.ts",
      "headline": "check-display-score-resolution — the number must not tie when the ranking does not",
      "exitStatus": 0
    },
    {
      "name": "check-economic-field-semantics",
      "file": "scripts/check-economic-field-semantics.ts",
      "headline": "A NUMBER SITS IN THE FIELD ITS OWN NOTE DESCRIBES (Decision Economics §2/§21)",
      "exitStatus": 0
    },
    {
      "name": "check-editorial-no-shadow-ranking",
      "file": "scripts/check-editorial-no-shadow-ranking.ts",
      "headline": "EDITORIAL PROSE CARRIES NO SHADOW RANKING (Brief 3 §24 / §25)",
      "exitStatus": 0
    },
    {
      "name": "check-engine-differentiation",
      "file": "scripts/check-engine-differentiation.ts",
      "headline": "check-engine-differentiation — a category must be able to rank its own pool",
      "exitStatus": 0
    },
    {
      "name": "check-entity-facts-agree",
      "file": "scripts/check-entity-facts-agree.ts",
      "headline": "ONE COMPANY, RESEARCHED TWICE, ANSWERING DIFFERENTLY",
      "exitStatus": 0
    },
    {
      "name": "check-evidence-claim-matches-telemetry",
      "file": "scripts/check-evidence-claim-matches-telemetry.ts",
      "headline": "AN EVIDENCE CLAIM MAY NOT EXCEED THE EVIDENCE (master audit §LXII, §CVI)",
      "exitStatus": 0
    },
    {
      "name": "check-evidence-state",
      "file": "scripts/check-evidence-state.ts",
      "headline": "FOUR THINGS THAT WERE ONE BADGE — evidence state stays separated (§13–§21)",
      "exitStatus": 0
    },
    {
      "name": "check-exclusion-kinds-ratchet",
      "file": "scripts/check-exclusion-kinds-ratchet.ts",
      "headline": "A REFUSAL SHOULD BE READABLE BY A MACHINE, AND MORE OF THEM OVER TIME",
      "exitStatus": 0
    },
    {
      "name": "check-exclusions-published",
      "file": "scripts/check-exclusions-published.ts",
      "headline": "check-exclusions-published — a refusal that reaches no reader is not a refusal",
      "exitStatus": 0
    },
    {
      "name": "check-explorer-bundle",
      "file": "scripts/check-explorer-bundle.mjs",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-explorer-prints-what-it-filters",
      "file": "scripts/check-explorer-prints-what-it-filters.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-explorer-state-is-addressable",
      "file": "scripts/check-explorer-state-is-addressable.ts",
      "headline": "check-explorer-state-is-addressable — a filtered comparison must be a link",
      "exitStatus": 0
    },
    {
      "name": "check-facet-rail-survives-a-click",
      "file": "scripts/check-facet-rail-survives-a-click.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-family-hue-is-not-text",
      "file": "scripts/check-family-hue-is-not-text.ts",
      "headline": "A COLOUR THAT CARRIES A TAXONOMY IS NOT A COLOUR YOU CAN READ",
      "exitStatus": 0
    },
    {
      "name": "check-faq-answers-its-question",
      "file": "scripts/check-faq-answers-its-question.ts",
      "headline": "check-faq-answers-its-question — an FAQ answer must answer ITS OWN question",
      "exitStatus": 0
    },
    {
      "name": "check-featured-matches-verdict",
      "file": "scripts/check-featured-matches-verdict.ts",
      "headline": "THE HOMEPAGE'S #1 IS THE ENGINE'S #1 — PROVABLY, PER CATEGORY",
      "exitStatus": 0
    },
    {
      "name": "check-feed-joins-pool",
      "file": "scripts/check-feed-joins-pool.ts",
      "headline": "A LIVE FEED MUST REACH THE POOL IT IS SHOWN BESIDE",
      "exitStatus": 0
    },
    {
      "name": "check-fit-never-prints-as-overall",
      "file": "scripts/check-fit-never-prints-as-overall.ts",
      "headline": "FIT NEVER PRINTS AS OVERALL — A READER'S RUN IS NAMED BY ITS RUN, NOT BY UI STATE",
      "exitStatus": 0
    },
    {
      "name": "check-footer-links-resolve",
      "file": "scripts/check-footer-links-resolve.ts",
      "headline": "A FOOTER LINK MUST GO SOMEWHERE THAT IS NOT THE HOMEPAGE",
      "exitStatus": 0
    },
    {
      "name": "check-foreign-provider-mentions",
      "file": "scripts/check-foreign-provider-mentions.ts",
      "headline": "check-foreign-provider-mentions — copy may only name providers it actually has",
      "exitStatus": 0
    },
    {
      "name": "check-frontend-structure",
      "file": "scripts/check-frontend-structure.mjs",
      "headline": "check-frontend-structure — ratchets against frontend structural decay (0.3)",
      "exitStatus": 0
    },
    {
      "name": "check-hard-constraint-semantics",
      "file": "scripts/check-hard-constraint-semantics.ts",
      "headline": "check-hard-constraint-semantics — copy may only promise an exclusion the",
      "exitStatus": 0
    },
    {
      "name": "check-holds-back-is-derived",
      "file": "scripts/check-holds-back-is-derived.ts",
      "headline": "CHECK — \"why it is not higher\" is arithmetic, not editorial",
      "exitStatus": 0
    },
    {
      "name": "check-hue-is-not-position",
      "file": "scripts/check-hue-is-not-position.ts",
      "headline": "check-hue-is-not-position — a colour picked by an index says nothing",
      "exitStatus": 0
    },
    {
      "name": "check-imprint-matches-page",
      "file": "scripts/check-imprint-matches-page.ts",
      "headline": "check-imprint-matches-page — the signed receipt must attest what we serve",
      "exitStatus": 0
    },
    {
      "name": "check-instrument-facts",
      "file": "scripts/check-instrument-facts.ts",
      "headline": "check-instrument-facts — the hand-keyed display maps must match the live pool",
      "exitStatus": 0
    },
    {
      "name": "check-journey-funnel-instrumented",
      "file": "scripts/check-journey-funnel-instrumented.ts",
      "headline": "CHECK — the customer journey is measurable end to end",
      "exitStatus": 0
    },
    {
      "name": "check-jsonld-static",
      "file": "scripts/check-jsonld-static.mjs",
      "headline": "The existing scripts/validate-jsonld.mjs only works against a running puppeteer",
      "exitStatus": 0
    },
    {
      "name": "check-leader-robustness",
      "file": "scripts/check-leader-robustness.ts",
      "headline": "HOW MUCH WOULD IT TAKE TO CHANGE OUR MIND?",
      "exitStatus": 0
    },
    {
      "name": "check-licence-claims",
      "file": "scripts/check-licence-claims.ts",
      "headline": "check-licence-claims — the site may not assert a licence its own note denies",
      "exitStatus": 0
    },
    {
      "name": "check-light-routes-stay-light",
      "file": "scripts/check-light-routes-stay-light.mjs",
      "headline": "THE HOMEPAGE MUST NOT REACH THE CATALOG — checked at the SOURCE, at 0 ms",
      "exitStatus": 0
    },
    {
      "name": "check-market-coverage",
      "file": "scripts/check-market-coverage.ts",
      "headline": "check-market-coverage - every live category has a defensible comparison set",
      "exitStatus": 0
    },
    {
      "name": "check-master-audit",
      "file": "scripts/check-master-audit.mjs",
      "headline": "Master Audit scorecard + integrity gate.",
      "exitStatus": 0
    },
    {
      "name": "check-methodology-consistency",
      "file": "scripts/check-methodology-consistency.ts",
      "headline": "check-methodology-consistency — the single-source-of-truth ratchet",
      "exitStatus": 0
    },
    {
      "name": "check-methodology-subroutes-resolve",
      "file": "scripts/check-methodology-subroutes-resolve.ts",
      "headline": "EVERY /methodology/<sub> THE SITE LINKS TO IS A ROUTE THE PARSER KNOWS",
      "exitStatus": 0
    },
    {
      "name": "check-methodology-version-published",
      "file": "scripts/check-methodology-version-published.ts",
      "headline": "check-methodology-version-published — never advertise a version nobody can read",
      "exitStatus": 0
    },
    {
      "name": "check-mica-verification-age",
      "file": "scripts/check-mica-verification-age.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-migrations",
      "file": "scripts/check-migrations.mjs",
      "headline": "check-migrations — CI guardrail for SQL migration hygiene",
      "exitStatus": 0
    },
    {
      "name": "check-nav-rail-is-researched",
      "file": "scripts/check-nav-rail-is-researched.ts",
      "headline": "check-nav-rail-is-researched — a pill must survive its own click",
      "exitStatus": 0
    },
    {
      "name": "check-next-best-action",
      "file": "scripts/check-next-best-action.ts",
      "headline": "CHECK — the journey always has exactly one next step, and it is reachable",
      "exitStatus": 0
    },
    {
      "name": "check-no-raw-identifiers",
      "file": "scripts/check-no-raw-identifiers.mjs",
      "headline": "check-no-raw-identifiers — an identifier is never a thing a reader should see",
      "exitStatus": 0
    },
    {
      "name": "check-observations-append-only",
      "file": "scripts/check-observations-append-only.ts",
      "headline": "AN OBSERVATION, ONCE RECORDED, IS NEVER EDITED",
      "exitStatus": 0
    },
    {
      "name": "check-one-measurement-basis",
      "file": "scripts/check-one-measurement-basis.ts",
      "headline": "check-one-measurement-basis — one column, one way of measuring",
      "exitStatus": 0
    },
    {
      "name": "check-one-ranking-engine",
      "file": "scripts/check-one-ranking-engine.ts",
      "headline": "ONE RANKING ENGINE, AND NO FORK OF IT",
      "exitStatus": 0
    },
    {
      "name": "check-order-reconstructs",
      "file": "scripts/check-order-reconstructs.ts",
      "headline": "check-order-reconstructs — the one claim CHECK24 cannot make",
      "exitStatus": 0
    },
    {
      "name": "check-outbound-through-action",
      "file": "scripts/check-outbound-through-action.ts",
      "headline": "check-outbound-through-action — every Visit is <OutboundAction>, and the rest only shrink",
      "exitStatus": 0
    },
    {
      "name": "check-pairwise-is-published",
      "file": "scripts/check-pairwise-is-published.ts",
      "headline": "WHY IT LEADS IS THE PUBLISHED ARITHMETIC — NOWHERE A SECOND MODEL (§26–§27)",
      "exitStatus": 0
    },
    {
      "name": "check-platform-design",
      "file": "scripts/check-platform-design.mjs",
      "headline": "Platform design QA: keeps public platform pages aligned to the landing system.",
      "exitStatus": null
    },
    {
      "name": "check-pool-matches-research",
      "file": "scripts/check-pool-matches-research.ts",
      "headline": "check-pool-matches-research — what ships must be what was verified",
      "exitStatus": 0
    },
    {
      "name": "check-portal-css-tokens",
      "file": "scripts/check-portal-css-tokens.mjs",
      "headline": "check-portal-css-tokens — the CSS side of the palette mirrors portalTokens.ts",
      "exitStatus": 0
    },
    {
      "name": "check-portal-glyphs",
      "file": "scripts/check-portal-glyphs.mjs",
      "headline": "THE PORTAL DRAWS ITS OWN ICONS, ONCE — §24 of the design prompt, as a gate",
      "exitStatus": 0
    },
    {
      "name": "check-portal-tokens-single-source",
      "file": "scripts/check-portal-tokens-single-source.mjs",
      "headline": "check-portal-tokens-single-source — the portal palette is defined ONCE (§28)",
      "exitStatus": 0
    },
    {
      "name": "check-prerender-covers-families",
      "file": "scripts/check-prerender-covers-families.mjs",
      "headline": "check-prerender-covers-families — measure what a crawler is actually served",
      "exitStatus": 0
    },
    {
      "name": "check-promise-is-prose",
      "file": "scripts/check-promise-is-prose.ts",
      "headline": "check-promise-is-prose — a category's one-line promise must read as a sentence",
      "exitStatus": 0
    },
    {
      "name": "check-promise-methodology-alignment",
      "file": "scripts/check-promise-methodology-alignment.ts",
      "headline": "check-promise-methodology-alignment — the cloned-prose ratchet",
      "exitStatus": 0
    },
    {
      "name": "check-provider-claims",
      "file": "scripts/check-provider-claims.ts",
      "headline": "check-provider-claims — a headline field never speaks in the provider's voice",
      "exitStatus": 0
    },
    {
      "name": "check-provider-marks-have-a-licence",
      "file": "scripts/check-provider-marks-have-a-licence.ts",
      "headline": "A MARK MAY NOT RENDER WITHOUT ITS LICENCE ON RECORD",
      "exitStatus": 0
    },
    {
      "name": "check-published-order-is-deliberate",
      "file": "scripts/check-published-order-is-deliberate.ts",
      "headline": "A PUBLISHED ORDER MAY ONLY MOVE ON PURPOSE",
      "exitStatus": 0
    },
    {
      "name": "check-published-ranking-verifies",
      "file": "scripts/check-published-ranking-verifies.ts",
      "headline": "check-published-ranking-verifies — the shipped file must check out",
      "exitStatus": 0
    },
    {
      "name": "check-question-signals-are-read",
      "file": "scripts/check-question-signals-are-read.ts",
      "headline": "check-question-signals-are-read — an answer the engine never reads is labelled",
      "exitStatus": 0
    },
    {
      "name": "check-quiz-congruence",
      "file": "scripts/check-quiz-congruence.ts",
      "headline": "check-quiz-congruence — a quiz must interrogate ITS OWN category",
      "exitStatus": 0
    },
    {
      "name": "check-quiz-drives-recommendation",
      "file": "scripts/check-quiz-drives-recommendation.ts",
      "headline": "check-quiz-drives-recommendation — the on-page quiz must actually personalise",
      "exitStatus": 0
    },
    {
      "name": "check-quiz-questions-reachable",
      "file": "scripts/check-quiz-questions-reachable.ts",
      "headline": "check-quiz-questions-reachable — a question gated on an id nobody can answer",
      "exitStatus": 0
    },
    {
      "name": "check-ranked-nowhere-claims",
      "file": "scripts/check-ranked-nowhere-claims.ts",
      "headline": "check-ranked-nowhere-claims — \"ranked nowhere\" has to actually be true",
      "exitStatus": 0
    },
    {
      "name": "check-ranking-ignores-dynamic-weights",
      "file": "scripts/check-ranking-ignores-dynamic-weights.ts",
      "headline": "check-ranking-ignores-dynamic-weights — an answer may filter, re-weight",
      "exitStatus": 0
    },
    {
      "name": "check-ranking-path-blind",
      "file": "scripts/check-ranking-path-blind.ts",
      "headline": "check-ranking-path-blind — the whole ranking PATH, not a hand-listed file set",
      "exitStatus": 0
    },
    {
      "name": "check-rate-appears-in-quote",
      "file": "scripts/check-rate-appears-in-quote.ts",
      "headline": "check-rate-appears-in-quote — a computable rate must be findable in its source",
      "exitStatus": 0
    },
    {
      "name": "check-rating-measures-something",
      "file": "scripts/check-rating-measures-something.ts",
      "headline": "check-rating-measures-something — a published rating must not be the ranking",
      "exitStatus": 0
    },
    {
      "name": "check-ratings-have-sample",
      "file": "scripts/check-ratings-have-sample.ts",
      "headline": "check-ratings-have-sample — no outcome rate is served below the published floor",
      "exitStatus": 0
    },
    {
      "name": "check-readiness-freshness",
      "file": "scripts/check-readiness-freshness.mjs",
      "headline": "Readiness-index staleness ratchet (P6).",
      "exitStatus": 0
    },
    {
      "name": "check-receipt-abbrevs",
      "file": "scripts/check-receipt-abbrevs.ts",
      "headline": "check-receipt-abbrevs — every advertised receipt URL must resolve on arrival",
      "exitStatus": 0
    },
    {
      "name": "check-receipt-id-is-content-hash",
      "file": "scripts/check-receipt-id-is-content-hash.ts",
      "headline": "check-receipt-id-is-content-hash — a receipt names the content it certifies",
      "exitStatus": 0
    },
    {
      "name": "check-recommendation-semantics",
      "file": "scripts/check-recommendation-semantics.ts",
      "headline": "RECOMMENDATION SEMANTICS — NO LABEL MAY CLAIM AN AUTHORITY IT DOES NOT HAVE",
      "exitStatus": 0
    },
    {
      "name": "check-reduced-motion-reaches",
      "file": "scripts/check-reduced-motion-reaches.mjs",
      "headline": "check-reduced-motion-reaches — prove the backstop reaches inline animations",
      "exitStatus": 0
    },
    {
      "name": "check-region-reachability",
      "file": "scripts/check-region-reachability.ts",
      "headline": "check-region-reachability — a region we offer must lead somewhere",
      "exitStatus": 0
    },
    {
      "name": "check-region-tags-match-notes",
      "file": "scripts/check-region-tags-match-notes.ts",
      "headline": "check-region-tags-match-notes — a product may not say two different things",
      "exitStatus": 0
    },
    {
      "name": "check-register-partition",
      "file": "scripts/check-register-partition.mjs",
      "headline": "check-register-partition (P7) — the two-register design partition",
      "exitStatus": 0
    },
    {
      "name": "check-related-categories",
      "file": "scripts/check-related-categories.ts",
      "headline": "EVERY MARKET HAS NEIGHBOURS, AND THE CONFUSABLE ONES ARE NAMED",
      "exitStatus": 0
    },
    {
      "name": "check-rendered-counts-computed",
      "file": "scripts/check-rendered-counts-computed.mjs",
      "headline": "check-rendered-counts-computed — a catalog size a VISITOR reads must be computed",
      "exitStatus": 0
    },
    {
      "name": "check-rendered-harness",
      "file": "scripts/check-rendered-harness.mjs",
      "headline": "check-rendered-harness — the rendered clauses, run where the build runs them",
      "exitStatus": null
    },
    {
      "name": "check-review-cadence-is-kept",
      "file": "scripts/check-review-cadence-is-kept.ts",
      "headline": "THE SITE PUBLISHES HOW OFTEN IT RE-READS. THIS ASKS WHETHER IT DID.",
      "exitStatus": 0
    },
    {
      "name": "check-review-calendar-matches",
      "file": "scripts/check-review-calendar-matches.ts",
      "headline": "check-review-calendar-matches — when is each category's re-read due, and is",
      "exitStatus": 0
    },
    {
      "name": "check-roster-is-real",
      "file": "scripts/check-roster-is-real.ts",
      "headline": "check-roster-is-real — a roster names people who exist and scripts you can read",
      "exitStatus": 0
    },
    {
      "name": "check-routes-and-heads",
      "file": "scripts/check-routes-and-heads.ts",
      "headline": "check-routes-and-heads — every address lands on its real view, under its own",
      "exitStatus": 0
    },
    {
      "name": "check-routes",
      "file": "scripts/check-routes.mjs",
      "headline": "check-routes — silent-sitemap-collapse guard, in CI",
      "exitStatus": 0
    },
    {
      "name": "check-rule-answers-live",
      "file": "scripts/check-rule-answers-live.ts",
      "headline": "check-rule-answers-live — a rule keyed to a deleted answer is a dead rule",
      "exitStatus": 0
    },
    {
      "name": "check-score-transform-is-continuous",
      "file": "scripts/check-score-transform-is-continuous.ts",
      "headline": "CHECK — the display transform has no cliff",
      "exitStatus": 0
    },
    {
      "name": "check-search-aliases-resolve",
      "file": "scripts/check-search-aliases-resolve.ts",
      "headline": "EVERY ALIAS MUST NAME SOMETHING THAT EXISTS — AND NOTHING THAT ALREADY DOES",
      "exitStatus": 0
    },
    {
      "name": "check-search-scenario-parses",
      "file": "scripts/check-search-scenario-parses.ts",
      "headline": "CHECK — the search reads a setup, and reads only what is there",
      "exitStatus": 0
    },
    {
      "name": "check-self-description-matches-engine",
      "file": "scripts/check-self-description-matches-engine.ts",
      "headline": "check-self-description-matches-engine — every /vs page states one weight",
      "exitStatus": 0
    },
    {
      "name": "check-seo-metadata-complete",
      "file": "scripts/check-seo-metadata-complete.ts",
      "headline": "check-seo-metadata-complete — a prerendered page without metadata is invisible",
      "exitStatus": 0
    },
    {
      "name": "check-shell-overflow",
      "file": "scripts/check-shell-overflow.mjs",
      "headline": "check-shell-overflow — no shell ancestor may create a scroll container",
      "exitStatus": 0
    },
    {
      "name": "check-silent-catch",
      "file": "scripts/check-silent-catch.mjs",
      "headline": "check-silent-catch — ratchet against silent failure swallowing (A3)",
      "exitStatus": 0
    },
    {
      "name": "check-single-contact-address",
      "file": "scripts/check-single-contact-address.ts",
      "headline": "check-single-contact-address — a reader's report goes to the one address we read",
      "exitStatus": 0
    },
    {
      "name": "check-source-date-coverage",
      "file": "scripts/check-source-date-coverage.ts",
      "headline": "Every scored provenance block in the assembled runtime catalog must be dated.",
      "exitStatus": 0
    },
    {
      "name": "check-source-registry-reaches",
      "file": "scripts/check-source-registry-reaches.ts",
      "headline": "check-source-registry-reaches — a curated citation nobody can reach",
      "exitStatus": 0
    },
    {
      "name": "check-status-claims-are-measured",
      "file": "scripts/check-status-claims-are-measured.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-structured-pricing-ratchet",
      "file": "scripts/check-structured-pricing-ratchet.ts",
      "headline": "check-structured-pricing-ratchet — verified rates may be corrected, not lost",
      "exitStatus": 0
    },
    {
      "name": "check-tax-tool-scores-match-ranking",
      "file": "scripts/check-tax-tool-scores-match-ranking.ts",
      "headline": "",
      "exitStatus": 0
    },
    {
      "name": "check-taxonomy-coverage",
      "file": "scripts/check-taxonomy-coverage.ts",
      "headline": "check-taxonomy-coverage — the shared category taxonomy is the single source",
      "exitStatus": 0
    },
    {
      "name": "check-tie-note-is-true",
      "file": "scripts/check-tie-note-is-true.ts",
      "headline": "check-tie-note-is-true — a tie note may only say what the two rows show",
      "exitStatus": 0
    },
    {
      "name": "check-tie-order-vs-criteria",
      "file": "scripts/check-tie-order-vs-criteria.ts",
      "headline": "check-tie-order-vs-criteria — every order the tie-break chain decided, disclosed",
      "exitStatus": 0
    },
    {
      "name": "check-tiebreak-reads-quality-only",
      "file": "scripts/check-tiebreak-reads-quality-only.ts",
      "headline": "CHECK — the tie-break orders on quality and price, never on availability",
      "exitStatus": 0
    },
    {
      "name": "check-tiebreaks-are-published",
      "file": "scripts/check-tiebreaks-are-published.ts",
      "headline": "A TIE MUST SAY WHAT IS SUPPOSED TO BREAK IT",
      "exitStatus": 0
    },
    {
      "name": "check-universe-reconciles",
      "file": "scripts/check-universe-reconciles.ts",
      "headline": "check-universe-reconciles — one count, everywhere, or the build fails",
      "exitStatus": 0
    },
    {
      "name": "check-view-visit-distinct",
      "file": "scripts/check-view-visit-distinct.ts",
      "headline": "check-view-visit-distinct — \"View\" stays on ChainChoice, \"Visit\" leaves it",
      "exitStatus": 0
    },
    {
      "name": "check-weight-earns-its-keep",
      "file": "scripts/check-weight-earns-its-keep.ts",
      "headline": "CHECK — a dimension that carries weight must order something",
      "exitStatus": 0
    },
    {
      "name": "check-wizard-answers-move-ranking",
      "file": "scripts/check-wizard-answers-move-ranking.ts",
      "headline": "check-wizard-answers-move-ranking — the questionnaire must change the answer",
      "exitStatus": 0
    },
    {
      "name": "check-wizard-country-excludes",
      "file": "scripts/check-wizard-country-excludes.ts",
      "headline": "check-wizard-country-excludes — the country answer must remove providers",
      "exitStatus": 0
    },
    {
      "name": "check-zero-is-not-a-total",
      "file": "scripts/check-zero-is-not-a-total.ts",
      "headline": "A ZERO COMPONENT IS NOT A ZERO TOTAL",
      "exitStatus": 0
    },
    {
      "name": "check-zero-synthetic",
      "file": "scripts/check-zero-synthetic.mjs",
      "headline": "Sprint 174.4. Enforces the zero-synthetic principle in CI:",
      "exitStatus": 0
    }
  ]
}
