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
spec: an upgrade-guide entry for a dataset or cube dimension over a formula field, now refused at authoring (follow-up to #30773) #30822
Follow-up to #30773 (PR #30815), from the seat's ruling on contract review 6677341880, should-fix 2. It is spec-lane work and out of scope for that PR.
What is missing
PR #30815 makes a dataset or analyticsCubes dimension over a virtual (formula) field an authoring-time refusal: the dataset compile answers 400 DATASET_INVALID, and lint answers dimension-virtual-field-refused on os validate / os build / os lint and at the runtime dataset save (422). Its changeset declares Metadata-protocol: narrowed with the ADR-0087 disposition not-required (no-migration-prescription).
The upgrade guide has no entry for it, so an author upgrading across the release that ships #30773 learns about the dimension only when the dataset stops compiling. The measure-side sibling has one: packages/spec/src/migrations/entries/semantic/18.dataset-measure-aggregate-field-type-refused.ts.
What is wanted
A semantic migration entry under packages/spec/src/migrations/entries/semantic/, mirroring 18.dataset-measure-aggregate-field-type-refused, for a dataset (or cube) dimension over a virtual field:
no automatic rewrite (which stored field should carry the value is the author's judgement);
the replacement named: store the value in a field of its own on the object (written by a hook or a flow when its source changes) and point the dimension at that field, or remove the dimension;
relevantWhen on datasets and analyticsCubes.
It should land before the release that ships #30773.
Claim: PM loop round 1 · 2026-11-06T11:14Z
Session: session_01L9qibzzqHZdAVqgBAvxXKB
Account: os-tesla (the card's assignee)
Branch: claude/project-thread-5kf1uq (the card thread's designated branch; dev session session_01L9qibvg2LHxbiRKsqRA6iR)
Worktree: objectstack-issue-30822
Domain: domain:spec
Seat: domain:spec#1
File surface: packages/spec/src/migrations/entries/semantic/ (one new entry, plus its test if the template has one), the spec build's regenerated upgrade-guide artefacts, one changeset. ⛔ packages/spec/src/**/*.zod.ts, ⛔ the strictness ledger (stop on breach)
Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: high (p1)
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (the upgrade-guide entry owed for the narrowing PR #30815 shipped; contract review 6677341880 should-fix 2)
Thread-read: 6678060637
Premise: holds: PR #30815 merged; no semantic entry on origin/maind8b22954 covers a dimension over a virtual field; no open PR names this card
Serial constraints cleared: none (#30880, held by another account, may add its own migration entry: ordinary concurrency, the later lander merges origin/main)
Not governed (no planned path hits the register): ordinary queue landing after the seat's review.
{
"issue": 30822,
"status": "done",
"branch": "claude/project-thread-5kf1uq",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30925",
"session": "session_01L9qibvg2LHxbiRKsqRA6iR",
"premise_still_valid": true,
"summary": "Added the semantic migration entry dataset-dimension-virtual-field-refused (protocol 18) for a datasets[].dimensions[].field or analyticsCubes[].dimensions.KEY.sql over a formula field: no automatic rewrite, the card's replacement verbatim, both shipped refusals (dataset compile 400 DATASET_INVALID, lint dimension-virtual-field-refused) quoted exactly with name placeholders, relevantWhen on datasets and analyticsCubes. semantic-relevance.test.ts enumeration table gains the row (counts 26 to 27, 21 to 22). One @objectstack/spec patch changeset with Clause-②: no / Metadata-protocol: none. Premise held: no existing entry covered it on origin/main 6ff27b34.",
"tests": "head 012839b6: spec build exit 0; spec vitest src/migrations + scripts/upgrade-guide-docs.test.ts + scripts/upgrade-guide-surface-span.test.ts: Test Files 7 passed (7), Tests 228 passed (228); pnpm --filter @objectstack/spec test: Test Files 818 passed (818), Tests 25838 passed | 1 todo; spec typecheck exit 0 (all four under os-verify-lock, VERDICT command-exit 0); build-upgrade-guide.ts --out renders the entry in protocol 18 with intact surface code span. No ablation: no tested behaviour changed (registry data + its enumeration pin).",
"gates": "dispatch-gates --commands derived 81 families on 012839b6; all 81 exit 0 (record /mnt/project-files/spec-seat-1/r2026-11-06/out/30822-gates-ran-012839b6.list); --ran: 81 derived, 81 run, 0 NOT-MEASURED, 0 UNRUN. Four first runs exit 3 (prerequisite, not findings) re-run green after prerequisites: check-plugin-teardown-shape --self-test (git fetch --unshallow), lint check:doc-formula-expressions, check:lean-entry-closure, check:dual-build-cjs-loads (turbo build formula/lint/objectql). PR check-runs: in_progress at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"line_budget": "69 additions / 3 deletions over 3 files (entry 55, test +4/-3, changeset 14); no skills/** touched, not Tier H, under the 3,000-line threshold",
"files_changed": [
".changeset/30822-dataset-dimension-virtual-field-guide-entry.md",
"packages/spec/src/migrations/entries/semantic/18.dataset-dimension-virtual-field-refused.ts",
"packages/spec/src/migrations/semantic-relevance.test.ts"
],
"deviations": "(1) The template has no own test; the entry needed the reviewed row in semantic-relevance.test.ts, a file the claim's surface covers as 'its test'. (2) No assignee in pr_create, per the frame (seat sets it at hand-over); the harness's assignee/reviewer MCP step skipped for the same reason. (3) Ran `git checkout --detach` on the shared /home/user/objectstack checkout (clean tree, it held the thread branch) so the worktree could take the branch; and `git fetch --unshallow origin main` for the teardown self-test fixture.",
"mcp_calls": "4 — mcp__github__issue_read get, issue_read get_comments x2, pull_request_read get; 0 writes",
"api_writes": "2 — fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches (pr_create, read-back identical 6794 bytes), post-stamped issue comment on #30822 (this report)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
merged 2026-11-06T14:51:27Z through the queue (seat-landed under the maintainer's 14:09Z word), merge commit ebe0a98a309a8f42a15b34d2cbcfa3c76f0ec4e6, final head 012839b6
origin/main
contains the merge commit (git merge-base --is-ancestor)
State: card closed as completed by Fixes #30822; pm:dispatched removed from the card in this stroke.
Activity
objectstack-fleet commentedon Nov 6, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p1 ·
domain:spec· 2026-11-06T05:53Z⛔ Not a claim.
packages/spec/src/migrations/entries/semantic/) for a dataset or cube dimension over a formula field, which analytics: a dataset or cube dimension over a formula field is accepted at authoring, though every query now refuses it (follow-up to #29304) #30773 now refuses at authoring. The measure-side sibling already has one.domain:specseat is online now.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB
Claim: PM loop round 1 · 2026-11-06T11:14Z
Session:
session_01L9qibzzqHZdAVqgBAvxXKBAccount:
os-tesla(the card's assignee)Branch:
claude/project-thread-5kf1uq(the card thread's designated branch; dev sessionsession_01L9qibvg2LHxbiRKsqRA6iR)Worktree:
objectstack-issue-30822Domain:
domain:specSeat:
domain:spec#1File surface:
packages/spec/src/migrations/entries/semantic/(one new entry, plus its test if the template has one), the spec build's regenerated upgrade-guide artefacts, one changeset. ⛔packages/spec/src/**/*.zod.ts, ⛔ the strictness ledger (stop on breach)Container & model:
S,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate),effort: high(p1)Clause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect card(the upgrade-guide entry owed for the narrowing PR #30815 shipped; contract review 6677341880 should-fix 2)Thread-read: 6678060637
Premise: holds: PR #30815 merged; no semantic entry on
origin/maind8b22954covers a dimension over a virtual field; no open PR names this cardSerial constraints cleared:
none(#30880, held by another account, may add its own migration entry: ordinary concurrency, the later lander mergesorigin/main)Not governed (no planned path hits the register): ordinary queue landing after the seat's review.
Order:
/mnt/project-files/spec-seat-1/r2026-11-06/dispatch-30822.md(frameFRAME.mdbeside it).objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibvg2LHxbiRKsqRA6iR
os-dev-report
{ "issue": 30822, "status": "done", "branch": "claude/project-thread-5kf1uq", "pr": "https://github.com/objectstack-ai/objectstack/pull/30925", "session": "session_01L9qibvg2LHxbiRKsqRA6iR", "premise_still_valid": true, "summary": "Added the semantic migration entry dataset-dimension-virtual-field-refused (protocol 18) for a datasets[].dimensions[].field or analyticsCubes[].dimensions.KEY.sql over a formula field: no automatic rewrite, the card's replacement verbatim, both shipped refusals (dataset compile 400 DATASET_INVALID, lint dimension-virtual-field-refused) quoted exactly with name placeholders, relevantWhen on datasets and analyticsCubes. semantic-relevance.test.ts enumeration table gains the row (counts 26 to 27, 21 to 22). One @objectstack/spec patch changeset with Clause-②: no / Metadata-protocol: none. Premise held: no existing entry covered it on origin/main 6ff27b34.", "tests": "head 012839b6: spec build exit 0; spec vitest src/migrations + scripts/upgrade-guide-docs.test.ts + scripts/upgrade-guide-surface-span.test.ts: Test Files 7 passed (7), Tests 228 passed (228); pnpm --filter @objectstack/spec test: Test Files 818 passed (818), Tests 25838 passed | 1 todo; spec typecheck exit 0 (all four under os-verify-lock, VERDICT command-exit 0); build-upgrade-guide.ts --out renders the entry in protocol 18 with intact surface code span. No ablation: no tested behaviour changed (registry data + its enumeration pin).", "gates": "dispatch-gates --commands derived 81 families on 012839b6; all 81 exit 0 (record /mnt/project-files/spec-seat-1/r2026-11-06/out/30822-gates-ran-012839b6.list); --ran: 81 derived, 81 run, 0 NOT-MEASURED, 0 UNRUN. Four first runs exit 3 (prerequisite, not findings) re-run green after prerequisites: check-plugin-teardown-shape --self-test (git fetch --unshallow), lint check:doc-formula-expressions, check:lean-entry-closure, check:dual-build-cjs-loads (turbo build formula/lint/objectql). PR check-runs: in_progress at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "line_budget": "69 additions / 3 deletions over 3 files (entry 55, test +4/-3, changeset 14); no skills/** touched, not Tier H, under the 3,000-line threshold", "files_changed": [ ".changeset/30822-dataset-dimension-virtual-field-guide-entry.md", "packages/spec/src/migrations/entries/semantic/18.dataset-dimension-virtual-field-refused.ts", "packages/spec/src/migrations/semantic-relevance.test.ts" ], "deviations": "(1) The template has no own test; the entry needed the reviewed row in semantic-relevance.test.ts, a file the claim's surface covers as 'its test'. (2) No assignee in pr_create, per the frame (seat sets it at hand-over); the harness's assignee/reviewer MCP step skipped for the same reason. (3) Ran `git checkout --detach` on the shared /home/user/objectstack checkout (clean tree, it held the thread branch) so the worktree could take the branch; and `git fetch --unshallow origin main` for the teardown self-test fixture.", "mcp_calls": "4 — mcp__github__issue_read get, issue_read get_comments x2, pull_request_read get; 0 writes", "api_writes": "2 — fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches (pr_create, read-back identical 6794 bytes), post-stamped issue comment on #30822 (this report)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB
ACCEPT → PR #30925 comment 6684842181 (head
012839b6, CI green, clean). Not governed; the seat lands it on the maintainer's word in the seat thread.objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB
Landed ·
domain:spec#1· 2026-11-06T14:52Zebe0a98a309a8f42a15b34d2cbcfa3c76f0ec4e6, final head012839b6origin/maingit merge-base --is-ancestor)State: card closed as completed by
Fixes #30822;pm:dispatchedremoved from the card in this stroke.