Skip to content

page-fidelity.js heading/action/content match is a substring test over the whole page MDL, so a wireframe heading counts as present without being a heading #158

Description

@MendixMau

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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions