Skip to content

Studio block designer publishes three page-component inputs no renderer reads (objectui, found by #4001 batch A) #7973

Description

@os-zhuang

Filed from #4001 batch A (ui/component.zod.ts strictness conversion) under AGENTS.md Prime Directive #10 — out of that PR's scope, and the fix lives in the sibling repo objectstack-ai/objectui.

Batch A enumerated every registered component type by the renderer's read pattern (the #6276 lesson) before closing the props shapes. That sweep found five renderer-honoured keys the spec had not declared — those are declared in the batch-A PR. It also found the divergence pointing the other way: inputs objectui's Studio block designer publishes that nothing on the render path reads. An author who configures a block in Studio, saves, and then looks at the page gets no effect and no diagnostic — the ADR-0078 shape, on the producer side.

Measured against objectstack-ai/objectui@d8d0d66, in packages/app-shell/src/views/metadata-admin/previews/block-config.ts:

Designer input Read path Verdict
page:accordion → title PageAccordionRenderer (renderers/layout/containers.tsx) reads items, allowMultiple, variant — no title dead input
page:accordion → items[].value the renderer overwrites it: items.map((it, idx) => ({ ...it, value: \panel-${idx}` })) (containers.tsx:793`), so an authored value never reaches the Radix item dead input
page:header → icon retired from the spec at @objectstack/spec 17.0.0 (#6946, ADR-0087 D2) — no renderer ever read it designer has not caught up with the retirement

Two notes that matter for whoever picks this up:

  1. The accordion value case is not symmetric with page:tabs. One component over, an authored items[].value is read (containers.tsx:566, with a tab-<idx> fallback), which is why the spec declares it there and showcase 的 project-detail 页在 page:tabs 上授权 items[].key,renderer 读的是 items[].value —— 两个 tab 的稳定 URL token 从未生效 #5776 exists for the key → value rewrite. The accordion's is genuinely derived. Batch A therefore declined to declare it and shipped a guidance prescription instead, so an author who copies the designer's output is told what happened rather than merely refused.
  2. page:header.icon will now be refused, not dropped. Batch A closed these shapes, so a designer-authored icon raises the [spec] Retire three zero-reader UI keys per maintainer ruling: PageHeaderProps.icon, PageCardProps.actions, RecordDetailsProps.layout (objectui#3829 / objectui#3818) #6946 tombstone (with its os migrate meta --from 16 prescription) at the authoring gate instead of being stripped in silence. The gate is warning-level, so nothing breaks today — but the designer is publishing an input whose value the platform tells the author to delete.

Suggested fix, objectui side: drop the three inputs from block-config.ts (page:accordion.title, page:accordion.items[].value, page:header.icon). If any of them is wanted as a real capability, that is the other direction and needs a renderer read point first — declared-but-unread is the thing to avoid in either repo.

Reproduce the sweep: for each type in ComponentPropsMap, grep objectui for properties?.<key> / hoisted schema?.<key> reads and diff against the declared shape. It is cheap and it is what turned both directions up.

Activity

  1. added theissue type on Aug 12, 2026
  2. hotlong commented on Aug 12, 2026

    @hotlong
    Contributor

    Triage: pm:queue for the repo:objectui seat, type Bug. One label correction: removed domain:spec — the fix lands wholly in objectui (packages/app-shell/src/views/metadata-admin/previews/block-config.ts: drop the three dead designer inputs), and domain:* labels route objectstack lanes only; per the card body, the spec-side halves (declaring the five renderer-honoured keys, closing the shapes, the accordion guidance prescription) already shipped with #4001 batch A, so nothing objectstack-side remains here. Seam-card shape (repo:objectui, filed at the finder's repo with the cross-repo evidence) is the established pattern (#7494 / #7366 / #7345).

    Dispatch note for the objectui seat: the suggested fix is subtractive (three input removals); if any of the three is instead wanted as a real capability, that reverses into a renderer-first feature and should come back through the decision channel — the card says this itself.

    本评论来自分诊座位(scheduled session session_0199Rq2oEnNNRmdhmWwqUwvQ),不构成认领。


    Generated by Claude Code

  3. os-support-ai commented on Aug 18, 2026

    @os-support-ai
    Collaborator

    Moved to objectstack-ai/objectui#5212 — closing as moved, not resolved. Unfixed.

    Provenance: whose instruction — the maintainer's; verbatim — 「转」; where — said directly to the repo:objectui PM seat in session session_01RV6yuVCxymHYE16PL9vQkE, 2026-08-18, under the standing direct-dispatch authorisation.

    Why: file-at-destination, and this card said so itself — "the fix lives in the sibling repo objectstack-ai/objectui", with a suggested fix naming only objectui files. It was filed here because the batch-A sweep that found it ran here.

    Already dispatched on the destination card, at sonnet with a premise check first: the d8d0d66 baseline and the containers.tsx line numbers are six days old and will have moved, so all three verdicts get re-derived before anything is deleted. The page:tabs warning — that an authored items[].value is live one component over — carried across verbatim and is called out as the one way to get this wrong.

    The 1 comment here was not copied and stays readable. Anyone tracking this: follow objectstack-ai/objectui#5212.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions