Skip to content

refactor(spec)!: retire dashboard.widgets[].responsive (#4876) - #4995

Merged
xuyushun441-sys merged 3 commits into
mainfrom
claude/issue-4876-responsive-retire
Aug 3, 2026
Merged

refactor(spec)!: retire dashboard.widgets[].responsive (#4876)#4995
xuyushun441-sys merged 3 commits into
mainfrom
claude/issue-4876-responsive-retire

Conversation

@xuyushun441-sys

Copy link
Copy Markdown
Contributor

Fixes #4876

按维护者 2026-08-03 的裁决 A(评论 5169512655)执行:退役 DashboardWidgetSchema.responsive,镜像 #3896 对同名 view.responsive 的处置。原单的「按断点重建模」方案(选项 C)已在裁决中排除,本 PR 不再涉及。

为什么是退役

该键可授权、可校验、然后什么也不做。开工前按 origin/main 重新实测,三条依据全部复现:

它当初漏网,不是因为有 liveness 证据,而是仪器有洞:台账 dashboard.jsonwidgets 没有声明 children,而 liveness 走查只沿显式 children 下钻一层 —— 所以 22 个 widget 级键从未被分类过。该缺口是 #4956,独立跟进,不在本 PR 修。不退役的话,v17 里同一个词会有两种命运(view.responsive 报 tsc 错、widgets[].responsive 静默放行),而这个键今天两侧都接收任意内容,正是 AI 授权元数据出错后藏身的地方。

刻意收窄的范围

共享的 ResponsiveConfigSchema 不动,page.zod.ts:151 的嵌入点不动。 只摘掉 widget 这一个嵌入。ResponsiveConfig 仍然导出、仍然在 page.components[].responsive 上是活的 —— 没有任何 import 会断,需要断点行为的作者有真实去处。测试里为此专门留了对照 pin

同样刻意不碰:DashboardWidgetOptionsSchema 保持 passthrough;compareTo / .layout 的 strip 站点属批 14,本 PR 不顺车。

退役套件

验证

  • spec 全部 15 道 check:* 闸门 PASS(含 check:strictness-ledgercheck:livenesscheck:generated);pnpm check:i18n OK。
  • pnpm --filter @objectstack/spec test 7480 passed;cli 588 passed;lint 980 passed;全仓 pnpm typecheck 122/122。
  • 三个示例 app validate 全 PASS。
  • 破坏性验证(墓碑):临时还原 ResponsiveConfigSchema.optional() 后,新 pin 立刻转红(expected '' to match /dashboard\.widgets\[\]\.responsive/ —— 值被静默接收);还原墓碑后 25/25 绿。
  • 探针负对照(转换):用真实注册表对 showcase 真实 dashboard 跑转换链 —— 基线 37 个 widget 0 命中;向其中一个 widget 注入合成 responsive:命中 1,路径为 dashboards[0].widgets[0].responsive,键被剥离且 widget 其余部分逐字节不变。即「零命中」是真实的干净,不是探针失灵。

合并 main 时的一个发现(已在本 PR 内修好)

合并 origin/main 时,git 把 packages/spec/authorable-surface.json 整体取了本分支一侧,静默丢掉了 #4974(#4001 批 11)为 automation/Webhookintegration/WebhookConfig 新增的 16 行(main 自己的基线是有的)。已按 os-regen 纪律整体重新生成(不手改),两侧共存 —— 仓库的 os-regen 钩子也确认该产物「merged WITHOUT a text merge」并在重新生成后清除标记。这条单独一个 commit,便于审阅。

跨分片知会

objectui 分片:本单结局是退役,不是回退条款 —— objectui#3235 的条件项永久除名,无需排入下个大版本重新建模;objectui 侧该键写明原因的 any 声明可按你们自己的节奏清理。


🤖 Generated with Claude Code

https://claude.ai/code/session_01Ehu85kbvMcrNTUJjwxvLJ9


Generated by Claude Code

claude added 3 commits August 3, 2026 18:20
ADR-0049 enforce-or-remove, mirroring #3896's handling of the identical
`view.responsive`: authorable, parsed, and never read by any renderer.
Re-measured 2026-08-03 — no objectui code reads `widget.responsive`
(DashboardRenderer/DashboardEditor/plugin-designer mention it in comments
only; the real per-breakpoint consumer `useResponsiveConfig` is fed by
`page.components[].responsive`), and zero authored instances repo-wide.

It survived the #3896 sweep through a liveness drill gap, not evidence:
`dashboard.json` declares no `children` on `widgets`, so no widget-level
key has ever been classified (#4956, separate).

- `retiredKey()` tombstone carrying the migration prescription; the key
  stays declared so `.strict()` answers with the prescription rather than
  a generic "unrecognized key"
- D2 conversion `dashboard-widget-responsive-removed` (retiredFromLoadPath)
  + D3 chain step at major 17; own entry, not folded into the #3896 one
- shared `ResponsiveConfigSchema` and its `page.zod.ts` embed untouched —
  pinned as a control
- baselines: authorable-surface KEY-level only (`[RETIRED]`); manifest /
  api-surface / api-surface-signatures unchanged by construction

Claude-Session: https://claude.ai/code/session_01Ehu85kbvMcrNTUJjwxvLJ9

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The merge of origin/main resolved `authorable-surface.json` to this
branch's side, silently dropping the 16 rows #4974 (#4001 批 11) added
for `automation/Webhook` and `integration/WebhookConfig` — main's own
committed baseline had them. Regenerating via `gen:schema` (the gate's
own proof path, never a hand edit) restores both sides: the sibling's
webhook rows and this branch's `ui/DashboardWidget:responsive [RETIRED]`.

Claude-Session: https://claude.ai/code/session_01Ehu85kbvMcrNTUJjwxvLJ9

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

vercel Bot commented Aug 3, 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 Aug 3, 2026 7:04pm

Request Review

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

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

106 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 @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/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 @objectstack/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/kernel/services.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/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/v17.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.

@xuyushun441-sys
xuyushun441-sys marked this pull request as ready for review August 3, 2026 19:19
@xuyushun441-sys
xuyushun441-sys added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 7d0e7b5 Aug 3, 2026
25 checks passed
@xuyushun441-sys
xuyushun441-sys deleted the claude/issue-4876-responsive-retire branch August 3, 2026 19:30
xuyushun441-sys pushed a commit that referenced this pull request Aug 3, 2026
Conflict was `liveness/dashboard.json`'s `_note` only; both sides kept and
reconciled. #4876/#4995 recorded that `widgets[].responsive` deliberately
carries NO ledger row because one would be an ORPHAN — true only while
`widgets` was undrilled. The retiredKey tombstone keeps the key in the walked
shape, so with the drill landed the row is REQUIRED (omitting it reports
UNCLASSIFIED); it is present with the dead verdict the #3896 sweep never got to
record. check:liveness green on the merged tree is the arbiter.

os-regen four-step done: generated artifacts taken wholesale from origin/main,
rebuilt, check:generated clean on the merged source, and every #4995 sibling
entry asserted present (authorable-surface [RETIRED], spec-changes, upgrade
guide, conversions registry, tombstone, changeset).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ehu85kbvMcrNTUJjwxvLJ9
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 tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec: DashboardWidgetSchema.responsive 按断点建模 —— objectui#3173 维护者已裁决;目标 17.0.0 正式版,带回退条款

2 participants