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.

Restart-when: pnpm view @object-ui/types time --json reports a publish time LATER than 2026-08-25T15:36:26Z (the merge of PR objectui#6352, stage 1) — i.e. the deprecate-then-delete window objectui#5674 ruled on has an actually-published stage 1 to count from

This line was ADDED at 2026-09-18T22:51Z by the domain:ui#2 execution seat. It existed in neither channel — not the body, not a comment — which made this hold illegal under the state model (a hold is legal only with a machine-fireable exit) and left objectui#6170 and objectui#6356, both pm:blocked behind this card, waiting on a mechanism that could never fire (patrol row H26). ⛔ Nothing about this card's direction, grade or route changed: the direction is already ruled on objectui#6170 (「同意」, ADR-0049 enforce-or-remove) and only the timing was ever open, as this section says in its own words. ⚠️ The seat did ⛔ NOT measure whether the condition is already true: this repo's release listing returned @object-ui/types@17.5.0 published 2026-08-14T15:42:14Z — EARLIER than stage 1 — and the tag listing answered with a different package family entirely, so that instrument is not clean enough to assert it either way. The predicate above names the reading someone must take; it is ⛔ not a reading taken.

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).


Generated by Claude Code

Activity

  1. os-tesla commented on Sep 18, 2026

    @os-tesla
    Collaborator

    Half-state repair — this hold had no exit in EITHER channel, and two cards were waiting on it

    domain:ui#2 执行席,session_018HrVaotisyhgmot9o2MLRq,2026-09-18T22:52Z。⛔ 本笔不改级别、不改路由、不改状态标签:pm:on-hold 留在原处,domain:ui 不动。加的只有正文里那条本来就欠着的 Restart-when: 行。

    读数

    本卡此前的 Restart-when: —— 正文与评论两个通道 0(自 objectstack#10403 起 H9 两个通道都读)
    下游等待者 objectui#6170(pm:blocked,Blocked-by: #6354)· objectui#6356(pm:blocked,经 objectui#6170 传递)
    巡查行 H26 打在 objectui#6170 上:「pm:blocked on 1 target(s) that can never CLOSE」
    新行的分类(现读存库正文) command —— 可点火

    ⇒ 这三张卡此前是一条构造上永不释放的链:等待者的解锁谓词是「Blocked-by: 目标关闭」,而 pm:on-hold 按定义是卡开着时所处的状态。H26 那句话说得准确:「the release has to come from the target's own state changing … and someone has to want that」。本笔就是让那件事有机制可发生。

    ⛔ 本笔没有做的事

    • ⛔ 没有裁方向。方向早已由 objectui#6170 的维护者裁定(「同意」,ADR-0049 enforce-or-remove)定下;本卡正文自己写着「Timing, not direction」。删已发布能力在人工地板上,⛔ 不是本席能碰的 —— 而本笔碰的只是「什么时候重新看它」的机器可读形式。
    • ⛔ 没有测那个条件今天是否已经成立。本仓 releases 列表回的最新 @object-ui/types 是 17.5.0 / 2026-08-14T15:42:14Z,早于阶段一的落地(2026-08-25T15:36:26Z);而同一次读的 tags 列表回的却是 @objectstack/plugin-ui@* —— 另一个包族。⇒ 这个仪器不干净,两个方向都不足以断言,所以新行写的是「该谁去取的读数」,⛔ 不是「已取到的读数」。
    • ⛔ 没有碰下游两张卡。它们的 Blocked-by: 指向本卡,本卡现在有了出口,链子自己就活了。

    给下一个读者

    条件满足的那一刻,本卡照常走 hold 放行双查(只放最近一次转换评论的条件,其后卡上有更新的 merged PR 即拒),清单在正文「Checklist this card owns」那一节,五项,含那条故意写成会变红的 pin(timeline-declared-keys.test.ts)。


    domain:ui#2 执行席 · session_018HrVaotisyhgmot9o2MLRq · 上表四个读数与两个通道的零、以及新行的分类,都在本动作 2026-09-18T22:52Z 现取;两个时间戳是平台的。


    Generated by Claude Code

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

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

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions