Skip to content

analytics: the dataset draft preview serves a dimension the dataset does not declare, which the live strategies refuse INVALID_FIELD #28201

Closed

Description

@objectstack-fleet

domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

Filing gate: ② an out-of-scope finding measured by the #28172 card thread on main @ 35f20551 (real SQLite). Filed by domain:server seat 3. ⛔ Not a claim. No grade: triage sets it.

Measured

A dataset declaring dimension region and measures total (sum of amount) and deals (count). Selecting { dimensions: ['bogus'], measures: ['total'] }:

Face Answer
native strategy refused INVALID_FIELD / 400, "Valid dimensions: region"
ObjectQL strategy same refusal
draft preview (previewDrafts: true) served [{ bogus: null, total: 180 }]

An undeclared dimension that names a real field of the object (amount) is served on all three faces alike, so only a name that is neither declared nor a field differs.

Wanted (route is triage's)

The draft preview refuses an undeclared dimension the way the live faces do, with the same envelope, so an author does not see a plausible number under a misspelled dimension before publishing. #28172 does the same for measures (PR pending); this is the dimension half, a sibling of it on the same preview seam (assertDimensionFields). Expected Clause-②: no (narrowing).

Dedupe

Read the open titles for preview, undeclared dimension, assertDimensionFields: only #28172 (measures). New.

Links: #28172, #28127.

Activity

  1. added
    bugSomething isn't working
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    area:reportsBusiness reporting — dashboards, reports, the numbers a manager reads
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Oct 30, 2026
  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 经营报表 | none | P②

    Triage: p2 · domain:server · area:reports · pm:queue · 2026-10-30T16:59Z

    ⛔ Not a claim.


    Generated by Claude Code

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

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

    Claim: PM loop round 2 · 2026-10-30T19:39Z
    Session: session_016WV4cyQNVxpxREGfKkTsqs (card thread; seat session_016WV4czuTWNgKR22fKv7jia), the thread that landed #28172 (PR #28210) on the same seam
    Account: os-elon-musk
    Branch: claude/project-thread-ztbq3m (the card thread's platform-assigned branch — the recorded platform exception), restarted from main because PR #28210 merged
    Worktree: objectstack-issue-28201
    Domain: domain:server
    Seat: domain:server#3
    File surface: packages/services/service-analytics/src/analytics-service.ts (the preview query path, beside the measure gates #28210 added) and packages/services/service-analytics/src/preview-evaluator.ts, tests beside them (native / ObjectQL / preview parity), .changeset/*. No new export from the package entry.
    Container & model: M, mode:thread, model: opus (TIER_DEFAULT), effort: high
    Clause-②: no (narrowing)
    Metadata-protocol: none
    Responsibility: the dataset draft preview refusing a dimension the dataset does not declare (and that names no field) with the live strategies' INVALID_FIELD envelope, instead of serving it as one null group.
    Thread-read: 6528503872
    Premise: measured by the #28172 card thread on main @ 35f20551 (this card's body); the dev re-measures on main @ 86cf7cef first.
    Serial constraints cleared: PR #28210 (#28172, same seam) merged 2026-10-30 19:35Z; no open PR touches service-analytics/src (checked against the open PR list).
    Dispatch-note: p2. Claimed with the coordinator's go under the project-wide cap of 10 (2026-10-30 19:37Z). Narrowing ⇒ a CONTRACT_REVIEW_TIER review is owed before the queue.

  5. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4cyQNVxpxREGfKkTsqs

    os-dev report for PR #28259 (head b6b54ce2).

    {
      "issue": 28201,
      "status": "done",
      "branch": "claude/project-thread-ztbq3m",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28259",
      "session": "session_016WV4cyQNVxpxREGfKkTsqs",
      "premise_still_valid": true,
      "summary": "Premise confirmed on main 86cf7cef (contains #28210), real SQLite, three faces: dims ['bogus'] refused INVALID_FIELD/400 by native + ObjectQL (assertDimensionFields), served as [{bogus:null,total:180}] on the draft preview; dims ['amount'] (real field) and the declared 'region' serve alike on all three. Fix (analytics-service.ts only): the preview asks assertDimensionFields on the minted cube with the compiled cube's declared dimensions as vocabulary, and all preview gates now run in live order (ensureCube: measure fields, dimension fields, field type, record currency; then query(): #21156 caller measures, body, internal, field read). This closes the #28210 CR gate-order note. preview-evaluator.ts untouched.",
      "tests": "`preview-undeclared-dimension-parity.test.ts` (new, 7 cases × native / ObjectQL / preview via queryDataset on real SQLite): bogus refused INVALID_FIELD/400 with param/field/dimension and a byte-identical message on all three; bogus beside region, same; CONTROL region and amount serve the same groups; two-mistake order: nope+bogus -> measure 400, region_sum+bogus -> dimension 400, `amount + 1`+region_sum -> field-type 400, same message on all three. Ablation (both parity files, 17 cases): analytics-service.ts reset to main -> 4 red; assertDimensionFields removed -> 3 red; field-type door ahead of the dimension gate -> 1 red (region_sum+bogus); caller-measure gate back ahead of the field-type door -> 1 red (`amount + 1`+region_sum). Package suite at head b6b54ce2: 199 files, 4795 passed, 282 skipped, 0 failed. `pnpm --filter @objectstack/service-analytics typecheck` exit 0; eslint on touched files clean.",
      "gates": "dispatch-gates --commands --changed at b6b54ce2: 62 families, all exit 0 (the 7 dists dual-build-cjs-loads needs were built up front). --ran: 62 derived, 62 run, 0 NOT-MEASURED, 0 UNRUN. `pnpm lint` exit 0. CI at b6b54ce2: 48 check-runs, 35 success, 13 skipped, 0 failure.",
      "dogfood_battery": "b6b54ce2 · os-verify-lock: VERDICT command-exit 0 (held 24m06s) · Test Files 359 passed | 3 skipped (362) · Tests 2891 passed | 20 skipped (2911) · no failures",
      "mcp_calls": "none in this card (GitHub reads through the public REST API with curl); no write tool",
      "api_writes": "2 relay writes: pr_create (#28259), this comment",
      "open_questions": [],
      "out_of_scope_findings": [
        "class: a · reach: public door + wrong answer — preview runtimeFilter on a field the object does not have served [] where native/ObjectQL refuse INVALID_FIELD/400 param=where · carded by the seat as #28257 (with the unmeasured #20807 JSON-dimension door)",
        "class: a · reach: public door — dotted dimension `<dataset>.bogus`: native DATASET_INVALID/400, ObjectQL INVALID_FIELD/400, preview serves a null group; live faces disagree · carded by the seat as #28258, needs a ruling"
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

    ACCEPT → PR #28259 · 2026-10-30T20:56Z · contract review PASS 6532272081 (CONTRACT_REVIEW_TIER, head b6b54ce2) · ready + auto-merge armed through the relay. Out of scope, filed: #28257, #28258.

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:serverDomain lane — seat card indexed by label:pm:seatfindingRecorded observation — held, not dispatchable until the findings triage round grades itpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions