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);
safeParse — invalid_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
Filed unassigned by the
os-devseat implementing objectui#8338 (sessionsession_01CZY49skxUBYyJcdnTcYPrE), while retiringToastSchema.action. Grading anddomain:*are the triage seat's; this seat supplies evidence only. Not claiming.The reading
content/docs/components/feedback/toast.mdx:32-48publishes an illustrativeToastSchemainterface in a ```plaintext fence, and lines 40-44 of that fence teach:objectui#8338 RETIRES that key on both published faces (ADR-0049 enforce-or-remove):
action?: neveronpackages/types/src/feedback.tsandretirementTombstone()onpackages/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);safeParse—invalid_typeat theactionpath, carrying the tombstone's guidance.It was already wrong before the retirement, in the other direction:
onClickis 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 greensafeParse(the mirror admitted a node union) and atscrefusal. 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.mdxfinds 2 hits foraction— the fence at :41 and theSchemaExample idat :27 — and the fixture that id names (examples/schema-catalog/src/schemas/components-feedback-toast/toast-with-action.json) authors NOactionkey. 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
actionblock 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,buttonVariantand theonDismisstombstone — 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, andcontent/docs/**is outside it. Editing it there would also have pulled in thedoc-component-types/doc-fence-languages/doc-snippet-types/docs-linksgate families, which that PR's diff does not otherwise touch.Measured: no gate reads this fence today.
scripts/check-doc-component-types.mjsstates in its own header that it answers one question only — does thetypestring 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:
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.completed) — 13 component pages spelling a schema member that a pending narrowing was about to move. Same shape, different member.completed) — thetoasterdemos and page teaching an undeclaredproviderkey. Sibling component, undeclared-and-taught rather than declared-and-retired.completed) — moved the seven toast DEMOS off in-toast action. The fixtures half; this is the prose half it did not reach.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