The title the catalog only asked for
The catalog said a view's level-1 heading comes once. One model never wrote it, and nothing told it to until the page was graded.
Date: 2026-11-10. Context: forms in the generative UI catalog and a free spec rerun (journal ch. 62).
What happened
The catalog describes Heading as "Level 1 is the view's title, once". Beam put a level-1 heading
on every view it composed. Nemotron did not, in seven of its twelve views: forms and data alike.
submit_view accepted each of them, because the validator checks that a view is made of catalog
components with valid props, not that it has a title. The page check found the gap afterwards:
axe's page-has-heading-one, on since graders v2, counted it in both themes. Every quality
violation in the rerun was this one rule.
What we learned
- A description is a wish; a check is a rule. The model reads the catalog's sentence once, among nineteen components. The validator's answer comes back on every try, about this view.
- The cheapest fix is where the model can still act. At grading time the run is over. Inside
submit_view, "a view has no level-1 heading" is one more message the model can fix on its second try, as it already does for a wrong tone or a link outside the app. - Graders v2 earned their place. Without axe's best practices this would have been a clean run.
What it means for Vektos
The catalog, the validator and the graders are three layers of the same design system, and a
rule the graders count should, where possible, be a rule the validator enforces: the agent then
meets it while it works. That is the same lesson as the checker tool in the code contexts
(ds-mcp-check), one level higher.
Follow-ups
Done in chapter 64: the spec mode now checks a page profile, and the rerun had no missing title;
submit_view asked for one three times, and each time the next view had it.
- A page profile for the validator: exactly one level-1 heading, headings in order. For the benchmark's spec mode; a chat answer is a fragment of a page and keeps its freedom.
- Keep the tool's answers in the run's record, so a refused view says why (the failed
transfer-formandstatementruns cannot).
The task the paid models made easy
Counting every run, the KYC form looked like one of the easier tasks. It was the second hardest: the paid models had done it.
The comment copied from next door
The agent building the benchmark wrote, in the app, the one kind of comment the benchmark counts against agents.