Skip to content

ui: dataset callers send the caller's package (D3) instead of the exact qualifier, and the report date dimension and chart option-colour probes read by package (after #32310) #32311

Closed
1 of 1 issue completed

Description

@objectstack-fleet

domain:ui#2 · os-support-ai · session_01WGufzge87Pae2h7uSQzX8H

Filed by the ui#2 seat from the epic seat's draft (epic red-line review 6775085574 on #32309).

Blocked-by: #32310

④ coordination card: a child of the ADR-0150 epic #31527. Blocked-by: #32310.

Do:

  1. The dashboard, report and list-view chart callers fix(ui)!: dashboards, reports and dataset charts send their package on dataset queries (ADR-0150 D5) #32309 wired send the caller arm of analytics + metadata-protocol: the dataset query door and the dataset by-name read take the caller's package and resolve by D3 from it, so a package's dashboard reads its dependency's dataset (ADR-0150 D3; after #32077) #32310, not ?package=. A package-less item still sends nothing.
  2. The two sibling by-name reads that still go bare send the same caller arm:
    • useReportDateDimension (GET /meta/dataset/NAME, plugin-report ReportDateRange.tsx);
    • ObjectChart's option-colour probe.
      Both are best-effort today, so a 409 degrades them silently.
  3. Pins for each caller: the item's package is sent as the caller; a dependency's dataset renders; CONTROL: a package-less item sends nothing.

Epic red-line review before landing.

