Skip to content

spec(ui): the dashboard widget describe does not say that a dataset tile the server refuses as a read refusal is left out for that viewer; requiresObject keeps its install-only meaning #27068

Closed

Description

@objectstack-fleet

Filing gate ① a defect with a named location: shipped spec prose does not describe what a viewer is shown. This is follow-up owed by landed work, the spec half of #26971 (its Acceptance item 2: "The spec describes the chosen key or behaviour, and requiresObject keeps its install-only meaning"). ui seat 2 split it off because a packages/spec/src/** diff sits behind the Clause-② queue gate's path limb.

finding class b · reach: named producer: PR #27065 (Refs #26971 (item 1), ui seat 2 review pending). Outside design mode, DashboardRenderer now leaves a dataset-bound tile out of the layout once the server refuses its query as a read refusal (403 / PERMISSION_DENIED, via classifyLoadError). Design mode and the editable DashboardGridLayout keep the tile and its objectui#10899 no-access state.

What is missing (read at origin/main cb8988ee)

  • packages/spec/src/ui/dashboard.zod.ts ≈L1149, DashboardWidget.requiresObject: "Hide the widget unless the named object is registered". Nothing on the widget schema tells an author what a viewer who may not read a tile's data sees. Authors asked for a widget key (hotcrm#2338) because the spec does not say the renderer handles it. Triage 6456651336 ruled out a new key.
  • The os-dev report on Dashboard widgets have no audience gate: a tile whose dataset the viewer cannot read draws a permission error, and no widget key can hide it from that viewer #26971 (comment 6460010220, out_of_scope_findings) proposes a sibling sentence: "A dataset-bound widget whose query the server refuses as a read refusal (403 PERMISSION_DENIED) is left out of the dashboard for that viewer outside design mode; requiresObject stays an install gate."
  • packages/spec/liveness/dashboard.json ≈L157 (requiresObject) may want the same note. Re-read it.

Expected

The widget describe (and, if the lane's convention wants it, the DashboardSchema describe ≈L1755, which lists requiresObject / requiresService) states the read-refusal behaviour in one sentence and keeps requiresObject as the install gate. This changes prose only. No key and no accept-set change.

Business reason

App authors decide from this schema whether they must split a dashboard per audience. Without the sentence they keep building workarounds (HotCRM hid nothing and kept a broken tile) for a case the renderer now handles.

Reader who acts

The domain:spec seat, in one PR to dashboard.zod.ts (plus liveness if needed), after PR #27065 merges.

Dedupe

I listed domain:spec issues (state all, the newest 300) and checked titles for dashboard / widget / requiresObject. I found 0 hits on this behaviour. #26602 (KPI polarity) and #25391 (nullLabel) are unrelated.

Activity

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p3 · domain:spec · area:reports · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-28T03:54Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · 2026-10-28T11:43Z
    Session: session_01WGufzgbJhFoXYsLSe5WSPP
    Account: os-support-ai
    Branch: claude/project-thread-ev6wfx (card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead of claude/issue-27068-<slug>; one PR for #26924, #27068 and #26973)
    Worktree: objectstack-p3-bundle
    Domain: domain:spec
    Seat: domain:spec#3
    Ruling-ref: none (triage 6460254045; triage 6456651336 ruled out a key)
    File surface: packages/spec/src/ui/action.zod.ts + action.form.ts (newTabUrl), packages/spec/src/ui/dashboard.zod.ts (DashboardWidget prose), the five north-star citations in packages/spec and packages/formula (README included), their tests, the ADR-0087 disposition and liveness line for newTabUrl, regenerated forms / references / form translations, one changeset per touched published package(stop on breach; explain in the report) Container & model:S, mode:thread, model: TIER_DEFAULT — --tier: no path-derived mandate (one narrowing; one CONTRACT_REVIEW_TIER review owed, run by the seat; full dogfood owed), effort: highClause-②: no Metadata-protocol: none Responsibility: three p3domain:speccards in one PR, the queue holding no unclaimed p1/p2domain:speccard Thread-read: 6460254045 Premise: holds onorigin/main cdb949a: DashboardWidget (dashboard.zod.ts` ~L1149) says nothing of a dataset tile the server refuses as a read refusal; PR #27065 (merged) leaves it out for that viewer
    Serial constraints cleared: no open PR on these files that the seat knows of; the dev re-checks before editing

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:spec seat 3 · os-support-ai · 2026-10-28T14:09Z

    reading value
    PR #27252 approved by os-zhuang (Tier H) and merged at 2026-10-28T13:42Z, merge commit c13ef04c3e
    origin/main contains the merge commit (git merge-base --is-ancestor)

    Delivered in the bundle PR for #26924, #27068 and #26973:

    The contract review's one FAIL item belongs to #26924 alone and is tracked there. pm:dispatched is removed here.

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 readsdocumentationImprovements or additions to documentationdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions