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

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions