Skip to content

feat(spec)!: ChartInteraction drops zoom and clickAction; stepSize/description/height are delivered (#3752) - #3763

Merged
os-zhuang merged 1 commit into
mainfrom
claude/objectchart-aggregate-naming-nb642o
Jul 28, 2026
Merged

feat(spec)!: ChartInteraction drops zoom and clickAction; stepSize/description/height are delivered (#3752)#3763
os-zhuang merged 1 commit into
mainfrom
claude/objectchart-aggregate-naming-nb642o

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Closes #3752. Depends on objectstack-ai/objectui#2888 — merge that first, then this.

The tail of the declared-≠-delivered sweep from #3729. Five ChartConfig props reached the renderer and did nothing; each got the ADR-0078 call — honor it, or remove it. Three were honored (objectui#2888), two are removed here.

Removed

prop why migration
ChartInteraction.zoom No renderer primitive behind it, and brush already narrows a range. interaction: { brush: true }
ChartInteraction.clickAction Competed with two click owners that do work — drillDown (opens the filtered records, which is what a segment click is almost always for) and, in the react tier, the host's onSegmentClick. A third, silent owner only invited authors to wire a click that never fired. drillDown, or handle the click in React

Neither had a consumer anywhere in the framework, the console, the showcase, or the skill corpus — which is itself the signal that they were redundant capability rather than missing capability.

ChartInteraction is now { tooltips, brush }, both honored. This is the #1475 precedent applied: trim what cannot be cleanly delivered, implement the rest, leave nothing declared-but-inert in between.

Delivered

ChartAxis.stepSize, ChartConfig.description and ChartConfig.height are implemented in objectui#2888. description and height join <ObjectChart>'s published dataProps now that they do something; stepSize rides along inside xAxis/yAxis. All three schema descriptions now say what the prop does rather than restating its name — description in particular reads as "announced to screen readers as the chart's label" instead of the bare "Accessibility description" that gave an author no idea whether anything consumed it.

Also cleaned up: the ChartTypeSchema taxonomy note had a mangled paragraph left from #3750's edit, where the metric/kpi sentence ran into the stacking one.

Breaking, shipped as minor

Per the launch-window convention (scripts/check-changeset-no-major.mjs — the repo is currently in RC pre-release mode). Off-spec zoom/clickAction keys are stripped by Zod rather than rejected, so no stored metadata fails to parse; the break is at the TypeScript type level for anyone constructing a ChartInteraction in code.

Verification

  • @objectstack/spec 6716 tests, @objectstack/lint 471 tests — all pass
  • All seven generated-artifact gates in sync (check:react-blocks, check:api-surface, check:skill-refs, check:skill-docs, check:docs, check:spec-changes, check:skill-examples)
  • node scripts/check-changeset-no-major.mjs passes
  • Full monorepo build green; showcase os validate passes

Where this leaves the chart contract

Every ChartConfig prop <ObjectChart> publishes is now honored by the renderer. The audit that started at #3701 ("what does an aggregate name its result columns?") ends with no known declared-≠-delivered props on this surface.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UMHZBHTjH4rw8xmDYirFC7


Generated by Claude Code

…scription/height are delivered (#3752)

The tail of the declared-≠-delivered sweep from #3729. Five ChartConfig props
reached the renderer and did nothing; each got the ADR-0078 call — honor it, or
remove it. Three were honored (objectui#2885), two are removed here.

Removed: ChartInteraction.zoom and ChartInteraction.clickAction. Both were
redundant against something the platform already delivers, which is why neither
had a consumer anywhere in the framework, the console, the showcase or the
skill corpus. `zoom` had no renderer primitive behind it and `brush` already
narrows a range (migration: brush: true). `clickAction` competed with two click
owners that DO work — drillDown, which opens the filtered records and is what a
segment click is almost always for, and the react tier's own onSegmentClick; a
third, silent owner only invited authors to wire a click that never fired
(migration: drillDown, or handle it in React). ChartInteraction is now
{ tooltips, brush }, both honored — the #1475 precedent: trim what cannot be
cleanly delivered, implement the rest, leave nothing inert in between.

Delivered: ChartAxis.stepSize, ChartConfig.description and ChartConfig.height
(objectui#2885). description and height join <ObjectChart>'s published
dataProps now that they do something; stepSize rides along inside xAxis/yAxis.
Their schema descriptions say what they do rather than restating their names.

Off-spec zoom/clickAction keys are stripped by Zod rather than rejected, so no
stored metadata fails to parse — the break is at the TypeScript type level for
anyone constructing a ChartInteraction in code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UMHZBHTjH4rw8xmDYirFC7
@vercel

vercel Bot commented Jul 28, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Jul 28, 2026 2:30am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:ui tooling size/m labels Jul 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

104 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang marked this pull request as ready for review July 28, 2026 02:46
@os-zhuang
os-zhuang merged commit db02d47 into main Jul 28, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/objectchart-aggregate-naming-nb642o branch July 28, 2026 02:47
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/m tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ChartConfig 剩余的 declared ≠ delivered 属性:stepSize / clickAction / zoom / description / height(#3729 收尾)

2 participants