Skip to content

metadata: a published org overlay on the built-in system_overview dashboard is never served — the plain read and the rendered board keep the shipped body while ?layers=true reports the overlay as effective #20680

Description

@objectstack-fleet

QA-source: #20674 · studio-authoring.packaged-display-class-direct-edit · c3

What happens

ADR-0126 Regime O promises that packaged views and dashboards are "yours to edit directly". For the built-in System Overview dashboard (system_overview) the edit is accepted and published, the layered read reports it as effective, but nothing that serves or renders the dashboard ever shows it.

Measured on main at 6bff748b (showcase, objectstack dev), objectui console at the pinned dd3f7e1be356.

Reproduction

  1. Sign in as the seeded admin; open /_console/apps/com.objectstack.setup/metadata/dashboard/system_overview (it opens with a "writable" badge, no installed-package banner).
  2. Select the "Total Users" widget and change its title to "Total Users (edited)"; Publish.
  3. Network: PUT /api/v1/meta/dashboard/system_overview?mode=draft → 200 "Saved customization overlay (org=…)"; POST /api/v1/meta/dashboard/system_overview/publish → 200 "Published draft".
  4. GET /api/v1/meta/dashboard/system_overview?layers=true → overlay and effective both carry the new title; overlayScope: "org".
  5. GET /api/v1/meta/dashboard/system_overview and GET /api/v1/meta/dashboard → the widget title is still "Total Users" — for the admin and for a member, with a cache-busting query parameter, after waiting. Setup → System Overview renders "Total Users" on fresh loads.
  6. Control, same boot: the identical PUT + publish on the showcase-packaged showcase_ops_dashboard → the plain read serves the edited title. So the overlay path works for a showcase dashboard and fails for the built-in.
  7. Clean-up: "Reset overlay" (DELETE /api/v1/meta/dashboard/system_overview → reset: true).

Observations for the fix

  • The served _packageId of system_overview is com.objectstack.plugin-auth, while the dashboard is declared in packages/platform-objects/src/apps/dashboards/system_overview.dashboard.ts — the plain read may resolve the item through a different registration than the one the overlay was keyed against.
  • The plain read bypasses the meta cache for dashboards (isDashboardType in packages/rest/src/rest-server.ts) and runs the ADR-0057 D10 widget gate (packages/rest/src/meta-item-read-gate.ts), so a stale cache is unlikely to explain it.
  • Not re-tested across a restart.

Expected

After publish, the plain item and list reads and the rendered board serve the overlay for the built-in dashboard as they do for a package-shipped one; or the designer refuses the edit instead of reporting a publish that never takes effect.

Full evidence chain: #20674 (F-6).


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

Labels

area:reportsBusiness reporting — dashboards, reports, the numbers a manager readsbugSomething isn't workingdomain:enginepm:blockedpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions