You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
spec: retire ChartConfigSchema.aria — no renderer ever applied it and the node-level ariaLabel / ariaDescribedBy / role already carry the accessibility vocabulary (objectui#4044 ruling C, the dashboard.aria precedent) #17751
Filed by the director seat on the maintainer's ruling for objectui#4044 (decision batch #118 item 2, 2026-09-12: 「其他同意」 to the seat's recommendation C — judge the protocol wrong for this one key). ⛔ packages/spec is the domain:spec seat's; the director seat writes no repo file.
objectui#4044 ruling (5617466747) — implementation follows the protocol for DashboardWidget.chartConfig; PR objectui#9202 (merged 2026-09-11) forwarded 9 of the 10 DO-NOW keys. The one it could not forward is aria, and the seat stopped and reported (objectui#4044 comment 5639000150).
ChartConfigSchema.aria (packages/spec/src/ui/… — locate by symbol) declares a nested accessibility object on a chart's configuration. Measured on objectui origin/main (5639000150): no renderer reads it — ChartRenderer drops every prop but schema / onChartClick, AdvancedChartImpl declares no aria prop, normalizeChartSchema names it nowhere; forwarding it nested or flattened changed nothing in the DOM (lit control: description sets aria-label / role='img' on the same node). Meanwhile the platform already carries ONE accessibility vocabulary at the node level — BaseSchema.ariaLabel / ariaDescribedBy / role, converted to DOM attributes by SchemaRenderer.resolveAriaProps everywhere. chartConfig.aria is a second, block-local spelling of the same thing, with no reader, and giving it a reader would create two accessible-name sources on one element that then need a precedence rule.
⇒ Long-term shape: one node, one accessibility vocabulary, at the base node. The key is retired the way dashboard.aria was.
What to do
Retire ChartConfigSchema.aria: tombstone that refuses any value with a message naming the flat trio on the node (ariaLabel / ariaDescribedBy / role), following the dashboard.aria shape.
ADR-0087 semantic migration entry: chartConfig.aria.label → node ariaLabel, chartConfig.aria.describedBy → node ariaDescribedBy (adjust to the key's actual members), lossless where the members map one-to-one; a structured TODO for any member that does not.
Liveness ledger row for widgets.chartConfig updated to the measured truth (this key never live); #17385 (xAxis / yAxis / series vs dataset derivation) is the sibling protocol card on the same row — coordinate, ⛔ do not fold.
major changeset (a declared key stops parsing), Clause-②: no (narrowing).
objectui#4044 is pm:blocked on this card; when it lands, objectui's contract twins gain the tombstone pin and the dashboard aria question closes.
Filed by the director seat on the maintainer's ruling for objectui#4044 (decision batch #118 item 2, 2026-09-12: 「其他同意」 to the seat's recommendation C — judge the protocol wrong for this one key). ⛔
packages/specis thedomain:specseat's; the director seat writes no repo file.Governing text
DashboardWidget.chartConfig; PR objectui#9202 (merged 2026-09-11) forwarded 9 of the 10 DO-NOW keys. The one it could not forward isaria, and the seat stopped and reported (objectui#4044 comment 5639000150).objectui/packages/types/src/complex.ts:1915-1925: "the spec removeddashboard.ariaat thePOST /data/sharing/rules绕过SharingRuleSchema:criteria缺失或拼错静默变成"共享该对象全部记录",与 ADR-0049 "never seeded as a permissive match-all" 直接冲突 #3896 audit close-out (no dashboard renderer ever applied it), soDashboardSchema.shape.ariais a tombstone that refuses any value" — pinned by__tests__/dashboard-aria-retired-contract-twins.test.ts.The defect in the protocol
ChartConfigSchema.aria(packages/spec/src/ui/…— locate by symbol) declares a nested accessibility object on a chart's configuration. Measured on objectuiorigin/main(5639000150): no renderer reads it —ChartRendererdrops every prop butschema/onChartClick,AdvancedChartImpldeclares noariaprop,normalizeChartSchemanames it nowhere; forwarding it nested or flattened changed nothing in the DOM (lit control:descriptionsetsaria-label/role='img'on the same node). Meanwhile the platform already carries ONE accessibility vocabulary at the node level —BaseSchema.ariaLabel/ariaDescribedBy/role, converted to DOM attributes bySchemaRenderer.resolveAriaPropseverywhere.chartConfig.ariais a second, block-local spelling of the same thing, with no reader, and giving it a reader would create two accessible-name sources on one element that then need a precedence rule.⇒ Long-term shape: one node, one accessibility vocabulary, at the base node. The key is retired the way
dashboard.ariawas.What to do
ChartConfigSchema.aria: tombstone that refuses any value with a message naming the flat trio on the node (ariaLabel/ariaDescribedBy/role), following thedashboard.ariashape.chartConfig.aria.label→ nodeariaLabel,chartConfig.aria.describedBy→ nodeariaDescribedBy(adjust to the key's actual members), lossless where the members map one-to-one; a structured TODO for any member that does not.widgets.chartConfigupdated to the measured truth (this key never live);#17385(xAxis/yAxis/seriesvs dataset derivation) is the sibling protocol card on the same row — coordinate, ⛔ do not fold.majorchangeset (a declared key stops parsing),Clause-②: no(narrowing).pm:blockedon this card; when it lands, objectui's contract twins gain the tombstone pin and the dashboardariaquestion closes.Refs
objectui#4044 · objectui#9202 · objectui#5830 / #3896 (the
dashboard.ariaretirement) · #17385 ·packages/types/src/complex.ts:1915-1925(objectui)Filed by the director seat,
session_01QsCVSivtpwT6ZXs5Rtvqxe, 2026-09-12T02:1xZ, with Claude Code.Generated by Claude Code