Skip to content

finding(docs): the toast page's schema fence teaches ToastSchema.action, a key objectui#8338 retires on both faces — a snippet that already had no JSON inhabitant #8539

Description

@claude

Filed unassigned by the os-dev seat implementing objectui#8338 (session session_01CZY49skxUBYyJcdnTcYPrE), while retiring ToastSchema.action. Grading and domain:* are the triage seat's; this seat supplies evidence only. Not claiming.

The reading

content/docs/components/feedback/toast.mdx:32-48 publishes an illustrative ToastSchema interface in a ```plaintext fence, and lines 40-44 of that fence teach:

  // Action button
  action?: {
    label: string;
    onClick: () => void;
  };

objectui#8338 RETIRES that key on both published faces (ADR-0049 enforce-or-remove): action?: never on packages/types/src/feedback.ts and retirementTombstone() on packages/types/src/zod/feedback.zod.ts. A reader who copies the fence therefore gets a refusal on both faces:

  • tsc — the literal is no longer assignable (it was assignable to the old declaration; that is the one thing this retirement removes that ever compiled);
  • safeParseinvalid_type at the action path, carrying the tombstone's guidance.

It was already wrong before the retirement, in the other direction: onClick is a function inside a required object, so no JSON document could ever satisfy the snippet either — a reader authoring metadata from this page got a green safeParse (the mirror admitted a node union) and a tsc refusal. So this is not a regression introduced by the retirement; it is a pre-existing teaching defect that the retirement changes the failure mode of.

Control that the scan reached the file: the same grep over content/docs/components/feedback/toast.mdx finds 2 hits for action — the fence at :41 and the SchemaExample id at :27 — and the fixture that id names (examples/schema-catalog/src/schemas/components-feedback-toast/toast-with-action.json) authors NO action key. objectui#6250's close already re-pointed all seven toast demos away from an in-toast action; only the prose fence was left behind.

Scope, and what the remedy is NOT

The remedy is to delete the action block from the fence. It is NOT to document a replacement: there is none. objectui#6250 moved the demos off in-toast action entirely and the capability was never fulfilled — an in-toast action button remains a capability expansion with zero runtime and would need its own card. Do not write "not yet supported" and do not point at a future shape.

While the fence is open, note it also omits position, buttonLabel, buttonVariant and the onDismiss tombstone — a hand-maintained subset, stated as an observation and deliberately NOT folded into this card's ask.

Why this was not repaired inside objectui#8338's PR

That card's dispatch declared a closed file surface (packages/types/src/** plus .changeset/) with stop-on-breach, and content/docs/** is outside it. Editing it there would also have pulled in the doc-component-types / doc-fence-languages / doc-snippet-types / docs-links gate families, which that PR's diff does not otherwise touch.

Measured: no gate reads this fence today. scripts/check-doc-component-types.mjs states in its own header that it answers one question only — does the type string name a registered component — and that "whether the snippet's OTHER keys are read by the renderer the type resolves to" is deliberately NOT in scope. So this stays green in CI either way, which is exactly why it needs a card rather than a red build.

Dedup

One targeted search over the docs / stale-key / retired-tombstone vocabulary, INCLUDING closed issues, returned 18 substantive results — a live instrument (it returned objectui#8338 itself, the known must-hit control). Reviewed:

  • objectui#7340 (closed completed) — the direct precedent and the same shape one class earlier: three pages teaching retired handler keys as authorable props, "stale once objectui#6124's tombstones land", filed as its OWN docs card rather than ridden into the tombstone PR. Not a duplicate: different pages, different keys, and that card is closed.
  • objectui#7239 (closed completed) — 13 component pages spelling a schema member that a pending narrowing was about to move. Same shape, different member.
  • objectui#6494 (closed completed) — the toaster demos and page teaching an undeclared provider key. Sibling component, undeclared-and-taught rather than declared-and-retired.
  • objectui#6250 (closed completed) — moved the seven toast DEMOS off in-toast action. The fixtures half; this is the prose half it did not reach.
  • objectui#6496 (closed completed) — the parent finding whose Direction 2 objectui#8338 executes.

None of them owns this fence's current state. Not upgraded to exhaustive.

Related

objectui#8338 (the retirement this is stale against) - objectui#6250 - objectui#6496 - objectui#7340 - objectui#7239 - ADR-0049.

Generated by Claude Code, session session_01CZY49skxUBYyJcdnTcYPrE.


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

    documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepriority:p3

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions