Skip to content

skills: the formula row of objectstack-data field-types should say a formula is no group key either (follow-up to #30773) #30824

Open

Description

@objectstack-fleet

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

Follow-up to #30773 (PR #30815), from the seat's ruling on contract review 6677341880, should-fix 3. skills/** is Tier H, so it was kept out of that PR.

What is missing

skills/objectstack-data/rules/field-types.md (the formula row of the field-type table) says a formula is virtual, not aggregatable, and that a dataset measure needs a stored field. It does not say a formula cannot be a group key either.

Since PR #30815, a dataset or analyticsCubes dimension over a formula is refused at authoring (dimension-virtual-field-refused in lint, 400 DATASET_INVALID at the dataset compile). Since #29304, every analytics query that groups by one is refused with 400 INVALID_FIELD. An AI author reading the skill still has nothing telling it not to write such a dimension.

What is wanted

Add "nor a group key" (or equivalent wording) to the formula row, so the row says a formula can be neither aggregated nor used as a dataset or cube dimension, and that both need a stored field. Keep within the skills ratchet: one short clause, with the before/after readings the skills PR rules ask for.

Links


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 · domain:skills · 2026-11-06T05:54Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    documentationImprovements or additions to documentation
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 6, 2026
  3. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u

    Claim: PM loop round 2 · 2026-11-06T06:37Z
    Session: session_01L9qibz5RLVEYDFco93jZ7u
    Account: os-tesla (the card's assignee)
    Branch: claude/project-thread-70v39y (the card thread's designated branch; dev session session_01L9qibzWJ43paU98P99Cmu9)
    Worktree: objectstack-issue-30824
    Domain: domain:skills
    Seat: domain:skills#2
    File surface: skills/objectstack-data/rules/field-types.md (the formula row only), one root .changeset/30824-formula-no-group-key.md, a ratchet ledger row only if a measured ceiling moves DOWN. ⛔ every other file, ⛔ every ceiling raise (compress, do not raise) (stop on breach)
    Container & model: S, mode:thread, model: claude-fable-5-1 (dispatch-gates --tier: MANDATORY for skills/** clause ①, no one-line exit), effort: high (p3)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (contract review 6677341880 should-fix 3 on PR #30815)
    Thread-read: 6678070733
    Premise: holds: the formula row of field-types.md names no group-key refusal, and PR #30815 (the refusal) is merged
    Serial constraints: seat 1's draft PR #30831 edits other skills/objectstack-data/** files, not this one; merge origin/main before pushing and re-measure the ratchet.

    Tier H (skills/**): draft until a governed approver approves; the seat's at-tier contract review precedes ACCEPT.

    Order: /mnt/project-files/skills-seat-2/r2026-11-06/dispatch-30824.md (frame FRAME.md beside it).

  4. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-tesla · session_01L9qibzWJ43paU98P99Cmu9
    os-dev-report

    Report of 2026-11-06T11:55Z for #30824, draft PR #30921, head f89a274.

    {
      "issue": 30824,
      "status": "done",
      "branch": "claude/project-thread-70v39y",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30921",
      "session": "session_01L9qibzWJ43paU98P99Cmu9",
      "premise_still_valid": true,
      "summary": "The formula row of skills/objectstack-data/rules/field-types.md now reads 'virtual: neither aggregatable nor a dataset or cube dimension (group key); both need a stored field', stating the refusals main ships (lint dimension-virtual-field-refused, dataset compile 400 DATASET_INVALID, query 400 INVALID_FIELD). The growth is paid by deleting the in-file pointer comment '// see the Calculated table' on the Formula example (+34 / -30 bytes; file tokens 3198 -> 3199, ceiling 3207 untouched, no re-wrap). One changeset, '@objectstack/skills': patch. The seat's Claim 6678864865 names this branch; origin/main (1697d5ca) merged before measuring.",
      "tests": "No test files changed (skill prose only). Readings on origin/main 1697d5ca vs f89a2740: field-types.md 252 -> 252 lines, 12790 -> 12794 bytes, 3198 -> 3199 tokens; sum of every skills/**/SKILL.md 4525 -> 4525 lines, 226885 -> 226885 bytes; bundle total 227012 -> 227013. node scripts/check-skills-token-ratchet.mjs: exit 0, 'skills/objectstack-data/rules/field-types.md is 3199 tokens (ceiling 3207; headroom 8)', '57 authored bundle file(s) within their ceilings'. The two eval fixtures under skills/objectstack-data/evals/ are unchanged and parse (9 + 6 evals).",
      "gates": "Derived on f89a2740: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack = 43 families, each run with </dev/null, exit codes landed in gates-ran-f89a2740.list; --ran reconciliation: '43 derived famil(ies) accounted for — 41 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3)'. 40 exited 0 on the first pass, incl. check-skills-token-ratchet (+ --self-test), check:skill-identifier-liveness, check:skill-frame-sync, check:skill-compatibility, check:corpus-claim-drift, check:doc-authoring, check:pm-skill-id-lint, check:pm-governed-merges, check:empty-changeset, check:changeset-no-major, check:adr-0087-registration, check:closing-keyword-parity, check:comment-mask-corpus, @objectstack/lint check:doc-formula-expressions (after the lint closure build). pnpm check:dts-closure exited 1 on the first pass only because my lint closure build ran under OS_SKIP_DTS=1 (4 packages missing .d.ts — a local artefact, not the diff); rebuilt with env -u OS_SKIP_DTS and re-run: exit 0 (48/48 declaration files present). NOT MEASURED locally (exit 3, PREREQUISITE NOT MET, every published dist needed): pnpm check:dual-build-cjs-loads, pnpm check:lean-entry-closure — the diff touches no package they load; CI runs both. Tier: dispatch-gates --tier = claude-fable-5-1 MANDATORY (skills/**), the model this thread ran on; check-governed-merges --test: Tier H by path. PR check-runs on f89a2740 at report time: Lint & Repo Gates: success; TypeScript Type Check: success; Test Core (2/8): success; Test Core (1/8): in_progress; Build Core: success; PR-body guards (claim · duplicate · Part-of · single-writer path): success; Governed Surface Queue Guard: success; Check Changeset: success.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no GitHub MCP tool was called (reads via gh api GET; writes: git push + relay pr_create + this post-stamped comment). The harness's assignee/reviewer MCP step was skipped on purpose.",
      "api_writes": "2 — relay pr_create (fleet-write request fw-20261106T114540Z-98fb12, run 42212628710, PR #30921, body 6532 bytes stored identical, no assignees), and this os-dev-report comment via post-stamped.mjs on #30824.",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: none (reading, no wrong answer from a public door) · the row keeps the pre-existing shorthand 'not aggregatable' although a count over a formula is accepted by the measure table (count reads no value); objectstack-ui/rules/dashboards.md already says so under 'Total over a computed value', which the row's pointer reaches · dedupe words: count formula aggregatable field-types · carrier: none — noted in the PR's Acceptance notes, not filed"
      ]
    }
  5. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u

    Claim amendment · 2026-11-06T12:20Z · amends claim 6678864865 (same seat, same branch claude/project-thread-70v39y)

    File surface, widened by the seat after contract review 6684262819 (its two should-fixes): skills/objectstack-data/rules/field-types.md (the formula row, as claimed), .changeset/30824-formula-no-group-key.md, plus skills/objectstack-ui/rules/dashboards.md (§ Dataset-Bound Widgets: the dimension / groupBy refusal bullet names formula, the row the field-types pointer relies on) and scripts/check-skills-token-ratchet.mjs (the two rows re-locked down at the measurement, headroom 0). ⛔ every other file.
    Governed: yes, Tier H (skills/**), unchanged by the widening. No other seat holds either added file (seat 1 is offline; PR #30831 has landed).

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

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions