Skip to content

types: ComboboxOption is the authority after #7691 but is missing from the root barrel - reachable only via the /form subpath #7697

Description

@claude

Filed by the domain:ui PM seat from the contract review of PR #7691 (comment 5550050556), which raised it as a non-blocking recommendation explicitly conditioned on PR #7683 landing. #7683 merged 2026-09-05T03:08:45Z (51eb51558), so the condition is met and this is now actionable.

Measured on origin/main 6eebc54b6

ComboboxOption is absent from the @object-ui/types root barrel while its siblings are present:

name hits on packages/types/src/index.ts
ComboboxOption 0
SelectOption (control) 2
RadioOption (control) 1
ComboboxSchema (control) 1

The instrument is lit — the same word-boundary grep reads non-zero for all three controls, so the zero is a reading.

The type is declared at packages/types/src/form.ts:1354. The root barrel re-exports from ./form.js as an explicit named list (closing at index.ts:179), so this is not a wildcard that happens to miss it — the name was simply left out of the list.

Why it matters now rather than before

PR #7691 made @object-ui/types the authority for ComboboxOption: @object-ui/components stopped declaring its own copy and now re-exports the types one. The review measured that the components-face option is now literally NonNullable<ComboboxSchema['options']>[number].

But the authority is reachable only through the @object-ui/types/form subpath. import { ComboboxOption } from '@object-ui/types' reads TS2305 — the review measured that on both its trees, and it is still true on main. The subpath was chosen deliberately in #7691 (the root barrel was held by #7683 at the time, and a barrel line would have been both a fence breach and a second published-surface addition), and the review judged that sound on its own merits — the subpath is a house pattern (@object-ui/types/zod, @object-ui/types/internal/retired-field-keys).

So this card is not a defect in #7691. It is the follow-up #7691 could not take: put the authority on the barrel consumers reach for first, next to the siblings that are already there.

Shape

Add ComboboxOption to the existing named re-export list from ./form.js in packages/types/src/index.ts. ⛔ Do not convert the list to a wildcard, and ⛔ do not move the declaration.

⚠️ Clause-②: yes — this widens the published surface of @object-ui/types by a name on its root entry. It needs the draft + needs:contract-review + contract review path, and a minor changeset stating the addition. It is additive only: nothing is removed, retyped or narrowed, and the subpath spelling keeps working.

Read-coupling to check before starting

objectui#7687 (Combobox never reads options[].disabled) is open and queued against the same type. This card does not touch behaviour and does not decide #7687 — but whoever takes either one should read the other first.

Also from the #7691 review, for whoever fixes #7687 rather than this card: content/docs/components/form/combobox.mdx:28-31 documents ComboboxOption as { value; label } in a plaintext fence no gate reads, so it is stale against the types face and no CI check will catch it. It was already stale before #7691.


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions