Found while measuring per-key liveness for #7546 (branch claude/issue-7546-chart-series-silent-strip); out of that card's scope — its ruling fences the change to ChartDataSeriesSchema and its readers, and this is a drift across readers, not a strip. Filed unassigned as an observation for triage. Not fixed in that PR (which declares variant as the three values the normalizer honours, and says so in its docblock).
The drift, measured against origin/main a472b07
| site |
union for variant |
@objectstack/spec ChartSeriesSchema.variant (ui/chart.zod.ts:270) |
primary / comparison, default primary |
plugin-charts/src/normalizeChartSchema.ts:246-247 (normalizeSeries) |
comparison / current / primary |
core/src/utils/chart-presentation.ts:129 (seriesPresentation, dataset path) |
primary / comparison — current is dropped |
plugin-charts/src/ChartRenderer.tsx:65 (internal dataKey arm prop type) |
current / comparison — no primary |
plugin-charts/src/ChartRenderer.tsx:66 (spec name arm prop type) |
current / comparison / primary |
plugin-charts/src/AdvancedChartImpl.tsx:2010, 2012, 2033 (the consumer) |
only === 'comparison' is ever tested |
Producers of current: plugin-charts/src/ObjectChart.tsx:852 (variant: s.variant || 'current') and plugin-dashboard/src/DatasetWidget.tsx:1450 (variant: s.variant ?? 'current'). Neither the spec nor any document teaches current.
Effect today
None visible: the only downstream distinction is comparison vs not-comparison, so current, primary and absent all draw the same. On the dataset path, seriesPresentation silently drops an authored variant: 'current' — harmless now, for the same reason. The finding is the drift itself: four declarations of one enum with three different member sets, and one spelling produced in two places that the contract of record does not know.
Possible dispositions (triage's call)
- Retire
current under ADR-0049 — rewrite the two producers to primary (or to omit it), narrow normalizeSeries and the prop arms to the spec's pair, and narrow the objectui#7546 declaration with it (its docblock already names this as the one place it is wider than the spec).
- Or declare
current on the spec as a synonym and align the other three sites to the widened union.
Related: objectui#7546, objectui#7495 (the comparison-series exclusion list drift on the dashboard side).
Filed by the objectui#7546 dev seat, Claude Code session session_01KbJQ1y1J12nZxYzFWhP8Q3.
Found while measuring per-key liveness for #7546 (branch
claude/issue-7546-chart-series-silent-strip); out of that card's scope — its ruling fences the change toChartDataSeriesSchemaand its readers, and this is a drift across readers, not a strip. Filed unassigned as an observation for triage. Not fixed in that PR (which declaresvariantas the three values the normalizer honours, and says so in its docblock).The drift, measured against
origin/maina472b07variant@objectstack/specChartSeriesSchema.variant(ui/chart.zod.ts:270)primary/comparison, defaultprimaryplugin-charts/src/normalizeChartSchema.ts:246-247(normalizeSeries)comparison/current/primarycore/src/utils/chart-presentation.ts:129(seriesPresentation, dataset path)primary/comparison—currentis droppedplugin-charts/src/ChartRenderer.tsx:65(internaldataKeyarm prop type)current/comparison— noprimaryplugin-charts/src/ChartRenderer.tsx:66(specnamearm prop type)current/comparison/primaryplugin-charts/src/AdvancedChartImpl.tsx:2010, 2012, 2033(the consumer)=== 'comparison'is ever testedProducers of
current:plugin-charts/src/ObjectChart.tsx:852(variant: s.variant || 'current') andplugin-dashboard/src/DatasetWidget.tsx:1450(variant: s.variant ?? 'current'). Neither the spec nor any document teachescurrent.Effect today
None visible: the only downstream distinction is
comparisonvs not-comparison, socurrent,primaryand absent all draw the same. On the dataset path,seriesPresentationsilently drops an authoredvariant: 'current'— harmless now, for the same reason. The finding is the drift itself: four declarations of one enum with three different member sets, and one spelling produced in two places that the contract of record does not know.Possible dispositions (triage's call)
currentunder ADR-0049 — rewrite the two producers toprimary(or to omit it), narrownormalizeSeriesand the prop arms to the spec's pair, and narrow the objectui#7546 declaration with it (its docblock already names this as the one place it is wider than the spec).currenton the spec as a synonym and align the other three sites to the widened union.Related: objectui#7546, objectui#7495 (the comparison-series exclusion list drift on the dashboard side).
Filed by the objectui#7546 dev seat, Claude Code session
session_01KbJQ1y1J12nZxYzFWhP8Q3.