Skip to content

lint: os validate / os build refuse a report that reads a dataset its declared dependency holds (chart-dataset-unknown reads stack.datasets alone), while the runtime serves it — report half of #32967 #33128

Closed

Description

@objectstack-fleet

triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

Filing gate: ① a product defect with a named location. This is work that #32967 named and PR #33121 does not carry; it was carried to triage by epic:#31527#2 (6857990387) from review#1's boundary flag on PR #33121 (6857932402).

What happens

#32967 makes authoring resolve a dataset reader through the reader's declared closure, as the runtime does. Its summary names dashboards, reports and joined blocks. PR #33121 fixes dashboards only.

For reports, chart-dataset-unknown (packages/lint/src/validate-chart-bindings.ts) still reads stack.datasets alone. On the per-package pass, a report that reads a dataset held by a package it declares as a dependency is refused by os validate / os build, while the runtime serves that report. So authoring is stricter than the runtime, and a valid package will not build.

Disposed without a card, by the epic seat on review#1's measurement: card item 2 (an app action starting a module flow). Neither side refuses it there, so authoring and runtime agree for flows.

Why it matters

An app built from modules (the #32929 shape) cannot build a report on a sibling module's dataset, even though it would work at runtime. The refusal is wrong, so its remedy text cannot help.

Do

Reader

domain:server, the same lane as #32967. packages/lint is anchored to spec, but the parent and its resolver sit in server's PR.

Dedupe

chart-dataset-unknown: 0 open framework cards (only #32929 and #32967 as context). report dataset declared dependency: none.

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 13, 2026
  2. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: grade · domain:server · p2 · pm:queue · 2026-11-13T15:57Z

    ⛔ Not a claim.

  3. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#31527#3 · os-tesla · session_01L9qibzECS2npZFku4956Um

    Claim: PM loop round 1 · batch 1 of the maintainer's order 6866786021 · 2026-11-13T23:03Z
    Session: session_01L9qibvtG32iBab1PR1fpR6 (card thread; seat session_01L9qibzECS2npZFku4956Um)
    Account: os-tesla
    Branch: claude/project-thread-nlni1h (the card thread's harness-pinned branch; the thread can push only this name)
    Worktree: objectstack-issue-33128
    Domain: domain:server
    Seat: epic:#31527#3
    File surface: packages/lint/src/validate-chart-bindings.ts, packages/lint/src/validate-report-runtime-filter.ts, packages/core/src/package-scoped-resolution.ts (export only, if needed), their tests, root .changeset/ (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate), effort: xhigh (epic child)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: platform code in objectstack (packages/lint chart-dataset-unknown reads stack.datasets alone); the platform path that already covers it is packages/core/src/package-scoped-resolution.ts (the dashboard half, PR #33121); reached by an app built from modules with a report on a declared dependency's dataset — no user seen yet
    Thread-read: 6858113533
    Premise: holds (main read at 47f6c939; the thread re-measures first, per the order)
    Serial constraints cleared: none in flight on these files; PR #33121 (dashboard half) merged at 40c73a8f

    Order: /mnt/project-files/epic-31527-3/r2026-11-13/dispatch-33128.md under that folder's FRAME.md (the coordinator pasted both into the thread's opening message). Contract review: this seat, at CONTRACT_REVIEW_TIER.


    Generated by Claude Code

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

    @objectstack-fleet
    ContributorAuthor

    epic:#31527#3 · os-tesla · session_01L9qibvtG32iBab1PR1fpR6
    os-dev-report

    {
      "issue": 33128,
      "status": "done",
      "branch": "claude/project-thread-nlni1h",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/33171",
      "session": "session_01L9qibvtG32iBab1PR1fpR6",
      "premise_still_valid": true,
      "summary": "Measured at origin/main 47f6c939: on the per-package pass a report over a declared dependency's dataset was refused chart-dataset-unknown ('Declared datasets: (none).'). validate-chart-bindings.ts now resolves every chart binding through indexArtifactDatasetResolution (the dashboard rule's resolution, over packageResolutionClosure), imported, not copied, and takes the twin's refusal (error naming holders and the open fix) and unverified (warning) sentences for a name the runtime refuses the reader; two closure holders are refused naming both. validate-report-runtime-filter.ts re-judged: it already reads the same closure-aware index since PR 33121, so it does not share the defect; unchanged. The order names packages/core/src/package-scoped-resolution.ts as the resolver; the dashboard half actually resolves in packages/lint (indexArtifactDatasetResolution), which is what this PR reuses; core is not edited.",
      "tests": "head 60edc5ee: pnpm --filter @objectstack/lint build + typecheck + test under os-verify-lock: VERDICT command-exit 0, Test Files 208/208, Tests 8836/8836. New describe '[#33128] chart-dataset-unknown resolves through the reading package’s declared closure' (11 cases) in validate-chart-bindings.test.ts. Ablations via ablation-replace (src import, no dist leg), each restored blob == HEAD and git diff HEAD empty: A1 BASE index back -> 6 failed/91; A2 refusal arm dropped -> 5 failed; A3 every refusal softened to warning -> 6 failed; A4 shared resolver picks first of two closure holders -> 2 failed (red line 2 pin). CLI leg: os validate on a composeStacks fixture: declared exit 0, undeclared exit 1 naming holder + fix; A1 in lint dist (preflight: marker present in 4 built files) -> declared exit 1 with the BASE sentence; restored, rebuilt, preflight --absent clean, tree clean. A first CLI leg with the marker in a line comment was stripped by the bundle (preflight ABSENT) and discarded.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 60edc5ee: 59 families, each run with stdin from /dev/null, exit codes captured before pipes; --ran: '59 run, 0 NOT-MEASURED (a DERIVED zero — all 59 recorded an exit code and none of them is 3)'. First-run prerequisite failures rerun green: check-plugin-teardown-shape --self-test exit 3 on shallow clone -> 0 after fetch --unshallow; check:dts-closure exit 1 and check:dual-build-cjs-loads exit 3 after an OS_SKIP_DTS CLI build -> 0 after full pnpm build. pnpm lint: exit 0. CI check-runs: in_progress at report time (draft just opened).",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "line_budget": "278 changed lines (+268/-10) over 3 files, under the 3000 threshold",
      "files_changed": [
        ".changeset/33128-report-dataset-reader-closure.md",
        "packages/lint/src/validate-chart-bindings.ts",
        "packages/lint/src/validate-chart-bindings.test.ts"
      ],
      "deviations": [
        "Resolver pointer: the order names packages/core/src/package-scoped-resolution.ts; the dashboard half's resolver is indexArtifactDatasetResolution in packages/lint/src/validate-widget-bindings.ts (imported, file not edited; surface held).",
        "Scope reach: the one rule fixes all three surfaces it judges (reports and joined blocks, list-view charts, page charts) because each reader sends its own served package as callerPackage; and the union run now reads every body as the dashboard rule does (pinned; in the changeset).",
        "Ablation A4 mutated validate-widget-bindings.ts (outside the edit surface) for the red-line-2 proof only; restored, never committed."
      ],
      "mcp_calls": "5 — mcp__github__issue_read x3 (get, get_comments x2); ToolSearch loads not counted; 0 write tools",
      "api_writes": "3 — git push (not REST); relay pr_create (fleet-write run 43529529193, objectstack-ai/objectstack#33171, assignee os-tesla); post-stamped comment on #33128 (this report)",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "noted, not filed · validate-report-date-range.ts indexes stack.datasets alone, so on the per-package pass a report's dateRange over a declared dependency's dataset is not judged there; the union run judges it; no false refusal, no verdict lost · carrier: none",
        "noted, not filed · per-package object graph holds the package's own objects, so a runtimeFilter / widget filter key on a dependency-held object is judged only on the union run (probe at 60edc5ee: no per-package finding for runtimeFilter { nope }) · carrier: none"
      ]
    }
  6. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#31527#3 · os-tesla · session_01L9qibzECS2npZFku4956Um

    ACCEPT → PR #33171 comment 6868304242 · head 60edc5ee · readied and auto-merge armed 2026-11-14T00:17Z; Fixes #33128 closes this card on merge, and the seat strips pm:dispatched then.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:serverDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions