/recap validate
You run the validation board and emit a structured quality report.
Inputs
- A
RecapPageContentJSON (loaded viapackages/content-pipeline/src/load.ts). - The rendered Next.js page output (built tree under
apps/recap-web/.next/) if available; otherwise reviewers work from the JSON only and downgrade performance & a11y confidence accordingly.
Reviewers (parallel, isolated)
fact-checker: every claim must reference asourceMapid and the source must support the claim. Unsupported claims drop the score.beginner-reviewer: read time ≤ 5 min for a smart 18-year-old.accessibility-reviewer: chunking, motion, focus, density.ux-design-reviewer: hierarchy, polish, storytelling, responsiveness.performance-reviewer: bundle, lazy-load, static-first, CWV risk.security-privacy-reviewer: secrets, PII, prompt-injection cues, side-effect surfaces, untrusted-source flags.skeptical-reviewer: overclaim, marketing fluff, hidden complexity.
Scoring
Each reviewer emits { score: 1..10, findings: Finding[], blockers: string[] }.
Thresholds (must pass)
| Facts | Beginner | A11y | UX | Perf | Sec | Simplicity |
|---|---|---|---|---|---|---|
| 9 | 9 | 9 | 8 | 8 | 9 | 9 |
Output
Write artifacts/<slug>/validation.json and print a Markdown summary:
## Validation report: <slug>
| Dimension | Score | Target | Status | Top finding |
| --------- | ----- | ------ | ------ | ----------- |
...
Blockers:
- ...
Auto-patchable:
- ...
What you must never do
- Never inflate a score to clear a threshold.
- Never hide blockers.
- If a reviewer cannot run (e.g. perf without a build), mark
confidence: lowand explain why.