feat: D20 moves the claims pass to cutover; rule Q56 unscoped; close Q55; freeze check:claims

Four rulings from Pouya, 2026-08-30, and their sweep.

D20 — the review protocol. Per build step the review is `adversarial-reviewer`
alone. `claims-auditor` no longer runs per step; it runs ONCE, at cutover, over
the whole finished site, as a blocking item near the top of docs/06's checklist.
`check:claims` is unchanged and still runs on every build and both deploy paths.
The reasoning is recorded in full in AGENTS.md D20, as a calibration and not an
erosion: nothing has shipped, so every claims finding so far has been about a
page no visitor can reach, and one pass over twenty finished pages catches more
than nine passes over drafts because it sees the site as a reader does. The
/med-arb/ ADRIC gloss is the proof — no individual claim was false, the defect
was adjacency, and adjacency does not exist until the pages sit next to each
other. The code reviewer stays per step because what it catches compounds.
What this costs is recorded honestly beside it, not summarised away.

D17 and D19 amended to match. D19's two-round cap governs the per-step code
review only; the single cutover claims pass runs until its findings are
resolved, because there is no second pass behind it.

Q56 — mediation is NOT scoped commercial. Thirteen shipped strings corrected
across five files: page titles, meta descriptions, hero ledes, section ledes,
the `Service` node's name and description, and `ProfessionalService`'s. §4's
mediation row stays unscoped, and the reason now sits beside both rows so the
asymmetry reads as designed: arbitration is scoped commercial because of a
LEGAL GATE (Q39 — family arbitration in Ontario requires prescribed training);
mediation has no such gate. `adversarial-reviewer` then found three surfaces
the sweep had missed, the worst on /practice/ — "These describe the process the
parties are choosing between, in commercial matters" scoped mediation with the
two words never appearing in the same element, so no proximity grep reached it.

Q55 — CLOSED WITHOUT BEING RESOLVED, and the difference is the ruling. The
Q.Arb stamp is split: `[verified]` on the status, `[Pouya's stated basis]` on
the date. The 2026-08-26 record is marked UNRECONCILED, permanently and on
purpose. The date is not published and nothing depends on it.

check:claims — FROZEN. Round 2 found five defects in round 1's own fixes to
that script, two of which made it worse than before the pattern existed. A
pattern is added only after a real breach reaches dist/, never speculatively,
and each addition ships with a probe plus a negative fixture. No refactors, no
coverage improvements. It is a tripwire, not a program.

Two conventions into CLAUDE.md: sweep the VOCABULARY, not only the subject
(`git grep 'Q.Arb'` is line-anchored and could not find ten lines entirely
about Q.Arb that never name it); and agent definitions load at session start,
so an edit to .claude/agents/*.md does not reach the session that made it.

Verified: check 0 errors, lint 0, build 0 (12 pages), check:claims 0.
Lighthouse not run — tool unavailable until build step 7.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Md3GndFqWPzK78xAoebsg5
This commit is contained in:
Pouya Lajevardi
2026-08-31 07:33:06 -04:00
co-authored by Claude Opus 5
parent 610edc24fd
commit 2ea4c0f8ac
14 changed files with 520 additions and 125 deletions
+29 -1
View File
@@ -1,6 +1,6 @@
---
name: claims-auditor
description: Audits every factual assertion in site copy against the verified claim register in AGENTS.md section 4. Invoked before any page or article is considered complete. This is the professional-conduct guard, not a proofreading pass.
description: Audits every factual assertion in site copy against the verified claim register in AGENTS.md section 4. Under D20 this runs ONCE, at cutover, over the whole finished site — not per build step. This is the professional-conduct guard, not a proofreading pass.
tools: Read, Grep, Glob
model: opus
---
@@ -13,6 +13,34 @@ The site this replaces contained a fictitious founder, invented matter values
and a testimonial attributed to a person who does not exist. Your existence is
the control that stops that recurring.
## When you run — D20, and read this before anything else
**You run ONCE, at cutover, over the whole finished site.** Not per build step.
Pouya's ruling, 2026-08-30, recorded in full in `AGENTS.md` D20.
Three consequences, and they change how you work rather than only when:
1. **You are the only claims pass this project gets.** There is no second run
behind you and no round 3 to catch what you miss. `npm run check:claims` is a
greppable tripwire, not a reader. Treat every page as final, because it is.
2. **Read the site as a visitor does, not as a diff.** The reason the pass moved
here is that the defects worth catching late are the ones that only exist once
the pages sit next to each other. The `/med-arb/` ADRIC gloss is the case:
every individual claim was true, the quote was verbatim and correctly cited,
and the defect was **adjacency** — the sentence beneath the quote answered
ADRIC's question with a different designation than ADRIC's own answer. A
per-page audit cannot see that. Follow the reading order: `/`, then the nav,
then a practice page, then `/about/`. Ask what a visitor now believes.
3. **A finding here blocks the cutover.** `docs/06`'s checklist carries it as a
blocking item: nothing publishes until your findings are resolved. So the
uncertainty-is-a-defect rule still stands, and D19's two-round cap does **not**
apply to you — it governs the per-step code review. There is no cap on
resolving what this pass finds.
If you are invoked mid-build anyway, say so in your report: you are auditing a
draft rather than the finished site, which is the exact condition D20 says makes
this pass weaker.
## Scope — D19, and it is a hard boundary
**In scope:**