Follow-on from the dashboard analytics migration #3251 (umbrella #1878 · ADR-0021 #1890). #3251 shipped the two endpoints — Studio authors only the dataset shape (objectui#2703) and DashboardWidgetSchema.strict() is enabled (#3316). This tracks the one deferred item from that work: retiring the renderer's now-unauthored legacy branches.
Why this was deferred (not done in #3251)
The .strict() endpoint only required that authoring stop emitting legacy keys — which it now does. The renderer's legacy read-branches were kept on purpose:
So this is genuinely gated on stored-dashboard migration, hence a separate P2.
Scope (all in objectui, packages/plugin-dashboard)
Once no stored dashboard carries the pre-ADR-0021 inline shape:
Precondition (blocking)
A stored-dashboard audit/migration confirming no persisted dashboard (framework examples, cloud, customer metadata) still carries the inline analytics keys. Framework examples are already dataset-shaped; cloud and stored customer metadata need verification. A visible error placeholder for any surviving legacy widget (rather than a blank) is the graceful fallback if full migration can't be guaranteed.
Links
🤖 Generated with Claude Code
Follow-on from the dashboard analytics migration #3251 (umbrella #1878 · ADR-0021 #1890). #3251 shipped the two endpoints — Studio authors only the dataset shape (objectui#2703) and
DashboardWidgetSchema.strict()is enabled (#3316). This tracks the one deferred item from that work: retiring the renderer's now-unauthored legacy branches.Why this was deferred (not done in #3251)
The
.strict()endpoint only required that authoring stop emitting legacy keys — which it now does. The renderer's legacy read-branches were kept on purpose:cloudrepo, which [P2] Finish the dashboard analytics migration: Studio → dataset shape, then enable DashboardWidgetSchema strict validation #3251 could not fully trace.So this is genuinely gated on stored-dashboard migration, hence a separate P2.
Scope (all in
objectui,packages/plugin-dashboard)Once no stored dashboard carries the pre-ADR-0021 inline shape:
DashboardRenderer.tsxgetComponentSchemathat readobject+categoryField/valueField/aggregate(metric/metric-like ~:506-568, object-bound chart emission ~:570-664) and the legacy pivot block (rowField/columnField/valueField/aggregation→object-pivot/pivot,:718-774), plus thewidget.object-keyedobjectFieldSetsmachinery (:864-871).ObjectPivotTable/PivotTableemission. Keep the component files — they are public SDUI blocks (core/src/registry/public-blocks.ts) usable by other surfaces; only stop the dashboard renderer from emitting them.options.data/widget.data,widget.component) — per the [P2] Finish the dashboard analytics migration: Studio → dataset shape, then enable DashboardWidgetSchema strict validation #3251 decision tree these stay renderer-internal.@deprecatedinline-analytics keys (object/categoryField/categoryGranularity/valueField/aggregate/measures) from@object-ui/typesDashboardWidgetSchema(they were retained in objectui#2703 only so the renderer could read legacy/static metadata during the transition) and remove theas anycasts they backed.__tests__/DashboardRenderer.filters.test.tsx(bar/line/pie withobject+aggregate) to the dataset shape.Precondition (blocking)
A stored-dashboard audit/migration confirming no persisted dashboard (framework examples,
cloud, customer metadata) still carries the inline analytics keys. Framework examples are already dataset-shaped;cloudand stored customer metadata need verification. A visible error placeholder for any surviving legacy widget (rather than a blank) is the graceful fallback if full migration can't be guaranteed.Links
packages/plugin-dashboard/src/DashboardRenderer.tsx,ObjectPivotTable.tsx,PivotTable.tsx,index.tsx🤖 Generated with Claude Code