Skip to content

feat(spec)!: ADR-0021 single-form cutover — dataset is the only analytics form (#1658)#1676

Merged
os-zhuang merged 1 commit into
mainfrom
adr-0021-single-form-cutover
Jun 10, 2026
Merged

feat(spec)!: ADR-0021 single-form cutover — dataset is the only analytics form (#1658)#1676
os-zhuang merged 1 commit into
mainfrom
adr-0021-single-form-cutover

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

⚠️ BREAKING / spec major — review before merge

This is the convergence step of ADR-0021 Phase 2 (#1658). The dual-form period is over: the inline analytics query form is deleted, and every dashboard widget / report / list-chart must now bind a semantic dataset and select dimensions/measures by name.

This PR is intentionally not auto-merged — it's a spec-major breaking change and wants a human review.

What's removed (author surface)

Surface Removed Now required
DashboardWidget object, categoryField, categoryGranularity, valueField, aggregate, measures (+ WidgetMeasure) dataset + values; filter→runtimeFilter; dimensions/compareTo kept
Report objectName, columns, groupingsDown, groupingsAcross, filter (top-level and joined blocks) non-joined: dataset + values; rows = dimensions
ListChart xAxisField, yAxisFields, aggregation, groupByField dataset + values

Why this is safe

The dual-form rollout migrated every in-repo consumer to dataset-form first (#1673 / #1674 and prior), and the read-only analytics reconciliation harness verified old == new across all 52 framework + 49 hotcrm + ~72 templates analytics surfaces (0 mismatch). This cut is mechanical, not behavioural.

Migrated in this PR

  • spec ui schemas (dashboard/report/view) + rewritten focused dataset-form test suites.
  • stack.test strict-config Todo/CRM fixtures → dataset form (with datasets: arrays).
  • objectql metadata-write fixtures (protocol-meta, metadata-validation-sweep, overlay-precedence) → dataset form.
  • examples app-todo / app-crm / app-showcase dashboards, reports, views. The CRM YoY trend widget's monthly bucketing moves onto the dataset's close_date dimension (dateGranularity: 'month'). The showcase's former flat tabular report stays reclassified as a ListView (a flat list is a row lens, not analytics) — coverage/seed tests updated to match.
  • platform-objects system_overview dashboard.
  • regenerated ui reference docs.

Incidental

lite-kernel.test now uses a unique per-process temp log path instead of a shared hardcoded /tmp/test-kernel.log — the shared file can be owned by another user, causing non-deterministic EACCES under concurrent turbo runs (this was masking the real signal).

Verification

  • pnpm turbo build72/72
  • pnpm turbo test123/123
  • @objectstack/spec6526/6526

Closes the Phase 2 convergence track of #1658.

🤖 Generated with Claude Code

…dataset is the only form

BREAKING CHANGE (spec major): dashboard widgets, reports, and list-charts no
longer accept the inline query form. Every analytics surface must now bind a
semantic `dataset` (ADR-0021) and select dimensions/measures BY NAME.

Removed from the spec author surface:
  - DashboardWidget: `object`, `categoryField`, `categoryGranularity`,
    `valueField`, `aggregate`, `measures` (+ `WidgetMeasure` schema/type).
    `dataset` + `values` are now required; `filter` is the presentation-scope
    runtimeFilter; `dimensions`/`compareTo` retained.
  - Report: top-level `objectName`, `columns`, `groupingsDown`,
    `groupingsAcross`, `filter` (and the same on joined blocks). A non-joined
    report now requires `dataset` + `values`; `rows` are the dimensions.
  - ListChart: `xAxisField`, `yAxisFields`, `aggregation`, `groupByField`.
    `dataset` + `values` required.

This is the convergence step of ADR-0021 Phase 2 (#1658): the dual-form period
is over. All in-repo consumers were migrated to dataset-form first (#1673/#1674
and prior), reconciled old==new by the analytics harness, so this cut is
mechanical, not behavioural.

Migrated in this commit:
  - spec ui schemas (dashboard/report/view) + focused dataset-form test suites.
  - stack.test strict-config Todo/CRM fixtures → dataset form.
  - objectql metadata-write fixtures (protocol-meta, validation-sweep,
    overlay-precedence) → dataset form.
  - examples app-todo / app-crm / app-showcase dashboards, reports, views;
    the CRM trend widget's monthly bucketing moves onto the dataset's
    close_date dimension (`dateGranularity: 'month'`).
  - platform-objects system_overview dashboard.
  - regenerated ui reference docs.

Incidental: lite-kernel.test uses a unique per-process temp log path instead of
a shared hardcoded /tmp file (the shared file can be owned by another user,
causing non-deterministic EACCES under concurrent turbo runs).

Full `turbo build` (72/72) and `turbo test` (123/123) green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jun 10, 2026 4:48am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests protocol:ui size/xl labels Jun 10, 2026
@os-zhuang os-zhuang merged commit 53c1676 into main Jun 10, 2026
12 checks passed
@os-zhuang os-zhuang deleted the adr-0021-single-form-cutover branch June 10, 2026 05:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:ui size/xl tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant