# Twelve checks

Six run in four seconds. Six take an afternoon and need a person.

| Check | Fails when | Who |
| --- | --- | --- |
| Outcome is observable | It says "understand" or "be aware of" | Person |
| Title is a moment | You could not overhear it in a break room | Person |
| Entry criteria are honest | Written so nobody would ever skip | Person |
| Time was measured | No stopwatch was involved | Person |
| Every step says what you should see | Any step ends without it | Person |
| Failures are real | Imagined rather than hit while doing it | Person |
| Required blocks present | Outcome, skip-if, failures, do-today or check missing | Build |
| Reading grade | Above 13.0. Warns above 11.0 | Build |
| Banned words and voice tics | Any match without an explicit allow | Build |
| Every claim sourced | A statistic with no source, or one that will not resolve | Build |
| Links alive, content fresh | Dead link. Warns past the stale window | Build |
| Brand rules | Two primary buttons, a shadow, a rounded corner, a video without a transcript | Build |

## Today's build

```
$ python check.py
BUILD  8 lessons · 3 paths · 6 tracks · 10 sources · 3 posts · 50 pages · 50 markdown twins

  ok   required blocks present on every lesson
  ok   every step carries its confirming observation
  ok   reading grade  max 6.8 on is-it-safe-to-put-this-in  (ceiling 13.0, target 11.0)
  ok   banned words and voice tics
  ok   every sourceId resolves, every source has a url and a date
  ok   every figure sits near its named source
  ok   internal links all resolve
  ok   brand rules: no shadow, no radius, one primary action, no amber CTA in a lesson, no icon fonts
  ok   no personal attribution anywhere in the output
  ok   one h1, skip link, lang, title and description on every page
  ok   markdown twin, alternate link, llms.txt, site.md, rss, sitemap, headers
  ok   no video embed ships without a transcript link
  ok   fonts self-hosted, 52.8 KB / 60 KB across 6 subset faces
  ok   no third-party requests on any page — the privacy page is true
  ok   javascript 7.5 KB / 8 KB  ·  css 16.1 KB / 18 KB  ·  largest page 14.5 KB / 30 KB
  warn /accessibility/index.html: 3 em-dashes in 346 words (budget 2)
  warn /method/index.html: 14 em-dashes in 924 words (budget 4)
  warn /method/standards/index.html: 11 em-dashes in 411 words (budget 3)
  warn /for-teachers/index.html: 5 em-dashes in 413 words (budget 3)
  warn /learn/ai/asking-for-something-and-getting-it-first-time/index.html: 6 em-dashes in 902 words (budget 4)
  warn /learn/ai/checking-the-answer-before-you-send-it/index.html: 6 em-dashes in 818 words (budget 4)
  warn /learn/ai/is-it-safe-to-put-this-in/index.html: 7 em-dashes in 1091 words (budget 4)
  warn /learn/ai/what-ai-at-work-actually-means/index.html: 10 em-dashes in 904 words (budget 4)
  warn /learn/ai/try-a-chatbot-for-the-first-time/index.html: 9 em-dashes in 923 words (budget 4)
  warn /learn/play/ask-it-something-daft/index.html: 7 em-dashes in 795 words (budget 3)
  warn /learn/digital-skills/tell-a-real-message-from-a-fake-one/index.html: 8 em-dashes in 934 words (budget 4)
  warn /learn/digital-skills/find-a-file-you-have-lost/index.html: 10 em-dashes in 902 words (budget 4)
  warn /evidence/index.html: 6 em-dashes in 1167 words (budget 4)
  warn /practice/what-ai-at-work-actually-means/index.html: 4 em-dashes in 293 words (budget 2)
  warn 8 lessons carry an empty video slot — no transcript needed until one is attached

PERSON CHECKS OUTSTANDING  (all 8 lessons)
  [ ] steps performed end to end on a real machine
  [ ] time measured with a stopwatch
  [ ] failures recorded from failures actually hit
  [ ] independent read-through for reading level

  -> every lesson carries a draft block until these are ticked

15 passed · 15 warnings · 0 failures
```

