From bc755edb39c6aa7125f7c0f896d4609a1cf2419e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 9 Sep 2026 09:41:41 +0000 Subject: [PATCH 1/4] page-fidelity: let a wireframe declare which text is bound data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The scorer already excludes , because a wireframe's table cells are sample rows and a page that correctly binds them contains none of that literal text. The same is true of a bound value anywhere else, and there the structure gives nothing away: an

holding a record's number and name looks exactly like an

holding page copy. Measured on a MOC/PSSR app replacement's project detail page: 54%, all three misses being sample values the page could not contain — the record's own title, and a mocked attachment's filename twice. The page was right, the denominator was wrong, and that number was about to be read off as a gate verdict. So the marker is declared, not guessed. An element carrying class="bound" leaves the text corpus and the class denominator. Guessing was the alternative and it does not work: a heading is bound or it is not, and only the person who drew the screen knows which. Fixture grows to 18 assertions, including that a bound heading leaves the DENOMINATOR and not merely the missed list — otherwise the score would be 1 of 2 and still look clean. Known-bad control without the marker fails 5 of 18. The same page scores 100% with it. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Jj5uvTmmcBQT8Uu3asm21M --- CHANGELOG.md | 1 + project-bin/page-fidelity.js | 23 ++++++++++++++++++- .../fixtures/page-fidelity-mocks/CAPTURE.md | 8 +++++++ .../page-fidelity-mocks/grouped-overview.html | 3 ++- tests/wave2/test-page-fidelity-mocks.sh | 12 ++++++++++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2531c34..91670da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Kinds: `new` · `fix` · `learn` (a skill/learning) · `process` (rules, templat Credit the person or project that surfaced the change — the credit line is the thank-you. ## 2026-09-09 +- new(project-bin/page-fidelity.js): **`class="bound"` — the wireframe author saying "this text is a sample of bound data".** The scorer already had this concept and applied it structurally: `` is excluded from the text corpus because a wireframe's table cells are sample ROWS and a page that correctly BINDS them contains none of that literal text. The same is true of a bound value anywhere else on the screen, and there the structure gives nothing away — an `

` holding a record's number and name looks exactly like an `

` holding page copy, and a chip holding a filename looks exactly like a chip holding a label. Measured on a MOC/PSSR app replacement's project detail page, 2026-09-09: **54%**, and all three misses were sample values the page could not contain — the record's own title, and a mocked attachment's filename, twice. The page was right; the denominator was wrong, and the number was about to be read off as a gate verdict. So the marker is **DECLARED, not guessed**: an element carrying `bound` leaves both the text corpus and the class denominator, and guessing was the alternative and does not work — a heading is bound or it is not, and only the person who drew the screen knows which. Put it on the smallest element that holds only the value (`

` leaves no heading behind; `` inside a chip leaves the chip). Fixture grows to **18 assertions** including that a bound heading leaves the DENOMINATOR rather than merely stopping being reported as missed — otherwise the score would be 1 of 2 and still look clean. Known-bad control without the marker: **5 of 18 fail**. Same page scores 100% (3/3 headings, 2/2 content) with it — Maurits Visser, from a MOC/PSSR app replacement - process(bug-logs): BUG-114 filed upstream as mendixlabs/mxcli#1076 with BUG-118 as its second reproduction; both drafts and the ledger header stamped FILED — the toolkit merge queue - fix(project-bin/page-fidelity.js): **structure classed as bound data, and the score of record silently going `null%` again.** A wireframe's own `