Skip to content

docs(ui): react-pages html-tier names are verbatim, not kebab-case (#16164) - #16258

Merged
baozhoutao merged 1 commit into
mainfrom
claude/issue-16164-react-pages-verbatim-names
Sep 6, 2026
Merged

docs(ui): react-pages html-tier names are verbatim, not kebab-case (#16164)#16258
baozhoutao merged 1 commit into
mainfrom
claude/issue-16164-react-pages-verbatim-names

Conversation

@claude

@claude claude Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Fixes #16164

What the paragraph said, and what was wrong

content/docs/ui/react-pages.mdx's html-tier spelling paragraph told authors that
registered block names are "lowercase and kebab-case". Four registered names carry
an underscore after their namespace prefix, so that gloss was wrong for them and
would lead an author who read the rule (rather than the worked examples) to derive
a kebab-case respelling that is not registered.

Registry reading (objectui, read-only, this PR touches nothing there)

objectui origin/main at read time: 15789d5655753c6cf4f0e01ea9fa63f184ff68c0.

git show origin/main:packages/core/src/registry/public-blocks.ts \
  | grep -oE "^\s*'[a-z][a-z_:-]*'," | grep -oE "'[a-z][a-z_:-]*'" | sort -u

57 entries total, 28 carry a namespace prefix (record: / page: / element: /
action:), 4 are snake_case after the colon:

  • record:line_items
  • record:quick_actions
  • record:reference_rail
  • record:related_list

These numbers match the card's own reading (at a slightly earlier objectui sha,
b8e3f8379) exactly — 57 / 28 / 4, same four names, same four prefixes.

sdui-parser exact-match confirmation (this repo)

  • packages/sdui-parser/src/index.ts:41const allowedTags = new Set(Object.keys(manifest.components))
  • packages/sdui-parser/src/parse.ts:95if (this.opts.allowedTags && !this.opts.allowedTags.has(tag))

No toLowerCase/replace/normalisation touches the tag-matching path (the one
.replace(...) in parse.ts collapses whitespace in text content, unrelated to tag
names). The comparison is an exact Set.has, so <record:related-list> (kebab-case)
is rejected at save time exactly like a PascalCase borrow — confirming the doc's
"verbatim" framing and the negative example now added.

The fix

Dropped the "lowercase and kebab-case" gloss, kept the verbatim rule standing on its
own, added a second snake_case example (record:line_items) alongside the existing
record:related_list, and added one sentence making the negative concrete: a
re-spelled name that "looks uniform" is not registered — <record:related-list> is
rejected at save time, only <record:related_list> exists. No other content changed.

Gates (pinned to a955b752)

Gate list derived via node scripts/pm/dispatch-gates.mjs --commands (no path
argument — self-derived from the working-tree diff vs merge-base 0e16fc454 of
origin/main and HEAD), 38 commands matched by path or whole-tree declaration:

33/38 green:
check-ci-filter-parity, check-closing-keyword-parity (+ --self-test),
check-comment-mask-corpus, check-doc-frontmatter (+ --self-test),
check-doc-route-spelling --advisory (+ --self-test), check-docs-section-name
(+ --self-test), check-section-landing-index (+ --self-test),
check:empty-state, check:liveness, check:strictness-ledger,
check:variant-docs, check:yaml-examples, check:corpus-claim-drift,
check:cross-package-test-inputs, check:doc-anchors, check:doc-authoring,
check:docs-audit-scope, check:docs-redirects, check:docs-single-h1,
check:driver-memory-census, check:nul-bytes, check:published-readme-links,
check:react-page-adapter-contract, check:refd-timer-probe, check:role-word,
check:skill-identifier-liveness, check:vendor-version-stamps,
check:watch-hint-literal — all exit 0.

5/38 NOT MEASURED (PREREQUISITE NOT MET, not findings):
check:doc-formula-expressions and check:doc-security-posture (both print
"Nothing was measured... Fix: pnpm exec turbo run build --filter=@objectstack/formula
--filter=@objectstack/lint", exit 3), check:docs (spec docs check needs
gen:schema first, exit 1 with an explicit "generate it first" message),
check:skill-examples (needs @objectstack/spec build first, exit 1, explicit
false-green warning if skipped), check:docs-transcript-drift (needs
@objectstack/lint built — packages/lint/dist/index.js missing — explicit
"PREREQUISITE NOT MET", exit 3). All five name the exact build needed rather than
reporting a real check result. The container's shared heavy-verify lock
(scripts/pm/os-verify-lock.sh) had a holder plus a queued waiter building the
same package set (spec+lint+client-react) when this PR was opened; per this
lane's resource discipline, the scope was collapsed here rather than waited on
indefinitely, and these five are reported honestly as NOT MEASURED.

skip-changeset label applied (docs-only change under content/docs/**).

Open questions

None — no fork in this fix; the card's triage ruled pm:queue with no decision box.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8


Generated by Claude Code

The html-tier spelling paragraph in react-pages.mdx told authors that
registered block names are "lowercase and kebab-case", but four
registered names (record:line_items, record:quick_actions,
record:reference_rail, record:related_list) are snake_case after
their namespace prefix. The sdui-parser whitelist is an exact
Set.has comparison with no case folding or separator normalisation,
so a kebab-case respelling of one of those names (record:related-list)
is rejected at save time exactly like a PascalCase borrow.

Drop the "lowercase and kebab-case" gloss, let the verbatim rule
stand on its own, and add a second snake_case example
(record:line_items) plus a concrete negative example so the shape is
demonstrated rather than described.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 6, 2026
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Sep 6, 2026
@baozhoutao
baozhoutao marked this pull request as ready for review September 6, 2026 08:42
@baozhoutao
baozhoutao enabled auto-merge September 6, 2026 08:42
@baozhoutao
baozhoutao added this pull request to the merge queue Sep 6, 2026
Merged via the queue into main with commit ba4b531 Sep 6, 2026
37 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-16164-react-pages-verbatim-names branch September 6, 2026 09:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] react-pages.mdx's html-tier spelling paragraph says "lowercase and kebab-case", which is wrong for the four snake_case registered names

2 participants