What happens
project-bin/page-fidelity.js scores headings, actions and content blocks with one test (~l.412):
const hit = txt => { const w = words(txt); return w.length ? w.filter(x => corpus.includes(x)).length / w.length >= 0.6 : true; };
Here corpus is the entire normalised page MDL: page name, entity and attribute names, microflow names, captions and comments. words() keeps only words longer than 3 characters. includes is a substring test. So:
- A wireframe H2 "Case overview" is "present" on any page named
Case_Overview, whether or not the page renders that heading.
- A one-word heading, after the >3-char filter, is present if the word occurs anywhere, even inside an identifier (
case ⊂ CustomerCase).
- 60% of the words is enough, so a three-word heading needs only two of them anywhere.
The dimension can therefore read green for a heading, button or block the page does not show.
Evidence (card-disbursement requirements-driven build, 2026-09-25)
The style-gallery page scored 80% with this in play. A wireframe H2 counted as present because page text shared its words. The project's rule since: read the miss list and the LOOK, never the percentage alone.
Suggested fix
- Match headings against caption strings only:
Caption:/Content: literals of dynamictext/statictext and title widgets, plus the page Title:. Match actions against button captions.
- Match on whole words, not substrings.
- For short labels (fewer than 3 kept words) require all words.
- Keep the substring corpus only for
bindings, where identifiers are the point.
Filed rather than fixed because it changes every existing project's scores. It needs golden page MDL plus a wireframe pair captured from a real project to show the before/after.
Files
project-bin/page-fidelity.js: norm/words (~l.220), score()
Related: the class-dimension gaps of the same scorer are filed separately (#157).
What happens
project-bin/page-fidelity.jsscores headings, actions and content blocks with one test (~l.412):Here
corpusis the entire normalised page MDL: page name, entity and attribute names, microflow names, captions and comments.words()keeps only words longer than 3 characters.includesis a substring test. So:Case_Overview, whether or not the page renders that heading.case⊂CustomerCase).The dimension can therefore read green for a heading, button or block the page does not show.
Evidence (card-disbursement requirements-driven build, 2026-09-25)
The style-gallery page scored 80% with this in play. A wireframe H2 counted as present because page text shared its words. The project's rule since: read the miss list and the LOOK, never the percentage alone.
Suggested fix
Caption:/Content:literals ofdynamictext/statictextand title widgets, plus the pageTitle:. Match actions against button captions.bindings, where identifiers are the point.Filed rather than fixed because it changes every existing project's scores. It needs golden page MDL plus a wireframe pair captured from a real project to show the before/after.
Files
project-bin/page-fidelity.js:norm/words(~l.220),score()Related: the class-dimension gaps of the same scorer are filed separately (#157).