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
finding(plugin-charts): ObjectChart has NO empty branch at all — an empty result draws a bare chart frame, the fourth distinct answer on this surface to "is it broken or is it young" #7130
Filed by the domain:ui seat (session session_012wwHa4aaFybxXrfmfHioDM) out of #7063 / PR #7124.
⚠️Provenance, stated plainly: the implementer measured this while sweeping for #7063's placeholder sites and deliberately did not file it, on the grounds that a chart frame with axes may be self-describing and they would rather the seat decide than pre-file on their own reading. That restraint was correct as a default. The seat is overriding it and filing — for the three reasons below, not because the reading was wrong.
The measurement
packages/plugin-chartsObjectChart has no empty branch. Over an empty result it draws an empty chart frame with no message — not a placeholder, not an explanation, nothing.
This sits alongside three other answers to the same question on the same surface, which #7063 has just been consolidating:
dashboard.noRows — a terse fragment (the string hotcrm#1212 measured as indistinguishable from a load failure)
ObjectDataTable
dashboard.noDataAvailable — a different terse key
PivotTable
dashboard.noDataAvailablewith its title suppressed, so only the description rendered
ObjectChart
⛔ nothing at all
⇒ Four surfaces, four answers. PR #7124 converges the first three onto one seam (WidgetEmptyState) and leaves this one untouched, correctly — the ruling's measured scenario is a table tile, and this is a different package.
⛔ This card does NOT assert the current behaviour is wrong
Carrying the implementer's reading forward verbatim, because it is the honest one and a future claimant should not inherit a conclusion the measurement does not support:
it is an observation about a state that may well be intentional (a chart frame with axes is arguably self-describing)
⚠️A chart is genuinely not a table. An empty table is a blank rectangle and says nothing; an empty chart still renders labelled axes, which may already tell the reader what would have been plotted. Whether that clears the bar the maintainer set in hotcrm#1212 — distinguishable from a load failure at a glance — is unmeasured, and it is the question this card exists to route, not to answer.
⇒ First deliverable for whoever takes it: look at it. Render ObjectChart over an empty result and judge whether the frame alone reads as a state or as a failure. If it reads as a state, close this card as measured-and-declined — that is a legitimate and valuable outcome, not a failed dispatch.
Why it is filed anyway
It is a measured absence (no empty branch exists), not an aesthetic judgement — the kind of fact that should be in the tracker rather than in a transcript.
⚠️Do not start before PR #7124 lands. It creates the WidgetEmptyState seam this would route through; starting earlier means designing the same thing twice — the failure mode the #7063/#7064 dispatch pair was explicitly fenced against.
⚠️ Note the package boundary: the seam is in @object-ui/plugin-dashboard and ObjectChart is in @object-ui/plugin-charts. Whether the seam should move, be imported across, or be duplicated is a real design question the claimant must measure and report, ⛔ not assume — and if the answer is "promote it to a shared package", that is a cross-surface abstraction and belongs to the convergence card below, not to this one.
Filed by the
domain:uiseat (sessionsession_012wwHa4aaFybxXrfmfHioDM) out of #7063 / PR #7124.The measurement
packages/plugin-chartsObjectCharthas no empty branch. Over an empty result it draws an empty chart frame with no message — not a placeholder, not an explanation, nothing.This sits alongside three other answers to the same question on the same surface, which #7063 has just been consolidating:
DatasetWidgetdashboard.noRows— a terse fragment (the string hotcrm#1212 measured as indistinguishable from a load failure)ObjectDataTabledashboard.noDataAvailable— a different terse keyPivotTabledashboard.noDataAvailablewith its title suppressed, so only the description renderedObjectChart⇒ Four surfaces, four answers. PR #7124 converges the first three onto one seam (
WidgetEmptyState) and leaves this one untouched, correctly — the ruling's measured scenario is a table tile, and this is a different package.⛔ This card does NOT assert the current behaviour is wrong
Carrying the implementer's reading forward verbatim, because it is the honest one and a future claimant should not inherit a conclusion the measurement does not support:
⇒ First deliverable for whoever takes it: look at it. Render
ObjectChartover an empty result and judge whether the frame alone reads as a state or as a failure. If it reads as a state, close this card as measured-and-declined — that is a legitimate and valuable outcome, not a failed dispatch.Why it is filed anyway
⛔ Sequencing
WidgetEmptyStateseam this would route through; starting earlier means designing the same thing twice — the failure mode the #7063/#7064 dispatch pair was explicitly fenced against.@object-ui/plugin-dashboardandObjectChartis in@object-ui/plugin-charts. Whether the seam should move, be imported across, or be duplicated is a real design question the claimant must measure and report, ⛔ not assume — and if the answer is "promote it to a shared package", that is a cross-surface abstraction and belongs to the convergence card below, not to this one.Related
hideEmpty ?? trueover DetailSection's own stated heuristic #7064 / PR fix(plugin-detail): let DetailSection's heuristic own the empty-section default #7123 — the sibling ruling, same principle, record-detail sections.DataEmptyState(packages/components/src/custom/view-states.tsx) is already consumed byplugin-list,plugin-kanban,plugin-dashboardandplugin-detail. PR fix(plugin-dashboard,i18n): a self-explaining default empty state for dashboard widgets #7124's implementer identified changing its defaults as a smaller fix spanning both rulings' surfaces, and declined it on purpose because two agents designing one cross-surface abstraction in parallel is worse than two local fixes. The seat will sequence that as its own card once fix(plugin-detail): let DetailSection's heuristic own the empty-section default #7123 and fix(plugin-dashboard,i18n): a self-explaining default empty state for dashboard widgets #7124 have both landed.dashboard.noRowsanddashboard.noDataAvailablebecome dead keys once #7063 lands — 10 packs, zero call sites #7125 — the dead-key residue from fix(plugin-dashboard,i18n): a self-explaining default empty state for dashboard widgets #7124.