You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
analytics: the native strategy answers DATABASE_ERROR / 500 for a declared dotted path to a column the related object lacks #28558
Filing gate: ① out-of-scope finding of the #28258 dev (PR #28553, os-dev-report 6554100004 on #28258), class a, measured. Filed by domain:server seat 1. ⛔ Not a claim. No grade: triage sets the lane and grade.
Reach: queryDataset, native strategy, measured. A declared path to a column the related object does not have (account.bogus with include: account): native answers DATABASE_ERROR / 500; ObjectQL answers INVALID_FIELD / 400; the draft preview answers one null group.
Business reason: an author's typo in a dataset dimension reaches the database and comes back as a server error, logged as a 500, instead of a field refusal that names the bad member.
Wanted
The native strategy refuses the member before SQL with the same 400 the ObjectQL face answers.
Dedupe
Searched open and closed issues for DATABASE_ERROR dotted dimension (13 hits): none open on this path. New.
Reader who acts: domain:server (packages/services/service-analytics, the dataset compiler and the draft preview path).
Class (a), measured; reach given. A declared path to a column the related object lacks (account.bogus with include: account): native answers DATABASE_ERROR / 500, ObjectQL INVALID_FIELD / 400, preview one null group.
Grade p3: an author typo, edge class; the 500 is loud but names nothing and logs as a server fault.
Direction: every face refuses before SQL with the ObjectQL face's INVALID_FIELD / 400 naming the member. No new code. A 500 becoming a 400 is not a widening.
Claim: PM loop round 1 · card thread · 2026-11-01T12:24Z
Session: session_01FEkQ5kE5BrPUPNMMyv6oCH (the seat); the card thread is session_01FEkQ5kbUJTTWAxjV9nqr1P
Account: os-project-manager (the seat's linked user; the card's assignee)
Branch: claude/project-thread-0o422x (the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)
Worktree: the card thread's own container checkout
Domain: domain:server
Seat: domain:server#3
Ruling-ref: the maintainer, 2026-11-01T03:46Z: 「server 车道现在就是你负责,任务有一大堆啊,都可以派,包括 p3」, with 2026-10-26T10:29Z 「p1 p2 处理完了,就可以处理 p3」, and 2026-11-01T06:39Z 「server 队列还是很多任务,再开一个席位吧」. Leehom 2026-11-01T12:11Z: 「定级你可以自己决定」; graded by seat 3 (triage record on this card).
File surface: packages/services/service-analytics/src/** (the dataset compiler, the native and ObjectQL strategies, the draft-preview path), tests on real SQLite, and a changeset. ⛔ No packages/spec/**, ⛔ no ui/**.
Container & model: M, mode:thread, model: opus (--tier names no path mandate: PM's call, default), effort: default (the coordinator sets effort only from the maintainer's words)
Clause-②: no (narrowing) — expected where a face stops serving something it served, which owes a contract review before landing; the dev measures and declares the final value.
Metadata-protocol: none (expected; the dev measures and declares)
Responsibility: the code is service-analytics (dataset compiler and draft preview) · the platform path is queryDataset / /analytics/query over a dataset, with previewDrafts for the draft preview · reached by an author previewing or querying a dataset with a dotted dimension, time dimension or runtimeFilter member
Thread-read: 6557829960
Premise: holds as filed (measured by the #28258 dev on real SQLite at eeec88d14); PR #28553 closed only the unbacked-dimension half; the dev re-measures first on current main
Serial constraints cleared: none: no open PR on service-analytics dataset paths found at this read; the dev re-reads overlap at start and before pr_create.
Resume-from: none — fresh from origin/main
State: → pm:dispatched, assigned to os-project-manager, recorded by this claim. Order: pm-orders/server/order-28555.md (project folder; one order, one card thread, one PR for #28555, #28556, #28557 and #28558).
ACCEPT → PR #28686 comment 6559595954 · head efa6f756 · 2026-11-01T14:58Z · landing sent (ready + auto-merge; Clause-②: no (narrowing), CONTRACT_REVIEW_TIER PASS 6558997053 + delta 6559465368). The PR carries Fixes #28555/#28556/#28557/#28558, so the merge closes this card with its three siblings.
Landed: merged as c01690ec. Fixes #28555/#28556/#28557/#28558 closed all four cards. A dataset member read through a relationship path now gets one INVALID_FIELD / 400 on all three faces (ObjectQL, native SQL, draft preview): the preview no longer serves a null group, [] or 0, an undeclared path is refused on time dimensions and filter members too, and a declared path to a missing related column (dimension, filter or measure) is refused before SQL instead of a 500.
Contract review PASS (CONTRACT_REVIEW_TIER): base 6558997053 on c4f1e6c2, delta 6559465368 on the landed head efa6f756. Should-fix 3 (preview message attribution when the refused where leaf is the dataset's own filter) stays as recorded in the ACCEPT 6559595954.
Activity
objectstack-fleet commentedon Nov 1, 2026
domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH
Path: 错的必须被响亮拒绝并给处方 | none | P③
Triage: p3 ·
domain:server·area:reports· 2026-11-01T12:17Z⛔ Not a claim.
account.boguswithinclude: account): native answersDATABASE_ERROR/ 500, ObjectQLINVALID_FIELD/ 400, preview onenullgroup.INVALID_FIELD/ 400 naming the member. No new code. A 500 becoming a 400 is not a widening.objectstack-fleet commentedon Nov 1, 2026
domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH
Claim: PM loop round 1 · card thread · 2026-11-01T12:24Z
Session:
session_01FEkQ5kE5BrPUPNMMyv6oCH(the seat); the card thread issession_01FEkQ5kbUJTTWAxjV9nqr1PAccount:
os-project-manager(the seat's linked user; the card's assignee)Branch:
claude/project-thread-0o422x(the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)Worktree: the card thread's own container checkout
Domain:
domain:serverSeat:
domain:server#3Ruling-ref: the maintainer, 2026-11-01T03:46Z: 「server 车道现在就是你负责,任务有一大堆啊,都可以派,包括 p3」, with 2026-10-26T10:29Z 「p1 p2 处理完了,就可以处理 p3」, and 2026-11-01T06:39Z 「server 队列还是很多任务,再开一个席位吧」. Leehom 2026-11-01T12:11Z: 「定级你可以自己决定」; graded by seat 3 (triage record on this card).
File surface:
packages/services/service-analytics/src/**(the dataset compiler, the native and ObjectQL strategies, the draft-preview path), tests on real SQLite, and a changeset. ⛔ Nopackages/spec/**, ⛔ noui/**.Container & model:
M,mode:thread,model: opus(--tiernames no path mandate: PM's call, default),effort: default (the coordinator sets effort only from the maintainer's words)Clause-②: no (narrowing) — expected where a face stops serving something it served, which owes a contract review before landing; the dev measures and declares the final value.
Metadata-protocol: none (expected; the dev measures and declares)
Responsibility: the code is
service-analytics(dataset compiler and draft preview) · the platform path isqueryDataset//analytics/queryover a dataset, withpreviewDraftsfor the draft preview · reached by an author previewing or querying a dataset with a dotted dimension, time dimension or runtimeFilter memberThread-read: 6557829960
Premise: holds as filed (measured by the #28258 dev on real SQLite at
eeec88d14); PR #28553 closed only the unbacked-dimension half; the dev re-measures first on currentmainSerial constraints cleared: none: no open PR on
service-analyticsdataset paths found at this read; the dev re-reads overlap at start and beforepr_create.Resume-from: none — fresh from
origin/mainState: →
pm:dispatched, assigned toos-project-manager, recorded by this claim. Order:pm-orders/server/order-28555.md(project folder; one order, one card thread, one PR for #28555, #28556, #28557 and #28558).objectstack-fleet commentedon Nov 1, 2026
domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH
ACCEPT → PR #28686 comment 6559595954 · head
efa6f756· 2026-11-01T14:58Z · landing sent (ready + auto-merge;Clause-②: no (narrowing),CONTRACT_REVIEW_TIERPASS 6558997053 + delta 6559465368). The PR carriesFixes #28555/#28556/#28557/#28558, so the merge closes this card with its three siblings.objectstack-fleet commentedon Nov 1, 2026
domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH
Landing record · #28558 · PR #28686
domain:serverseat 3 ·session_01FEkQ5kE5BrPUPNMMyv6oCH· 2026-11-01T15:16Zgit ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-28686-*'git merge-base --is-ancestor c01690ec origin/maingit grep -n "assertPreviewJoinsNothing" origin/main -- packages/services/service-analytics/src/analytics-service.tsc01690ec.Fixes #28555/#28556/#28557/#28558closed all four cards. A dataset member read through a relationship path now gets oneINVALID_FIELD/ 400 on all three faces (ObjectQL, native SQL, draft preview): the preview no longer serves anullgroup,[]or0, an undeclared path is refused on time dimensions and filter members too, and a declared path to a missing related column (dimension, filter or measure) is refused before SQL instead of a 500.CONTRACT_REVIEW_TIER): base6558997053onc4f1e6c2, delta6559465368on the landed headefa6f756. Should-fix 3 (preview message attribution when the refusedwhereleaf is the dataset's own filter) stays as recorded in the ACCEPT6559595954.mainatc01690ecor later.