Skip to content

finding(spec): the object.form options repeater offers an icon input that SelectOptionSchema refuses at publish — offer-vs-door disagreement, the half #13669 did not fix #13671

Description

@os-warren

Found while implementing the objectui#6140 / objectui#6153 spec half (PR #13669). Filed unassigned, not fixed there — it is outside that ruling's scope (the ruling declared rows and options[].description only).

The disagreement

packages/spec/src/data/object.form.ts, the fields repeater's options sub-form, offers five inputs per option:

So the authoring form teaches a key the publish door rejects — the author finds out at the 422. This is the same class the #11410 / #12868 work retired elsewhere (a form offering a choice publish refuses), one key over.

Why it is not obviously "just delete the row"

The non-declaration of icon on SelectOptionSchema is deliberate and recorded: the #5016 per-key measurement (documented in packages/spec/src/ui/action.zod.ts, the action-param option docblock) left icon / disabled out with option C — "None has a reader an action param's option list can reach". But that measurement was about the ACTION-param path; objectui's SelectOptionMetadata interface does declare icon (per the same docblock: label / value / color / icon / disabled / visibleWhen), so whether a FIELD option's icon has a live objectui reader today deserves its own measurement before choosing between:

  1. remove the icon row from object.form.ts (declared = offered converges downward), or
  2. declare icon on SelectOptionSchema (needs a measured reader plus a ruling — an accepted-set expansion, Clause-② class).

PR #13669's pin file (field-rows-option-description.test.ts) pins icon as still-refused, so whichever way this resolves, that pin moves with it deliberately rather than silently.

Refs: PR #13669 · objectui#6140 / objectui#6153 (the family ruling this fell out of) · #5016 (the action-path per-key measurement) · #12868 (the form-face option narrowing precedent).

Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions