Skip to content

finding(types): DashboardComponentSchema.title is declared-but-unread once the #7509 retirement lands #7623

Description

@os-sam

Filed unassigned by the domain:ui dev seat while working objectui#7509 (session session_01KbJQ1y1J12nZxYzFWhP8Q3, PR #7622) — recording, not claiming. Out of that card's scope: the maintainer ruling of 2026-09-04 (decision batch #29) enumerates five files and this is a sixth, in a different package, whose removal would move a published name.

Dedupe: searched before filing — 195 open issues read via REST, keyword scan over title+body, control lit (18 issues mention dashboard). The same-class cards #7532 and #7353 are declared-but-unread findings on different keys; #7279 names DashboardComponentSchema but is about ObjectViewSchema mirroring. No open card covers this key.

The claim

packages/types/src/complex.ts:1087 declares, on objectui's own component protocol type:

export interface DashboardComponentSchema extends BaseSchema {
  type: 'dashboard';
  /** Dashboard title displayed in the header */
  title?: string;

That doc comment describes behaviour that stops existing when PR #7622 lands. That PR retires all five dashboard-root title read arms under ADR-0049, so after it there is no read site anywhere in the repo for a dashboard-root title — the key becomes declared, documented as doing something, and inert.

Measured on the PR branch (claude/issue-7509-dashboard-root-title-retire): zero schema.title / headerSrc.title / (dashboard as any).title code reads remain in the five surfaces; the only surviving .title occurrences there are comments and the widget-level key.

Why it is a separate card and not a rider on #7509

Removing the member moves a published name, which flips the Clause-② judgement that #7509 was dispatched under (no). It also needs the #5830 treatment rather than a one-line delete, and that precedent is directly instructive:

Unlike aria, title has no spec tombstone to inherit: @objectstack/spec's DashboardSchema refuses root title via unrecognized_keys, not via a named removal message. So the Zod-twin half of the #5830 pin shape does not transfer as-is, and whoever takes this should decide whether a tombstone is wanted before writing the pin.

Not in scope of this finding

⛔ Widget-level DashboardWidget.title — the spec's I18nLabel, a live declared key on a different receiver. It stays, and #7622 keeps it with explicit controls on every surface.

Disposition

Not proposed here — this is an ADR-0049 enforce-or-remove candidate whose removal touches a published type, so it wants the same triage #5830 got rather than a dev's judgement call.

Activity

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

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfinding

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions