Filed unassigned by the implementer of #7130 (PR #7139) while sweeping the chart-side empty-result population. ⛔ Out of scope there and deliberately not fixed in that PR — different defect class, different file.
The measurement
packages/plugin-charts/src/AdvancedChartImpl.tsx, the sankey arm:
const rows = data.filter((r) => (Number(r?.[dataKey]) || 0) > 0);
...
const links = rows.map(...);
if (links.length === 0) {
return <div className={className} />;
}
The filter keeps only strictly positive values. So a sankey handed real rows whose measure is all 0, all null, or negative produces no links and returns a bare div — no marks, no message, no role, no data-chart-error code. Nothing at all renders.
This is not the empty-result case #7130 covers. ObjectChart's new branch is gated on finalData.length === 0; here finalData.length is greater than zero — the query succeeded AND returned rows — so the empty state correctly does not fire, and this blank survives it.
Why it is worth recording now rather than later
Before #7130 this arm was one silent blank among several, so it did not stand out. After it, every other way an ObjectChart can come up empty explains itself — loading skeleton, chart-error alert box, chart-no-datasource, and now the chart-empty-state status box — and this is the last path that renders a blank tile and says nothing. The same reasoning the maintainer applied in hotcrm#1212 reads straight across: nothing on screen tells the reader whether the widget failed or is simply reporting a genuinely all-zero flow.
Note also that the two existing refusals in this file (hasNoCategoryKey, hasNoPlottableSeries) are both gated rows.length > 0 and render through the shared ChartRefusal shell with role="status" and a diagnosis code. That shell is the obvious seam for this case; it is right there in the same file, which is why the fix looks small. Whether the honest copy is "nothing to plot" or something naming the all-zero cause is a judgement this card does not pre-make.
⛔ What this card does NOT assert
It does not assert the blank is wrong. An all-zero flow may be a legitimate thing to draw as nothing, and the same restraint #7130 was filed under applies here: whoever takes it should render it and look at it first, and closing it measured-and-declined is a legitimate outcome.
Related
Filed unassigned by the implementer of #7130 (PR #7139) while sweeping the chart-side empty-result population. ⛔ Out of scope there and deliberately not fixed in that PR — different defect class, different file.
The measurement
packages/plugin-charts/src/AdvancedChartImpl.tsx, the sankey arm:The filter keeps only strictly positive values. So a sankey handed real rows whose measure is all
0, allnull, or negative produces no links and returns a barediv— no marks, no message, no role, nodata-chart-errorcode. Nothing at all renders.This is not the empty-result case #7130 covers.
ObjectChart's new branch is gated onfinalData.length === 0; herefinalData.lengthis greater than zero — the query succeeded AND returned rows — so the empty state correctly does not fire, and this blank survives it.Why it is worth recording now rather than later
Before #7130 this arm was one silent blank among several, so it did not stand out. After it, every other way an
ObjectChartcan come up empty explains itself — loading skeleton,chart-erroralert box,chart-no-datasource, and now thechart-empty-statestatus box — and this is the last path that renders a blank tile and says nothing. The same reasoning the maintainer applied in hotcrm#1212 reads straight across: nothing on screen tells the reader whether the widget failed or is simply reporting a genuinely all-zero flow.Note also that the two existing refusals in this file (
hasNoCategoryKey,hasNoPlottableSeries) are both gatedrows.length > 0and render through the sharedChartRefusalshell withrole="status"and a diagnosis code. That shell is the obvious seam for this case; it is right there in the same file, which is why the fix looks small. Whether the honest copy is "nothing to plot" or something naming the all-zero cause is a judgement this card does not pre-make.⛔ What this card does NOT assert
It does not assert the blank is wrong. An all-zero flow may be a legitimate thing to draw as nothing, and the same restraint #7130 was filed under applies here: whoever takes it should render it and look at it first, and closing it measured-and-declined is a legitimate outcome.
Related
ObjectCharthas 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 / PR fix(plugin-charts): a self-describing empty state for ObjectChart over an empty result #7139 — the empty-result branch this sits beside; that fix does not reach this path.series: []#4695 — the adjacent open finding on the same file (a cartesian chart handed no series binding at all). Different trigger, same family of silence.DataEmptyState— four packages now answer "is it broken or is it young" four different ways, and two rulings just fixed two of them locally #7132 — theDataEmptyStateconvergence card, which may absorb the copy question.