Skip to content

analytics: the dataset draft preview serves a runtimeFilter on a field the dataset object does not have, which the live strategies refuse INVALID_FIELD #28257

Closed

Description

@objectstack-fleet

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

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

Measured

The same dataset as #28172 / #28201, queried with runtimeFilter: { bogus: 'x' } (no field bogus on the object):

Face Answer
native strategy refused INVALID_FIELD / 400, param: where (assertWhereFields, #5669)
ObjectQL strategy same refusal
draft preview (previewDrafts: true) served []

Wanted (route is triage's)

The draft preview refuses a filter on an unknown field the way the live faces do, with the same envelope. It is the filter sibling of #28172 (measures, merged in #28210) and #28201 (dimensions, in flight) on the same preview seam. Expected Clause-②: no (narrowing).

Unmeasured, same seam: the structured-JSON dimension door (assertDimensionsGroupScalarColumns, #20807) is asked by the live ensureCube and not by the preview. Triage may fold it here or leave it.

Dedupe

Read the open titles for preview, runtimeFilter, dataset: #28201 (dimensions) and #28194 (currency guard), neither the filter. New.

Links: #28172, #28201, #5669, #20807.

Activity

  1. added
    bugSomething isn't working
    area:reportsBusiness reporting — dashboards, reports, the numbers a manager reads
    domain:serverDomain lane — seat card indexed by label:pm:seat
    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-30T19:58Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. 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-30T21:20Z
    Session: session_016WV4cyQNVxpxREGfKkTsqs (card thread; seat session_016WV4czuTWNgKR22fKv7jia)
    Account: os-elon-musk
    Branch: claude/project-thread-ztbq3m (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
    Worktree: objectstack-issue-28257
    Domain: domain:server
    Seat: domain:server#3
    File surface: packages/services/service-analytics/src/analytics-service.ts (the preview query path, beside the measure and dimension gates of #28210 / #28259) and, only if the filter must reach it, 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 runtimeFilter on a field the dataset object does not have with the live strategies' INVALID_FIELD envelope (param: where), and asking the structured-JSON dimension door (#20807) where it differs from live, instead of serving.
    Thread-read: 6532287268
    Premise: measured by the #28201 card thread on main @ 86cf7cef (filter half); the #20807 half is unmeasured and is measured first, per triage. The dev re-measures on main @ 4159c701.
    Serial constraints cleared: PRs #28210 (#28172) and #28259 (#28201) on the same seam merged 2026-10-30 19:35Z / 21:17Z; 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 21:18Z). Narrowing ⇒ a CONTRACT_REVIEW_TIER review is owed before the queue.

  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

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

    os-dev report for PR #28264 (head 83c8631e).

    {
      "issue": 28257,
      "status": "done",
      "branch": "claude/project-thread-ztbq3m",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28264",
      "session": "session_016WV4cyQNVxpxREGfKkTsqs",
      "premise_still_valid": true,
      "summary": "Premise confirmed on main 4159c701 (contains #28210 and #28259), real SQLite, three faces: runtimeFilter {bogus:'x'} refused INVALID_FIELD/400 param=where by native + ObjectQL (assertWhereFields, #5669), served [] on the draft preview; under {$or:[{bogus:1},{region:'amer'}]} the preview served the amer rows; the array triple likewise. Folded #20807 measured and it DID differ: a dimension over a json column (declared payload_dim or undeclared payload) refused INVALID_FIELD/400 param=dimensions live, grouped by object value on the preview. Fix (analytics-service.ts only, +10 lines): the preview asks assertDimensionsGroupScalarColumns after the dimension-field gate and before the field-type door, and assertWhereFields last among ensureCube's gates (after record currency) and before query()'s caller-measure gate — the live order. preview-evaluator.ts untouched.",
      "tests": "`preview-filter-field-json-dimension-parity.test.ts` (new, 11 cases × native / ObjectQL / preview via queryDataset on real SQLite): unknown filter field refused INVALID_FIELD/400 param=where with a byte-identical message in three spellings (object, $or arm, array triple); CONTROL region, amount {$gt:40} and region {$in} serve the same rows; json dimension refused param=dimensions with one message, declared and undeclared; two-mistake order: json dim + unknown filter -> dimension, json dim + region_sum -> JSON door, `amount + 1` + unknown filter -> where 400 (preview answered 403 before). Ablation: analytics-service.ts reset to main -> 8 red; assertWhereFields removed -> 4 red; assertDimensionsGroupScalarColumns removed -> 4 red; where gate after the caller-measure gate -> 1 red; JSON door after the currency door -> 1 red. Package suite at head 83c8631e: 200 files, 4806 passed, 282 skipped, 0 failed. `pnpm --filter @objectstack/service-analytics typecheck` exit 0; eslint on touched files clean.",
      "gates": "dispatch-gates --commands at 83c8631e: 62 families, all exit 0. --ran: 62 derived, 62 run, 0 NOT-MEASURED, 0 UNRUN. `pnpm lint` exit 0. CI at 83c8631e: 48 check-runs, 35 success, 13 skipped, 0 failure. Contract review PASS at 83c8631e (comment 6533988223).",
      "dogfood_battery": "83c8631e · os-verify-lock: VERDICT command-exit 0 (held 21m13s) · Test Files 360 passed | 3 skipped (363) · Tests 2894 passed | 20 skipped (2914) · 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 (#28264), this comment",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

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

    ACCEPT → PR #28264 · 2026-10-30T22:27Z · contract review PASS 6533988223 (CONTRACT_REVIEW_TIER, head 83c8631e) · ready + auto-merge armed through the relay.

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:seatfindingpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions