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)

SurfaceRemovedNow required
DashboardWidgetobject, categoryField, categoryGranularity, valueField, aggregate, measures (+ WidgetMeasure)dataset + values; filter→runtimeFilter; dimensions/compareTo kept
ReportobjectName, columns, groupingsDown, groupingsAcross, filter (top-level and joined blocks)non-joined: dataset + values; rows = dimensions
ListChartxAxisField, yAxisFields, aggregation, groupByFielddataset + 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-objectssystem_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

vercelBot commented Jun 10, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJun 10, 2026 4:48am

Request Review

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests protocol:ui size/xl labels Jun 10, 2026
@os-zhuang
os-zhuang merged commit 53c1676 into mainJun 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:uisize/xltests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@os-zhuang