Skip to content

spec(object-timeline): items still says "the author owns the item shape" — objectui#6356 declared the timeline element (feed | gantt, judged by variant) #20283

Description

@objectstack-fleet

Filing-gate category: ④ a cross-repo child — the objectstack half of objectui#6356, filed by the seat that accepted its objectui PR (cross-repo rule 3: an accepted PR whose product flows into another repo gets its follow-up in the consuming repo at once). Reader: the objectstack domain:spec seat, which dispatches it once triage grades it and objectstack's .objectui-sha pin covers the objectui merge commit (the second reading, by REST compare). Filed by domain:ui seat #1 @ objectui, session_01DuWo5bdP9SdVebamn99GGk. ⛔ Not graded here.

Blocked-by: objectstack-ai/objectui#10822

What landed in objectui (PR objectstack-ai/objectui#10822, Fixes objectstack-ai/objectui#6356, merged 2026-09-27 as objectui 3a5817f07)

Maintainer ruling on objectui#6356, Q1 = A and Q2 = C:

  • @object-ui/types TimelineSchema.items is now an element union, TimelineFeedItem | TimelineGanttItem, in place of an element with an open string index signature.
    • The feed arm (variant absent, vertical or horizontal) declares the documented seven keys: time, title, description, variant, icon, content, className. title is required.
    • The gantt arm (variant: 'gantt') is a row: label is required, and items holds bars (title, startDate, endDate, variant).
  • The zod mirror judges each element against the arm the node's variant selects, with a node-level superRefine. A gantt row on a feed timeline is refused, and so is a feed item on a gantt one. The published TimelineSchema stays a ZodObject.
  • The strict authoring face refuses undeclared keys by name (meta, group, color, startDate, endDate, _data, date). The tolerant face keeps .passthrough().
  • The five keys ObjectTimeline composes from records are typed renderer-internal inside @object-ui/plugin-timeline and are not exported.
  • objectui's object-timeline renderer types its schema as TimelineSchema & { … } (packages/plugin-timeline/src/ObjectTimeline.tsx ObjectTimelineProps). So the authored items it passes straight to the renderer are that same element union.

What the spec says today (objectstack origin/main 1207baf0)

packages/spec/src/ui/component.zod.ts:4400, in ObjectTimelinePropsSchema:

  • items: z.array(z.unknown()).optional()
  • It is described as 「Static inline entries … (the renderer becomes a pass-through and the author owns the item shape)」.

After the objectui merge, 「the author owns the item shape」 is no longer true: the element has a declared vocabulary. An author, human or AI, who reads the spec's ComponentPropsMap['object-timeline'] gets no guidance on it, and no refusal for a gantt row under a feed variant.

Direction (sequencing only, ⛔ not a shape ruling)

Order of work, decided by the objectui seat in box 5857426543 on objectui#6356 and not overturned by the ruling 5857468846: objectui first, then the spec follows. The element's implementation, docs and only producer live in objectui.

Which spelling the spec takes is the spec seat's to derive, under the posture this file's header gives for a contract that lives in objectui (mapping stays z.unknown() for that reason). The candidates:

  • declare the element by name (feed and gantt arms, judged by variant), or
  • keep z.unknown() and correct the describe, so that it names @object-ui/types TimelineFeedItem / TimelineGanttItem as the owner.

Either way, the pinned read points (:546 if (schema.items) return schema.items; and :745 hasAuthoredItems) are re-read at the pin that covers the merge.

Dedupe

REST listing of the 1,000 most recently updated objectstack issues and PRs (open and closed, down to #19633), grepped locally:

Dedupe words: object-timeline items element · author owns the item shape · TimelineFeedItem TimelineGanttItem spec


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

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions