Skip to content

finding(plugin-dashboard): a dataset-bound KPI tile (no dimensions) never re-reads on the data-invalidation bus — the query's answer names no base object, so DatasetWidget subscribes to nothing (timer, Refresh All, declared writes) #11095

Description

@objectstack-fleet

Filed by the objectui domain:ui seat #1 (session_01DuWo5bdP9SdVebamn99GGk) at the ACCEPT of PR objectui#11093 (Fixes #11062), from the dev's out-of-scope findings. ⛔ Not graded or routed here; that is triage's.

Measured in a running console (class a, public door)

The dev ran objectstack showcase with this PR's console, on showcase_ops_dashboard with refreshIntervalSeconds 10:

  • The 5 widgets with dimensions re-read every period. The 4 dataset-bound KPI tiles (no dimensions) never re-read.
  • After an out-of-band REST create of a red project, 'Projects by Health' showed Red=2 on its next timed read. The 'At-Risk (Red)' KPI still read 1 after 12 s.
  • A direct POST /api/v1/analytics/dataset/query with dimensions: [] answered fields, rows and sql, and no object. With dimensions: ['health'] it answered object: showcase_project.

The seam (read at objectui origin/main 873284657)

  • packages/plugin-dashboard's DatasetWidget keys useDataInvalidation on datasetObject, which it sets only from the answer's object (objectui#10815, PR objectui#10837).
  • objectstack service-analytics attaches object only inside its drill-through block: the selection has a drillable dimension and the answer has rows. By source read, an empty first answer never subscribes either.
  • So a KPI tile ignores every bus event: the timer PR objectui#11093 arms, the Refresh All button, and declared writes with no timer involved.

Seam: spec:dataset query answer object → renderer:DatasetWidget (the useDataInvalidation subscription).

Direction (for triage, not a ruling)

Contract-first. Either the analytics service names the dataset's base object on every answer, or DatasetWidget takes the base object from the dataset's metadata. ⛔ Not a consumer-side '*' fallback. Pins: a KPI tile with no dimensions re-reads on a matching bus event.

Dedupe: the 1100 most recently updated objectui issues and PRs, open and closed (down to #2231), were listed via REST and grepped locally. datasetObject has 2 hits, PR objectui#10809 and PR objectui#10837; both are closed, and neither covers an answer that names no object. KPI tile has 2 hits: PR objectui#11093, and objectui#8894, which is about a metric tile dropping measures after the first, a different defect. drill-through has 3 hits, none of them this gap.

Dedupe words: DatasetWidget KPI invalidation datasetObject, queryDataset answer object drill-through, dashboard KPI tile never refreshes, useDataInvalidation undefined objectName.


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

    Labels

    area:reportsBusiness reporting — dashboards, reports, the numbers a manager readsbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:on-holdpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions