fix(webkit): state Required as true/false across every spec props table - #874
Merged
Conversation
The Required column read yes/no while the Type and Default columns beside it read as literal values, so one table spelled the same boolean fact two ways. Every spec now says true/false, and the template teaches it so the next spec does not regress. Seven specs (button, card-pricing, currency, icon-button, message, status-indicator, tag) carried unescaped pipes inside their union types, which closed the cell early and rendered those rows with extra columns — and hid their Required cell from this pass. Those pipes are now escaped. Each frontmatter checksum is recomputed so enforce-spec-exists still matches the body. No component code changes.
…ippets exampleProps matched the literal 'yes', so once the spec tables said true the generator stopped seeing any prop as required and picked leading scalars instead — box-grid-selection's snippet became modelValue="undefined" instead of :items="[]". Both spellings are now accepted, so the reader is correct whichever spec files have migrated.
isaque-bock-azion
approved these changes
Aug 10, 2026
robsongajunior
approved these changes
Aug 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to @robsongajunior's review on #873: the
Requiredcolumn of a spec's Props table readyes/nowhile theTypeandDefaultcolumns beside it read as literal values, so one table spelled the same boolean fact two ways. Every spec now saystrue/false, and.specs/_template.mdteaches it (plus the escaping rule below) so the next spec does not regress.Four things fall out of the sweep:
button,card-pricing,currency,icon-button,message,status-indicator,tag. A bare|closes the cell, so those rows render with extra columns on GitHub and theirRequiredcell sat in the wrong column. The pipes are now escaped ('a' \| 'b'), which is also what made those cells reachable by the sweep.checksumis recomputed.enforce-spec-existshashes the spec body, so editing a table without re-hashing would block the next/component-createon that component.catalog.jsonis rebuilt.build-catalog.mjscopies theRequiredcell verbatim, so the column change is catalog drift until it is regenerated.src/mcp/queries.js):examplePropsmatched the literal'yes', so withtruein the tables it stopped seeing any prop as required and fell back to leading scalars —box-grid-selection's generated snippet becamemodelValue="undefined"instead of:items="[]". It now accepts both spellings, so it reads correctly whichever specs have migrated. This is the one code change here;test/mcp/queries.test.mjscaught it, which is why the same fix also rides in feat(webkit): add the Hint component, Label's hint prop, and quieter field-* helpers #873..specs/_template.mdis a shared doc, so per.claude/rules/git-workflow.mdit ships here rather than riding along with #873. #873 already carries the column change for the 8 specs it touches (hint,label,field-text,field-select,field-password,field-text-switch,field-phone-number,field-input-group), so this PR deliberately leaves those files alone — no conflict either way.No
.vue, no story, no component behavior change.scroll-area,spinnerandtab-vieware untouched: their Props tables are_none_.How to test
grep -rE '\| *(yes|no) *\|' .specs/*.md→ no hits.node -eover.specs/*.mdwithparseSpecFile+bodyChecksumfrom.claude/hooks/_lib/spec.mjs→ every frontmatterchecksummatches its body (verified: 0 mismatches across 82 specs).cd packages/webkit && node --test "test/mcp/*.test.mjs"→ 28/28.node .claude/hooks/__tests__/run.mjs→ 32/34, the same two pre-existing failures asmain(legacy-whitelist +enforce-spec-existsfixture; both fail identically on a cleanmaincheckout)..specs/button.mdon GitHub → the Props table now renders 5 columns on every row.Notes
prettier --checkonmainand.specs/is not covered by any format gate (webkit:format:checkruns insidepackages/webkit), so reformatting them would have buried this diff."required": "false"as a string, becausebuild-catalog.mjscopies the cell text. Making it a real JSON boolean would read better but changes the catalog's shape for anything consuming it, so it is left alone here.