Skip to Content
Vektos
Anecdotes

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-form and statement runs cannot).

On this page