Activity

  1. added
    enhancementNew feature or request
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    domain:uiDomain lane — seat card indexed by label:pm:seat
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Nov 10, 2026
  2. objectstack-fleet commented on Nov 10, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: confirmed · domain:ui · p2 · pm:blocked · 2026-11-10T18:56Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 11, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: unblocked → pm:queue · domain:ui · p2 · 2026-11-11T00:05Z

    ⛔ Not a claim.


    Generated by Claude Code

  4. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 11, 2026
  5. objectstack-fleet commented on Nov 11, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · huangyiirene · session_01J8VVAmxB38cjBXwr9FZGyt

    Claim: PM loop round 4 · 2026-11-11T05:06Z
    Session: session_01J8VVAkosBv7FAKQdjiwYEd (card thread, dev) · seat session_01J8VVAmxB38cjBXwr9FZGyt
    Account: huangyiirene
    Branch: claude/project-thread-l26e7m (a card thread can push only its designated branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-32311
    Domain: domain:ui
    Seat: domain:ui#3
    File surface: ui/packages/plugin-dashboard/src/**, ui/packages/plugin-report/src/**, ui/packages/plugin-charts/src/ObjectChart.tsx, ui/packages/app-shell/src/views/objectViewListRenderer.tsx, ui/packages/data-objectstack/src/index.ts, ui/packages/core/src/utils/served-package.ts, their tests, root .changeset/. ⛔ No server code, no packages/**.
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate for this surface), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the dataset callers PR #32309 wired, plus the report date-dimension read and the chart option-colour probe, send the caller arm callerPackage from PR #32337 (#32310) in place of ?package=; a package-less item sends nothing; a 409 is never retried bare. Epic red-line review by epic:#31527#1 before landing.
    Thread-read: 6782833532
    Premise: holds (seat reading: the code path the card names is present on origin/main 26f4e6d8; the thread reproduces on main before editing and stops on a false premise)
    Serial constraints cleared: domain:ui#2 is offline since 2026-11-11T01:52Z with nothing in flight (Notify 6784658044 on #32181); no other domain:ui seat holds a live Claim:. Sibling domain:ui#3 in flight: #31912 (record-currency renderers: fields, plugin-grid, plugin-list, plugin-detail, plugin-form, i18n currency.ts, Studio CurrencyConfigField.tsx), #32311 (dataset callers: plugin-dashboard, plugin-report, ObjectChart.tsx, objectViewListRenderer.tsx, data-objectstack), and the #32021 item 4 + #32157 fold (FirstRunChecklist.tsx, Home, the not-found states); file surfaces disjoint.

    Dispatch order: /mnt/project-files/ui-seat3/order-32311.md + common-tail.md (project files of the seat's project), carried in the thread's opening message.

  6. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 11, 2026
  7. objectstack-fleet commented on Nov 11, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · huangyiirene · session_01J8VVAmxB38cjBXwr9FZGyt

    Release: 2026-11-11T05:24Z · claim 6787589805 · scope: the dataset callers' caller arm (claim 6787589805)

    • Why: the maintainer ruled at 2026-11-11T05:23Z that only p1 work is taken for now (project thread, 「暂时只处理 p1 任务」). This card is below p1, so the seat stops its card thread about 15 minutes after dispatch, before any PR.
    • State: pm:dispatched → pm:queue, assignee cleared. Nothing was merged. If the card thread left a premise reading, it is in the seat's project files under card-32311 (or card-32021-32157 for the fold).
    • Resume: the order stays at /mnt/project-files/ui-seat3/ in the seat's project files. Any seat may claim this card again once the p1-only rule lifts.
  8. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Nov 11, 2026
  9. objectstack-fleet commented on Nov 11, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · huangyiirene · session_01J8VVAmxB38cjBXwr9FZGyt

    Resume-from: claude/project-thread-l26e7m @ b30ac853 · 2026-11-11T05:25Z · release 6787852535

    The card thread had pushed before the stop arrived: the fix, its pins, a changeset and a merge of main. No PR was opened and no gates were recorded. The thread's own reading lists 10 ablations, all red, and two points that are still open: the Clause-② line, and #32077's pending BREAKING changeset. A resumer starts from that head, re-reads the diff, runs the derived gates, and opens the PR.

  10. objectstack-fleet commented on Nov 11, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-lizheng · session_012MmDsRT6hvZsQH9dTzn4CA

    Claim: PM loop round 1 · 2026-11-11T13:16Z
    Session: session_012MmDsRT6hvZsQH9dTzn4CA
    Account: os-lizheng
    Branch: claude/project-thread-l26e7m (resumed, see Resume-from)
    Worktree: objectstack-issue-32311
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/packages/plugin-dashboard/src/**, ui/packages/plugin-report/src/**, ui/packages/plugin-charts/src/ObjectChart.tsx, ui/packages/app-shell/src/views/objectViewListRenderer.tsx, ui/packages/data-objectstack/src/index.ts, ui/packages/core/src/utils/served-package.ts, their tests, root .changeset/; ⛔ no server code, no packages/** (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: default tier (dispatch-gates --tier: "no path-derived mandate"), effort: high
    Clause-②: no — the dev measures it on the built declaration closure (the resumed thread left it open), and the seat amends this line if the measured shape differs
    Metadata-protocol: none
    Responsibility: the dataset callers PR #32309 wired, plus useReportDateDimension and ObjectChart's option-colour probe (objectstack ui/), read by name without the caller arm callerPackage of PR #32337 (#32310) | the platform door exists since PR #32337 | any item whose dataset a dependency holds; a 409 degrades the two best-effort reads silently
    Thread-read: 6787875809
    Premise: holds — resumed from the pushed head; the dev re-reads the diff against origin/main 7d82b2dab8 before building on it
    Resume-from: claude/project-thread-l26e7m@b30ac853279c77af08f04898dd6ed25a065e5f68
    Serial constraints cleared: no other domain:ui seat holds a live Claim: (every open domain:ui card read unassigned at the probe, 2026-11-11T13:16Z). Same batch, this seat, file surfaces disjoint at file level: #32426 (ui/packages/auth test), #32367 (app-shell useNavActionDispatch.ts), #32311 (dataset callers: plugin-dashboard, plugin-report, ObjectChart.tsx, objectViewListRenderer.tsx, data-objectstack, core served-package.ts), #32021+#32157 (Home first-run and not-found surfaces, locale packs), #32334 (plugin-grid useWholeSetSummary.ts). Each merges main before its PR and again after a sibling lands.
    Epic red-line review by epic:#31527 before landing (card body).

  11. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 11, 2026
  12. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-lizheng · session_012MmDsRT6hvZsQH9dTzn4CA
    os-dev-report

    {
      "issue": 32311,
      "status": "done",
      "branch": "claude/project-thread-l26e7m",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/32629",
      "session": "session_012MmDsRT6hvZsQH9dTzn4CA",
      "premise_still_valid": true,
      "summary": "Resumed from b30ac853 (Resume-from 6787875809); every inherited commit was re-read hunk by hunk and kept. Dashboard widgets and their batch, report selections, the list-view chart query, useReportDateDimension (GET /meta/dataset/NAME) and ObjectChart's option-colour probe now send the item's served package as ?callerPackage= (ADR-0150 D3; spelling verified in packages/rest analytics-routes.ts and meta-item-read-gate.ts on origin/main, unchanged after both merges). A package-less item or an inline draft sends nothing, and a 409 is never retried bare. Added this resume: a pin for the date read's caller-keyed identity (ablation A7 had stayed green without it), a changeset paragraph on the pending 32077 BREAKING note, a module-top @objectstack/lint import that check:test-source-alias demanded for the edited app-shell test, and a test-typing fix. CLAUSE-② MEASURED: the four published packages were built from this branch and from origin/main source and their dist declarations diffed. The only change reachable from a package exports entry is @object-ui/data-objectstack ObjectStackAdapter.queryDataset and queryDatasetBatch options gaining an optional callerPackage (index.d.ts and index.d.cts). DatasetQueryOptions and useReportDateDimension's optional third parameter change only in internal .d.ts files no '.' entry re-exports; nothing narrows. So Clause-②: yes (widening), not the claim's provisional no: the seat should amend the claim line. Declarations were byte-identical again after each origin/main merge. #32077: its changeset is still pending on main (3452dec21), and its BREAKING TO-line names #32311 as the follow-up that restores the dependency case. This PR's changeset must reference it, and does: it names what is restored and what stays refused as outside-closure (a holder outside P's closure; an environment-authored dataset), with the fix. Amending 32077's own note is outside this claim's changeset file and is the seat's call (open_questions). EPIC RED LINES (epic:#31527, from review 6775085574): (1) never loosen: no client refusal loosened; the extra served set is exactly the server's D3 resolution that ruling named as target; sentinels still name no package; data-objectstack ruling markers 46 on main, 46 on head, 0 diff lines touch one. (2) never guess: no bare retry; both arms set are both sent, so the server answers 400 and the client never picks; the caller is in the query signature, the coalescer key and the date-read key. (3) releasable: changeset declares Clause-② yes (widening) and Metadata-protocol none at patch, plus the 32077 paragraph.",
      "tests": "Final head 554aa2daf, pnpm --dir ui exec vitest run --maxWorkers=2 in five locked chunks: data-objectstack 119/119 files (1374 passed); plugin-report + the app-shell file 34/34 (336 passed, 7 skipped); plugin-charts 103/103 (1346 passed, 9 skipped); plugin-dashboard 102/102 (919 passed, 6 skipped) + 103/103 (1079 passed). Total 461/461 files, 5054 passed, 22 skipped; each chunk VERDICT command-exit 0. Ablations via scripts/ablation-replace.mjs (anchor hit and landed, restore blob == HEAD, git diff HEAD empty; ui aliases @object-ui/* to src, so no rebuild between legs): A1 adapter drops callerPackage 5 failed/68; A2 widget sends packageId 4/78; A3 coalescer key drops caller 1/7; A4 report sends packageId 5/57; A5 report does not pass package to date read 2/12; A6 date hook reads bare 2/12; A7 date read key ignores caller: green 12/12 before the new pin, 1 failed/13 with it (redone on bd6966dc8 after the pin's typing fix); A8 chart probe bare 2/10; A9 chart query sends packageId 1/3; A10 chart probe non-2xx guard deleted 10/10 green (neutral by construction: an ADR-0112 409 envelope names no object).",
      "gates": "Local, final head 554aa2daf: closure build of the four published packages 55/55, lock VERDICT command-exit 0. type-check of data-objectstack, plugin-dashboard, plugin-report and plugin-charts: all four script names echoed, VERDICT command-exit 0. pnpm --dir ui exec vitest run scripts/: 171 files passed, 2 skipped, VERDICT command-exit 0. dispatch-gates --ran (exit-annotated record): 38 derived, 37 run each :: exit 0, 1 NOT-MEASURED, 0 UNRUN, exit 0. NOT MEASURED: pnpm check:type-check-debt (builds its own closure under the lock, past the 10-minute foreground cap; CI's Lint & Repo Gates runs it). NOT MEASURED: app-shell type-check (TS2307 on workspace deps unbuilt in this worktree, not on the diff; CI's Type Check UI covers it). Also run: pnpm check:changeset-fixed exit 0; pnpm --dir ui check:new-line-citations 0 new, exit 0. Earlier head 6dd7ba2ad: check:test-source-alias red on the edited app-shell test (dynamic @objectstack/lint inside a clocked window), fixed by a71af13d0, green since. CI on 554aa2daf at report time: Governed Surface Queue Guard=success; Lint, Type Check, Check Changeset, Check PR Size and PR-body guards in_progress; queue and schedule legs skipped. Not waited on.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub call; reads went through gh api REST GETs",
      "api_writes": "2 relay strokes — fleet-write pr_create (POST /repos/objectstack-ai/objectstack/pulls draft; POST /repos/objectstack-ai/objectstack/issues/32629/assignees os-lizheng), and post-stamped os-dev-report (POST /repos/objectstack-ai/objectstack/issues/32311/comments). git push is not counted.",
      "open_questions": [
        {
          "question": "The pending 32077-dataset-query-package changeset's BREAKING TO-line refuses a package item whose dataset only a dependency holds. Once this PR lands, that is no longer true for the dependency case if both ship in one release. Should that note be amended?",
          "options": [
            "A — leave 32077 as is; this PR's changeset names the reversal and the residual outside-closure refusals (done here). Cost: the release text holds a BREAKING sentence and its reversal side by side. Work: none.",
            "B — the seat amends 32077's TO-line as a DELIBERATE CORRECTION in a docs-only PR (or this one, widened), naming outside-closure as the residual break. Cost: one more changeset edit and a red Check Changeset declared as deliberate. Work: small."
          ],
          "recommendation": "B, before the release that consumes both, if that release is the next one. Axes: 实际业务需求 (an upgrader reads one accurate BREAKING line); 项目长远合理性 (a published CHANGELOG entry is never corrected later); 防 AI 写错 (an agent grepping the tarball meets a refusal that no longer happens); 创业阶段不扩散需求 (one sentence, no code). If a release cuts between the two, A is right, because then 32077 shipped as written."
        }
      ],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: none · noted in PR #32629 Acceptance notes, not filed (dormant): app-shell ReportView.tsx handleDatasetDrill reads metadataClient.get('dataset', NAME) bare, only on the older-server branch with no drill metadata; current servers take the fast path. Dedupe words: ReportView drill dataset bare read, handleDatasetDrill callerPackage"
      ],
      "line_budget": "n/a — no skills/** file touched",
      "files_changed": "19 files, +610/-119 vs origin/main 3452dec21: .changeset/32311-dataset-caller-package-ui.md; ui/packages/data-objectstack/src/{index.ts,queryDataset.test.ts}; ui/packages/plugin-dashboard/src/{DashboardGridLayout.tsx,DashboardRenderer.tsx,DatasetWidget.tsx,datasetQueryBatch.ts,__tests__/DashboardRenderer.datasetBatch-32165.test.tsx,__tests__/DatasetWidget.test.tsx,__tests__/datasetQueryBatch.test.ts}; ui/packages/plugin-report/src/{DatasetReportRenderer.tsx,ReportDateRange.tsx,__tests__/DatasetReportRenderer.test.tsx,__tests__/DatasetReportRenderer.dateRange-25873.test.tsx}; ui/packages/plugin-charts/src/{ObjectChart.tsx,ObjectChart.optionColors.test.tsx,ObjectChart.datasetMeasureLabel.test.tsx}; ui/packages/app-shell/src/views/{objectViewListRenderer.tsx,ObjectView.chartConfigForward-7891.test.tsx}. No packages/**, no server code.",
      "deviations": "(1) Claim's Clause-② line reads no; measured yes (widening); PR body and changeset carry the measured value, and the claim line is the seat's to amend. (2) Lock slot issue-32311 was left parked (pid 0, about 5h old) across the pause; the entry point treats an over-age parked slot as dead, and this round used a fresh slot, issue-32311-r3, in the foreground only. (3) Two earlier rounds hit the 10-minute foreground cap: one locked build and one test run were moved to background by the harness, and one locked test chunk was killed by my outer timeout (NOT MEASURED, rerun). Final-head runs were all foreground, using OS_VERIFY_LOCK_WAIT to fit. (4) A stray 5-byte file /test2.pid (a pid number) is left at the container root. A shell variable scoping slip wrote it, and the harness safety check refused its removal; a person should delete it. (5) app-shell type-check and check:type-check-debt were not measured locally (declared narrowing; CI runs both). (6) Narrower test scope than all of app-shell: only its one edited test file ran locally, because its only source change is a comment."
    }
  13. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-lizheng · session_012MmDsRT6hvZsQH9dTzn4CA

    Claim amendment: 2026-11-12T14:57Z · claim 6796848708 · Clause-② and file surface as measured on PR #32629 (head e0d3c546d)
    Branch: claude/project-thread-l26e7m (unchanged)
    Clause-②: yes
    File surface (as measured): ui/packages/data-objectstack, plugin-dashboard, plugin-report, plugin-charts, and app-shell objectViewListRenderer.tsx with its test; root .changeset/. core served-package.ts is not touched.

    • Clause-② correction. The claim's provisional no is corrected to yes (widening). The dev measured it on the built declarations: @object-ui/data-objectstack queryDataset / queryDatasetBatch gain an optional callerPackage. The epic red-line read 6827072400 names this as nit 6.
    • Contract review. The TIER_DEFAULT record is on the PR (6822019183, at e0d3c546d). It is re-recorded at the head of the patch round now in flight: a main merge plus one changeset sentence (nit 1).
    • Everything else in the claim stands.
  14. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · os-lizheng · session_012MmDsRT6hvZsQH9dTzn4CA

    Landed · 2026-11-12T15:42Z

    Reading Value
    PR #32629 MERGED as 66fa70d6044659ad05e1e5eff4d4e85730a46f6b (Fixes #32311)
    origin/main content callerPackage has 8 hits in ui/packages/data-objectstack/src/index.ts

    ACCEPT → PR #32629 comment 6827412731 · contract review TIER_DEFAULT PASS 6827391832 · epic red-line PASS-with-nits 6827072400 (epic:#31527#1). Card closed as completed by the merge; pm:dispatched comes off in this stroke, assignee cleared. Epic follow-ups (nits 2/4/5) are #32760, nested here and parked per ruling 6824949405. The serial hold of #32462 behind this card (same test file) is cleared.

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:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions