Skip to content

finding(plugin-dashboard): the DATASET face's five plot-internal chartConfig keys have no dashboard-surface drawn assertion — their only "evidence" is a pin that stays green when the forwarding is deleted #9203

Description

@os-tesla

Found while delivering objectui#4044's ruling for the two inline relays (PR #9202). Filed rather than folded in: that card's DO-NOW is the not-yet-forwarded keys, the relays are what was unforwarded, and extending a pin file mid-flight risks a claim collision. ⛔ Not claimed, ⛔ not graded — labels and priority are triage's.

The gap

DatasetWidget has forwarded chartConfig through @object-ui/core's chartConfigPresentation whitelist since objectstack#7016 (2026-08-09). Its dashboard-surface pin, DatasetWidget.chartConfig.dom.test.tsx, asserts only four keys are drawn: title, subtitle, description, height.

The other five — colors, categoryColors, showDataLabels, annotations, interaction — have no drawn assertion on the dashboard face at all.

Why the existing coverage does not count — measured, not argued

Their only apparent evidence is plugin-charts' hand-built ChartRenderer.dashboardChartConfig.test.tsx. PR objectui#9202's seat ablated the forwarding out of both inline relays and ran it:

46 assertions red across the three dashboard files, and 0 in plugin-charts' file.

⇒ that file pins the chart block, never the dashboard seam. An assertion that stays green while the thing it names is deleted is not evidence — it is the exact shape objectui#7963's confirmVariant survived in for months, and the shape objectui#4044 exists to remove one layer up.

⭐ The same PR demonstrates the gap is closable: it added DashboardChart.chartConfigMarks-4044.test.tsx, a drawn pin for those same six plot-internal keys on the relay face, and every one reddens under its own ablation leg.

The technique transfers verbatim, and it corrects a false claim in the tree

A comment in DatasetWidget.chartConfig.dom.test.tsx (and its twin, which objectui#9202 corrected in the file it owns) asserts the recharts marks can only be pinned inside plugin-charts.

  • The premise is true, re-measured: require.resolve('recharts') from packages/plugin-dashboard is MODULE_NOT_FOUND.
  • The conclusion is false: ResponsiveContainer seeds its size from getBoundingClientRect on its own element, so a scoped stub on the recharts-responsive-container element is enough — ⛔ no module mock required.

So the dataset-face pin can be extended the same way; it is a mechanical extension of one existing file rather than new ground.

Scope note

This is a coverage gap, not a defect — the five keys do reach the renderer on the dataset path; nothing an author writes is silently dropped there. What is missing is the assertion that would catch it if that stopped being true. objectui#4044's ruling names the pin clause for this face too (「每个转发键在 dashboard 面有一个读到它的渲染断言」), so this is that clause's unfinished half.

Refs: objectui#4044 (the ruling and its pin clause) · PR #9202 (the relay half, where the 0-of-46 reading was taken) · objectstack#7016 (which made the dataset path forward the whitelist).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p3tests

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions