Filing-gate category: ① a product defect with named sites (class a). A key the spec declares, the docs describe as "the side of the chart the axis belongs to", and the normaliser keeps is not honoured on yAxis, and nothing tells the author. Reader: triage first (route and grade), then the seat that claims it.
Filed by the domain:ui seat #2 (session_014mXUNuFomfj24w7s1pZzhN). The sources are the objectui#10587 dev report (PR objectui#10647, finding 2, "noted, not filed") and the contract review of that PR at 904b074, which measured it and called a card owed. It is the y-side twin of objectui#10587, same class and a separate key. ⛔ Not graded here.
Sites (the reviewer's reading at PR objectui#10647's head 904b074, which does not change the y-axis path; ⛔ not re-read by the seat)
packages/plugin-charts/src/AdvancedChartImpl.tsx:
hasDualAxis is yAxes.length above 1 (~:1607);
- the right-hand YAxis renders only under
hasDualAxis (~:2532), is always orientation="right", and takes yAxes[1];
- the primary YAxis carries no
orientation (~:2524);
- the
yAxes prop JSDoc (~:322) says "a second entry (or one with position: 'right') turns on the secondary axis", which is false for a lone right-hand entry.
packages/plugin-charts/src/normalizeChartSchema.ts:526 binds a position: 'right' FIRST entry's series to the right axis. The normaliser keeps only the four enum values (~:323-326).
- Spec:
@objectstack/spec 17.4.0 declares position: z.enum(['left','right','top','bottom']).optional(), shared by both axes.
Measurement (the PR objectui#10647 reviewer's probe through the real render path; ⛔ not re-run by the seat)
- A bar chart with a lone
yAxis: [{ field: 'revenue', position: 'right' }] draws its only value axis on the LEFT. Every value tick is orientation="left", 0 notes, and the bars are drawn.
position: 'top' on a y entry draws left, in silence.
[{ field: 'revenue', position: 'right' }, { field: 'cost', position: 'left' }] draws value ticks on the right only. The first entry's series is bound to the right axis by the normaliser, and the second entry is the right-hand axis whatever it says.
Direction (for triage, not a ruling)
Follow objectui#10587's shape, as PR objectui#10647 lands it for xAxis.position: honour the sides a y axis can take (left / right; on horizontal-bar the value axis runs across, so top / bottom), and refuse any other side with a visible ChartFootnote note naming yAxis[N].position, never in silence. Settle which entry is the primary axis when both entries name a side. Once honoured, correct the yAxes JSDoc and the scoped position row in content/docs that PR objectui#10647 writes (it cites this card).
Dedupe
REST read of every objectui issue and PR updated since 2026-09-25T00:00Z (367 items), with titles matched against yAxis|y-axis|y axis|horizontal-bar|axis title|right-hand|position: the only hits are objectui#10587 (x side) and its PR objectui#10647, plus objectui#10516, objectui#10518, objectui#10601, objectui#10511 and objectui#10608 (declaration and normaliser work, none about the rendered side). The regex walk over the 1000 most recently updated items, yAxis.*position|position.*yAxis|right-hand.*axis|secondary axis, gives 5 hits, none about this defect.
Dedupe words: yAxis position right drawn left · lone right-hand y axis · hasDualAxis second entry right · yAxis position silent
Generated by Claude Code
Filing-gate category: ① a product defect with named sites (class a). A key the spec declares, the docs describe as "the side of the chart the axis belongs to", and the normaliser keeps is not honoured on
yAxis, and nothing tells the author. Reader: triage first (route and grade), then the seat that claims it.Filed by the
domain:uiseat #2 (session_014mXUNuFomfj24w7s1pZzhN). The sources are the objectui#10587 dev report (PR objectui#10647, finding 2, "noted, not filed") and the contract review of that PR at904b074, which measured it and called a card owed. It is the y-side twin of objectui#10587, same class and a separate key. ⛔ Not graded here.Sites (the reviewer's reading at PR objectui#10647's head
904b074, which does not change the y-axis path; ⛔ not re-read by the seat)packages/plugin-charts/src/AdvancedChartImpl.tsx:hasDualAxisisyAxes.lengthabove 1 (~:1607);hasDualAxis(~:2532), is alwaysorientation="right", and takesyAxes[1];orientation(~:2524);yAxesprop JSDoc (~:322) says "a second entry (or one withposition: 'right') turns on the secondary axis", which is false for a lone right-hand entry.packages/plugin-charts/src/normalizeChartSchema.ts:526binds aposition: 'right'FIRST entry's series to the right axis. The normaliser keeps only the four enum values (~:323-326).@objectstack/spec17.4.0 declaresposition: z.enum(['left','right','top','bottom']).optional(), shared by both axes.Measurement (the PR objectui#10647 reviewer's probe through the real render path; ⛔ not re-run by the seat)
yAxis: [{ field: 'revenue', position: 'right' }]draws its only value axis on the LEFT. Every value tick isorientation="left", 0 notes, and the bars are drawn.position: 'top'on a y entry draws left, in silence.[{ field: 'revenue', position: 'right' }, { field: 'cost', position: 'left' }]draws value ticks on the right only. The first entry's series is bound to the right axis by the normaliser, and the second entry is the right-hand axis whatever it says.Direction (for triage, not a ruling)
Follow objectui#10587's shape, as PR objectui#10647 lands it for
xAxis.position: honour the sides a y axis can take (left/right; onhorizontal-barthe value axis runs across, sotop/bottom), and refuse any other side with a visibleChartFootnotenote namingyAxis[N].position, never in silence. Settle which entry is the primary axis when both entries name a side. Once honoured, correct theyAxesJSDoc and the scopedpositionrow incontent/docsthat PR objectui#10647 writes (it cites this card).Dedupe
REST read of every objectui issue and PR updated since 2026-09-25T00:00Z (367 items), with titles matched against
yAxis|y-axis|y axis|horizontal-bar|axis title|right-hand|position: the only hits are objectui#10587 (x side) and its PR objectui#10647, plus objectui#10516, objectui#10518, objectui#10601, objectui#10511 and objectui#10608 (declaration and normaliser work, none about the rendered side). The regex walk over the 1000 most recently updated items,yAxis.*position|position.*yAxis|right-hand.*axis|secondary axis, gives 5 hits, none about this defect.Dedupe words:
yAxis position right drawn left·lone right-hand y axis·hasDualAxis second entry right·yAxis position silentGenerated by Claude Code