Measured, not asserted
Both gates at zero, drift clean at 41 blocks, no overflow at 390, zero console errors. And every one of those numbers is older than the build it passed.
who worked on it
the chain · what each hand read, decided and wrote
site/01_RESEARCH/REFERENCES.md11 sep 17:47Against dralainshab.com, both measured by the same ruler.
Worst contrast 1.28 to 6.99. Tap targets under 44px, 40 to 0. Drift 9 of 40 to 0 of 30. First paint 1796ms to 236ms. Weight 415 to 281 KB. DOM 1177 to 367.site/06_AUDIT/GATE.md12 sep 08:46Reading every heading out loud.
surface.py cannot hear None of this depends on trusting his own website. Reading every heading out loud can.site/06_AUDIT/GATE.md12 sep 08:46A 2500px blank hole in the live page, passed at 14 wins, 1 tie, 0 losses.
A scoreboard measured the page and never looked at it.site/06_AUDIT/GATE.md12 sep 08:46The drift test read 19 of 40 because it counted four hidden conditions whose rects are all zero.
Filtered to visible blocks: 0 of 22. A test that does not know what is on screen measures its own assumptions.site/06_AUDIT/PROGRESSION_AUDIT.md12 sep 16:20site/06_AUDIT/read_02_slow_reader.md12 sep 15:46Slow reader's prostate card: 5 understood, 3 twice, 8 NOT understood, became 10, 4, 0.
He quit at 25 percent before and read it all after, and his answer went no to yes, on one sentence: nothing is cut, and nothing goes up the tube you pee through.site/06_AUDIT/retest_slow_reader.md12 sep 16:13site/06_AUDIT/read_01_arabic_first.md12 sep 15:4615 walls to 12. Eight unopened medical words to ZERO.
And the page never talks down to me survived, which she named as the thing to protect.site/06_AUDIT/retest_arabic_first.md12 sep 16:14I wrote the comment the phone gets a jump link now, and my own media query hid it below 430px on a 390px phone.
A comment claiming a fix is not a fix.site/06_AUDIT/PROGRESSION_AUDIT.md12 sep 16:20site/04_BUILD/index.src.html13 sep 02:23changed sincecopygate 7 to 0. surface.py 1 to 0. Drift clean at 41 blocks. No overflow at 390. Zero console errors.
Zero console errors ONCE SERVED OVER HTTP instead of file://. Over file:// the errors are the protocol, not the page.site/06_AUDIT/AUDIT_v9.md13 sep 01:54site/00_BRIEF/design-model.yaml13 sep 01:57changed sincedesign-model.yaml says the display serif appears EXACTLY ONCE.
A session changed it with a reasoned note in tokens.css, and never read four lines up its own source of truth, where collision_guard.forbidden lists instrument serif display and serif over sans pairing. Checked, not assumed: Shab's live site loads both.site/06_AUDIT/AUDIT_v9.md13 sep 01:54Now 2 elements, his Arabic sentence and its translation. Backup one line away.
Changing the display face of his site on an audit's own authority is not the audit's call.site/04_BUILD/tokens.css13 sep 02:10room-3 broken was a lazy-load race. The credential card at 2.59 contrast was a DOM walk reading an ancestor's background through a translucent card.
Measured off real painted pixels it is 7.61:1. Third time. MEASURE THE PAINTED RESULT, NEVER THE MODEL OF IT.site/00_BRIEF/design-model.yaml13 sep 01:57changed sinceFour of them at 10.5px, against a smallest_readable of 15.
This project condemned the OLD site for 29 nodes under 16px. The rebuild is barely better. Nodes under 12px later down from 4 to 1.site/06_AUDIT/AUDIT_v9.md13 sep 01:54Eight deliberately bad sentences still produce 17 hard fails.
So nothing got softer. The one remaining fail was the page's fault, not the gate's.Port 8799 served a different project's page under Yammine's URL.
I read its title before trusting it. VERIFY THE SERVED TITLE, ALWAYS.site/06_AUDIT/UIUX_AUDIT.md12 sep 15:37A whole pass grepping kit versus local classes concluded the local clones complaint was addressed.
It was, and the cards were still broken, because the fault was never the class names.Refused. A second tool that is not ours confirms.
site/04_BUILD/tokens.css13 sep 02:10changed sincesite/04_BUILD/index.src.html13 sep 02:23changed sinceEvery number here is against a page that has since changed twice.
It has to be re-run whole after phase 5.site/06_AUDIT/AUDIT_v9.md13 sep 01:54rendered out of
site/06_AUDIT/AUDIT_v9.mdboth gates 0, drift 41/41 · 13 sep 01:54site/06_AUDIT/UIUX_AUDIT.mdthe live door against apple-design and the kit · 12 sep 15:37site/06_AUDIT/PROGRESSION_AUDIT.md390 / 768 / 1440 per section · 12 sep 16:20site/06_AUDIT/GATE.mdgate 6, the 2500px hole · 12 sep 08:46your call
Split the readable floor at 15 for reading text and 12 for labels, or hold a flat 15?
The model says 15 everywhere. Applied literally a kicker stops being a kicker. 28 nodes measure under 15px at 390, and this project condemned his old site for 29 nodes under 16px. Two of the eight reader tests are an elderly man and a slow reader.
why that one: Split, with the label classes named explicitly in design-model.yaml so the exemption cannot spread past them.
Choose it on the canvas, where the pick is written and survives a clear.
Re-run the whole audit now, against the current build?
Everything in AUDIT_v9 was measured before tokens.css and index.src.html changed. The numbers on the canvas card are true about a page that no longer exists.
why that one: It is cheap, it is mechanical, and leaving a stale pass on the record is exactly the failure this project keeps repeating.
Choose it on the canvas, where the pick is written and survives a clear.
os/kit/study.py, 13 sep 2026 10:43. A file marked changed since was modified after the hand that read it wrote its output: that is arithmetic off the real timestamps on disk, not a judgement.