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
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
gauge / solid-gauge / bullet / kpi all render as a plain number — one missing dial/target renderer, deliberately shared by four spec chart types #4295
Measurement requested by the #4229 ruling (item 4): the QA run of objectstack#7515 recorded, as an untested caveat, that kpi / gauge / solid-gauge / bullet all render value-only, pixel-identical to metric — no dial, no arc, no bullet target band — and asked whether that is the same "no entry in the family map" shape #4229 fixed for combo, or four distinct gaps.
Neither. It is ONE shape, it is deliberate, and it is not #4229's shape. Filed as an observation so the answer is on the record; no fix is proposed here.
What was measured
All four names (plus metric) are routed to the single-value path by three coordinated places, with no per-type differentiation anywhere — nothing branches on gauge vs bullet vs kpi:
#4229 was a missing map entry: combo fell through CHART_TYPE_MAP[widgetType] ?? 'bar' and drew the wrong picture while the renderer was able to draw the right one. Here the routing is present and intentional, and the renderer genuinely cannot draw the right picture yet:
@objectstack/spec's own ChartTypeSchema groups them under Performance (single value ...) and calls gauge / solid-gauge / bullet "honest single-value variants pending a real dial/target renderer".
objectui#2942 moved them onto this path on purpose: they previously fell into the cartesian component map's || BarChart and rendered a bar shell whose series marks all returned null — grid, axes, tooltip and legend with no data marks, indistinguishable from an empty dataset. A number is the honest answer; an empty bar chart was not.
The actual gap
One missing capability — no dial / arc / bullet-target renderer exists — shared by four spec type names. Whoever builds it needs, in one piece of work: a radial gauge (gauge, solid-gauge), a bullet chart with its comparative target band (bullet), and a decision on whether kpi stays a metric synonym or gains its own treatment. bullet additionally has no authored target to draw yet: no target/threshold binding reaches this path today.
Until then the current behaviour is correct-by-design, and the spec comment is the contract. Recording it as a finding rather than a defect: nothing a user hits today is wrong, it is unbuilt, and the severity call belongs to triage.
Source
Measured in the #4229 worktree at origin/mainee66e2ebf, while DatasetWidget.tsx was open. Original caveat: objectstack-ai/objectstack#7515, checklist item chart-type-matrix.
Findings triage (grade): hold — finding stays. This is the measurement card the #4229 ruling asked for, and its value is the recorded answer: one deliberate, three-layer-coordinated shape (re-verified on origin/main @ 9461dd3: METRIC_TYPES at packages/plugin-dashboard/src/DatasetWidget.tsx:313 carries all four names, SINGLE_VALUE_CHART_TYPES at packages/plugin-charts/src/normalizeChartSchema.ts:102), not four instances of #4229's missing-map-entry defect. Whether gauge/bullet/kpi should render true dials is an appetite question with no measured user pull today; the card correctly proposes no fix. Held on the record so the next "gauge renders as a number" report resolves here instead of re-measuring.
Concentrated finding round (unified triage seat, 2026-08-17): closed not planned. The card's own conclusion is that the measurement request is answered: the four types share ONE deliberate single-value path (spec calls them "honest single-value variants pending a real dial/target renderer"), and the number is the honest render — the pre-#2942 bar-shell was the defect. What remains is building a dial/arc/bullet-target renderer, which is a feature investment with no measured pull on record; per startup scope discipline that earns appetite before a queue slot, not a standing card. The answer this card exists to record is preserved here in the closed record.
Reopen trigger: a user/app actually needs gauge/bullet/kpi visuals (measured pull), or the maintainer allocates appetite for the renderer — reopen and route as a Feature, one piece of work covering all four types (radial gauge, bullet band, and the kpi disposition), per this card's "actual gap" section. Maintainer veto of this closure: reopen is free.
Activity
claude commentedon Aug 11, 2026
Findings triage (grade): hold —
findingstays. This is the measurement card the #4229 ruling asked for, and its value is the recorded answer: one deliberate, three-layer-coordinated shape (re-verified onorigin/main@9461dd3:METRIC_TYPESatpackages/plugin-dashboard/src/DatasetWidget.tsx:313carries all four names,SINGLE_VALUE_CHART_TYPESatpackages/plugin-charts/src/normalizeChartSchema.ts:102), not four instances of #4229's missing-map-entry defect. Whethergauge/bullet/kpishould render true dials is an appetite question with no measured user pull today; the card correctly proposes no fix. Held on the record so the next "gauge renders as a number" report resolves here instead of re-measuring.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-steve commentedon Aug 17, 2026
Concentrated finding round (unified triage seat, 2026-08-17): closed not planned. The card's own conclusion is that the measurement request is answered: the four types share ONE deliberate single-value path (spec calls them "honest single-value variants pending a real dial/target renderer"), and the number is the honest render — the pre-#2942 bar-shell was the defect. What remains is building a dial/arc/bullet-target renderer, which is a feature investment with no measured pull on record; per startup scope discipline that earns appetite before a queue slot, not a standing card. The answer this card exists to record is preserved here in the closed record.
Reopen trigger: a user/app actually needs gauge/bullet/kpi visuals (measured pull), or the maintainer allocates appetite for the renderer — reopen and route as a Feature, one piece of work covering all four types (radial gauge, bullet band, and the
kpidisposition), per this card's "actual gap" section. Maintainer veto of this closure: reopen is free.Generated by Claude Code
feat(sdui-parser): warn on dashboard widget options keys no renderer …
feat(sdui-parser): warn on dashboard widget options keys no renderer …