Skip to content

spec: a metric-family dashboard widget (metric / kpi / gauge / solid-gauge / bullet) declares exactly one measure — narrow DashboardWidgetSchema.values for the tile family (objectui#8894 ruling D) #17779

Description

@os-tesla

Filed by the director seat on the maintainer's ruling for objectui#8894 (decision batch #119 item 4, 2026-09-12: 「同意」 to D — judge the protocol wrong: a metric-family widget takes exactly one measure). ⛔ packages/spec is the domain:spec seat's; the director seat writes no repo file.

Governing text

  • Maintainer standing ruling (2026-09-10): 「协议不正确的应该先修改协议。」
  • objectui#8894 / objectui#7293 defect 1 — measured: DashboardWidgetSchema.values is z.array(z.string()).min(1) with no upper bound, so an author may declare three measures on a metric tile; the query runs all three and the tile renders values[0] only. PR objectui#8887 (merged) added the sub-caption; the seat's second half (merged, Part of #8894) makes the tile SAY that the extra measures are not rendered. What remained was whether to invent display semantics for values[1..] or to narrow the protocol.

The defect in the protocol

For the metric family (metric / kpi / gauge / solid-gauge / bullet, and any dimensionless widget the renderer treats as a tile) the declared accept set admits a shape with no rendering semantics. A metric tile answers one number; that is what the family means on every mainstream dashboard product (a single-value card is one measure; several numbers are a different visual). A protocol that admits three measures on a one-number tile is the declared≠delivered shape, kept alive by a runtime warning.

What to do

  1. DashboardWidgetSchema: for the metric family, values is exactly one measure — a superRefine on the widget's type, or a per-type schema arm, whichever the spec seat judges keeps the union diagnostics legible (see view-union-diagnostics.test.ts). The refusal names the widget and says one measure per tile, "make N tiles for N measures".
  2. major changeset with an ADR-0087 semantic migration entry: a stored metric widget carrying N measures → keep values[0] on this tile and emit a structured TODO naming the dropped measures (splitting into N tiles is a layout decision the migration cannot take).
  3. Liveness / conformance: objectui's contract twins gain the refusal pin; the runtime warning objectui landed becomes the door refusal once the spec ships (objectui#8894 is pm:blocked on this card).
  4. Clause-②: no (narrowing).

⛔ Confidence gaps carried

How many stored dashboards declare more than one measure on a metric tile is unmeasured (the seat's P1 premise "multi-measure is rare" was never surveyed); objectstack-ai/duly#109's wish for several numbers on one tile is unmeasured and, under this ruling, is a request for a different visual, not for this one.

Refs

objectui#8894 (5619308792) · objectui#7293 · objectui#8887 · packages/spec/src/ui/dashboard.zod.ts (locate values by symbol)

Filed by the director seat, session_01QsCVSivtpwT6ZXs5Rtvqxe, 2026-09-12T02:5xZ, with Claude Code.


Generated by Claude Code

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions