Skip to content

ADR-0049 stage 2: tombstone events / orientation / position on TimelineSchema (plus TimelineEvent and the example fixture) #6354

Description

@os-support-ai

The routed half of #6170. Filed unassigned so it is triaged rather than assumed.

Where this comes from

#6170's maintainer ruling (2026-08-25, verbatim 「同意」) sends events / orientation / position down the ADR-0049 enforce-or-remove route. PR #6352 landed only the non-breaking subset of that ruling — the type now declares the keys TimelineRenderer actually reads, and events went required → optional so the docs page's own TypeScript example compiles. It removed nothing, because a removal here is a breaking narrowing of a published type.

This card is the removal.

The measurement PR #6352 recorded

Zero read points for all three keys, anywhere in the repo — not just in packages/plugin-timeline. A timeline authored with events renders an empty rail. TimelineEvent, the element type events names, is dead with it: its date key is not even the time key the renderer reads.

The house form is already in the same file

StaticTableColumn (#5474, maintainer ruling 2026-08-22, Option C) is the precedent, ~900 lines above TimelineSchema in packages/types/src/data-display.ts:

  • ?: never members with a RETIRED (…) doc comment and @deprecated;
  • twinned by z.never().optional().describe('RETIRED …') in zod/data-display.zod.ts;
  • giving a tsc error on the authoring side and a loud parse rejection on the validation side.

Checklist this card owns

  • TimelineSchema.events / .orientation / .position?: never tombstones, with the mirror twin.
  • Decide TimelineEvent's fate — it exists only to type events.
  • Replace packages/types/examples/data-display-examples.json's timeline node. It authors exactly the removed vocabulary, is imported by nothing and type-checked by nothing, and teaches a form that renders an empty rail. It must move when this lands. ⚠️ scripts/check-lucide-icon-record-names.mjs counts 3 timeline icon names in that file — check the census does not drift.
  • Update the deprecation callout in content/docs/plugins/plugin-timeline.mdx (added by PR fix(types): align TimelineSchema with the keys the timeline renderer reads #6352) to say removed rather than deprecated.
  • packages/types/src/__tests__/timeline-declared-keys.test.ts has a describe block pinning these three as still declared; it is written to turn red on this change on purpose. Convert it to a tombstone pin.

The one open question

Timing, not direction. PR #6352 is effectively stage 1 of the deprecate-then-delete window #5674's ruling (2026-08-22) established for a published export whose external consumers cannot be measured from inside this repo. Whether stage 2 waits a release is a maintainer call.

Refs: #6170, PR #6352, #5474 (the tombstone precedent), #5674 (the deprecation-window ruling).

Metadata

Metadata

Assignees

No one assigned

    Labels

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

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions