spec: SDUI props — enforce or remove (#5775) - #6281
Merged
Merged
Conversation
…— 4 retired, 9 declared (#5775) #5068 wired the first parse `ComponentPropsMap` ever had, and the corpus it landed on diverged in BOTH directions: keys objectui's renderers honour that the schema never declared, and keys the schema declared — one of them REQUIRED — that no renderer has ever read. Maintainer ruling (2026-08-06), direction A: the #5611 rule again, the delivered and authorized shape is the contract. The sharpest case is the record picker. It required `displayField`, which appears in no renderer; `record-picker.tsx` resolves `props.labelField ?? 'name'` and renders `row[labelField]`. An author who followed the schema and wrote `displayField: 'title'` got a dropdown listing `name`, with a success receipt and no diagnostic anywhere — ADR-0078 exactly. Retired (tombstone + ADR-0087 D2 conversion + RETIRED_KEYS_BY_MAJOR[17]): - `element:record_picker.displayField` → `labelField` (synonym rename) - `page:card.body` → `children` (one composition key, not two) - `element:record_picker.searchFields` (ADR-0049 — no search input exists) - `element:record_picker.multiple` (ADR-0049 — the control is single-select) Declared, because the renderers already honour them — no behaviour change, the schema catching up: `element:record_picker` labelField/valueField/label/ emptyText; `record:path` stages[].terminal; `page:tabs` items[].value and items[].count; `page:card` children; and `children` on page:section / page:footer / page:sidebar, which were declared `EmptyProps` ("zero props") while all three renderers render a child list. Conversions are region-level and `retiredFromLoadPath`, matching `page-header-subtitle-alias`: `PageComponentSchema` declares no children key, so a component nested inside another's `properties` is covered by the tombstone (tsc + the parse) rather than by the walk. Not in scope, deliberately: `page:card.visible` is a component-level visibility predicate written into `properties` and hoisted by the renderer — a page to rewrite onto the ADR-0089 `visibleWhen`, not a key to declare. Every A/B-table premise re-measured against objectui HEAD (7dfbeb7) before acting; all still held. Reverse-verified: restoring `displayField` as live turns `check:authorable-surface` gate (b2) red by name and fails the retirement pin. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwTBGD3gTnPKWmJLYU9R7T
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckThis PR changes 2 package(s): 112 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…hase-2 flip (#5775) `check:spec-parsed-alias` (the phase-1 gate from #6072) refuses a bare `X = z.infer<typeof XSchema>` alias that is neither paired with an `XParsed` nor pinned as isomorphic. `PageContainerProps` is a lone optional array with no default, transform, catch or pipe anywhere in its tree, so `z.input` and `z.infer` coincide and the phase-2 flip of the bare name changes nothing observable — which is the pin route, not the `XParsed` route (a permanent synonym is a name an author can only pick wrongly). `component.zod.ts` had no bare alias until now, so this adds the file's first module import to the registry. It takes the next free M-index rather than the alphabetical slot: those indices are positional identifiers the 720 pin lines reference by number. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwTBGD3gTnPKWmJLYU9R7T
This was referenced Aug 7, 2026
qq9340100
marked this pull request as ready for review
August 7, 2026 13:57
os-zhuang
pushed a commit
that referenced
this pull request
Aug 7, 2026
main 上有 8 个参考页在本分支开出后被重生成(#6243、#6280、#6281、#6333 等), 其中 `ui/bulk-action.mdx` 与 `automation/state-machine.mdx` 与本分支相交。 两棵独立重生成的树会零冲突合并却落地陈旧组合,故按 os-regen 钩子的要求从合并后的 树重新 `gen:schema && gen:docs`,并在合并结果上重跑全部验证: - 参考语料 216 页 / 8548 个单元格,check:docs 232 个生成文件 in sync - MDX 编译 216/216 - @objectstack/spec: 337 个测试文件 / 8614 个测试通过,typecheck 干净 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014wsZeReNTqiceBfLb5Pyf5
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.
Fixes #5775
SDUI props 的 enforce-or-remove 处置落地(#5775 验收面)。
Generated by Claude Code