Uh oh!
There was an error while loading. Please reload this page.
docs(objectui): stop teaching phantom section-level performance keys in the Layout DSL - #8301
Conversation
…in the Layout DSL The 'Performance Considerations' section documented section-level virtualScroll / itemHeight / lazy / source and a layout.renderStrategy block. None of these exist on any schema: ui/FormSection declares exactly ten authorable keys, and itemHeight / renderStrategy / lazy appear zero times across the whole generated authorable surface. FormSectionSchema is .strict(), so an author following the page got a parse rejection. Replaced with a Performance section that states the absence and points at the one real, consumed switch (ListViewSchema.virtualScroll), matching the convention widget-contract.mdx already uses for this defect class. Refs #8251
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
…view-level retirement PR #8252 landed while this branch was open, retiring the pass-through-only list-view virtualScroll under ADR-0049. The replacement section pointed at that key as the real switch; it is no longer authorable (zero entries across the whole authorable surface). Re-pointed at the view's pagination block, matching the wording widget-contract.mdx now carries. Refs #8251
os-zhuang
commented
Aug 13, 2026
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#8251
What the page taught
content/docs/protocol/objectui/layout-dsl.mdxcarried a "Performance Considerations" section documenting section-levelvirtualScroll,itemHeight,lazyandsource, plus alayout.renderStrategy: progressiveblock. An author following it wrote metadata that is rejected at parse.Measurement
The instrument was shown to see real keys before any zero was trusted.
Generated authorable-surface anchor (
packages/spec/authorable-surface.base.json):ui/FormSectiondeclares exactly ten authorable keys —collapsed,collapsible,columns,description,fields,label,name,pane,visibleOn,visibleWhen. None of the documented keys is among them.itemHeight0 entries,renderStrategy0,lazy0. Positive control, same command shape:sourcereturns 20 entries andbadgeVariant8 — the instrument plainly sees keys.virtualScrollexists exactly twice, both on list views (ui/ListView,ui/ObjectListView) — a different surface from a form section.Empirical parse against the built spec (
FormSectionSchema.safeParse):lazy+sourceunrecognized_keys [lazy, source]virtualScroll+itemHeightunrecognized_keys [virtualScroll, itemHeight]unrecognized_keyseachFormSectionSchemais built withstrictObject=z.object(...).strict(), so the issue's hedge ("parse-strips or rejects, depending on the shape") resolves to rejects for this family.The fix
Removed the three phantom subsections. In their place, a
## Performancesection that states the absence and points at the one real, consumed switch — the booleanvirtualScrollon a list-shaped view. This mirrors the conventionwidget-contract.mdxalready uses for this exact defect class ("There is no performance block anywhere in this contract … That is the only virtual-scrolling switch objectui reads"), and satisfies "absence must be loud" rather than leaving a silent hole that invites the fiction back.Verified before pointing at it —
ListViewSchema.virtualScrollis authorable and really read by objectui:spec-bridge/bridges/list-view.ts:155,plugin-view/src/ObjectView.tsx:1053,app-shell/src/views/ObjectView.tsx:1745,plugin-list/src/ListView.tsx:1793.Not done, deliberately
domain:speccontract change with its own lane.DetailSectionvirtualScrollprop is NOT documented here. It is real (plugin-detail/src/DetailSection.tsx:90and:123) but no caller supplies it — notSectionGroup.tsx:55, nor any of the fourDetailView.tsxcall sites. Documenting an unsupplied prop would advertise a capability the runtime does not deliver.Gates
check:nul-bytes,check:docs-audit-scope,check:quick-reference-counts,check:role-word,check:doc-formula-expressions— all green locally. Re-derived withscripts/pm/dispatch-gates.mjsagainst the actual changed path: no delta from the dispatch list.Docs-only ⇒
skip-changeset, no changeset.Generated by Claude Code