Filed unassigned out of #6086 round 3. That round was naming the shape on property tables that named none; this table could not be named because the only candidate contradicts it.
The fact
content/docs/plugins/plugin-timeline.mdx's ## Properties table lists 8 keys. The only shape the tree names for a timeline node is TimelineSchema (packages/types/src/data-display.ts:1204), and it agrees on 1 of 8.
| keys |
|---|
| the docs table claims | variant, items, dateFormat, timeScale, rowLabel, minDate, maxDate, className |
TimelineSchema declares | type, events (required), orientation, position, plus BaseSchema |
Only className (inherited) is common to both.
Why it type-checks anyway
TimelineRenderer (packages/plugin-timeline/src/renderer.tsx:250) is typed schema: TimelineSchema and destructures variant, items, dateFormat straight off it, then reads schema.scale ?? schema.timeScale, schema.minDate, schema.maxDate, schema.rowLabel further down. That compiles only because BaseSchema carries an index signature (packages/types/src/base.ts:318), so any key reads as any. The annotation therefore constrains nothing, and the declared/read divergence is invisible to tsc.
The registration's own inputs metadata (renderer.tsx, the ComponentRegistry.register('timeline', ...) config) declares variant / items / dateFormat / … — i.e. the designer's vocabulary agrees with the docs and the renderer, and only the exported type disagrees.
TimelineSchema's events, orientation and position have no read point in packages/plugin-timeline.
Why it is worth a card
This is the same disease #6086 recorded, arriving from the source side: an exported type that is neither what authors write nor what the renderer reads, held together by an index signature that suppresses the only mechanical judge that would notice. @objectstack/spec also ships ui/TimelineConfig.json whose axis key is scale — which the renderer already prefers over timeScale — so there is a third vocabulary in play and the retirement/alias story needs deciding, not guessing.
Reproduce
sed -n '1199,1220p' packages/types/src/data-display.ts
grep -n 'schema\.' packages/plugin-timeline/src/renderer.tsx
sed -n '108,125p' content/docs/plugins/plugin-timeline.mdx
grep -n '\[key: string\]' packages/types/src/base.ts
Refs: #6086.
Filed unassigned out of #6086 round 3. That round was naming the shape on property tables that named none; this table could not be named because the only candidate contradicts it.
The fact
content/docs/plugins/plugin-timeline.mdx's## Propertiestable lists 8 keys. The only shape the tree names for atimelinenode isTimelineSchema(packages/types/src/data-display.ts:1204), and it agrees on 1 of 8.variant,items,dateFormat,timeScale,rowLabel,minDate,maxDate,classNameTimelineSchemadeclarestype,events(required),orientation,position, plusBaseSchemaOnly
className(inherited) is common to both.Why it type-checks anyway
TimelineRenderer(packages/plugin-timeline/src/renderer.tsx:250) is typedschema: TimelineSchemaand destructuresvariant,items,dateFormatstraight off it, then readsschema.scale ?? schema.timeScale,schema.minDate,schema.maxDate,schema.rowLabelfurther down. That compiles only becauseBaseSchemacarries an index signature (packages/types/src/base.ts:318), so any key reads asany. The annotation therefore constrains nothing, and the declared/read divergence is invisible totsc.The registration's own
inputsmetadata (renderer.tsx, theComponentRegistry.register('timeline', ...)config) declaresvariant/items/dateFormat/ … — i.e. the designer's vocabulary agrees with the docs and the renderer, and only the exported type disagrees.TimelineSchema'sevents,orientationandpositionhave no read point inpackages/plugin-timeline.Why it is worth a card
This is the same disease #6086 recorded, arriving from the source side: an exported type that is neither what authors write nor what the renderer reads, held together by an index signature that suppresses the only mechanical judge that would notice.
@objectstack/specalso shipsui/TimelineConfig.jsonwhose axis key isscale— which the renderer already prefers overtimeScale— so there is a third vocabulary in play and the retirement/alias story needs deciding, not guessing.Reproduce
Refs: #6086.