Skip to content

feat(spec)!: ADR-0049 enforce-or-remove —— ui/widget + ui/i18n 家族 13 退 1 留 (#5055) - #6385

Merged
qq9340100 merged 4 commits into
mainfrom
claude/issue-5055-widget-i18n-enforce-or-remove
Aug 7, 2026
Merged

feat(spec)!: ADR-0049 enforce-or-remove —— ui/widget + ui/i18n 家族 13 退 1 留 (#5055)#6385
qq9340100 merged 4 commits into
mainfrom
claude/issue-5055-widget-i18n-enforce-or-remove

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes#5055

逐站点判读后 13 退役 / 1 保留(10 def / 26 导出名):widget.zod.ts 的 WidgetManifest/Lifecycle/Event/Property/Source(3 分支)+ i18n.zod.ts 的 I18nObject/PluralRule/NumberFormat/DateFormat/LocaleConfig。FieldWidgetProps 翻 KEEP——派发时点名的 objectui PR #3289 证据更新实测证实(spec-symbol-batch7.test.ts 的有意 tripwire + 3 条类型 pin),且它是 React props 契约、强制点在消费仓 tsc,从不在 authorable-surface。走退役剧本 route 3(无载体键 ⇒ 无墓碑/无 conversion),登记 D3 SemanticMigration + 10 条 RETIRED_DEFS_BY_MAJOR;双向 pin(absence 走编译器 API 扫 exports map 带反真空守卫;survival 半边钉 FieldWidgetProps/AriaProps/I18nLabel/field.widget)。major changeset 含 FROM→TO 表。终报全文见 #5055(dev 自贴,14:04Z)。

落地序(采纳终报建议):本单先于 #6083 落(削 4 条同构 pin + 6 XParsed,基线 719→715 / 665→659,#6083 开工前重测);ui.json 分片与已合并的 #5775/#6146/#6245 有同 category 文本冲突 —— 新 head 同步中(已 poke dev 会话 merge main + 重生成,⛔ 不手改分片)。

维护者合并前确认项:cloud 仓本会话与 dev 会话均不可达,第三仓零消费的判据是批 16 索引搜索 0 命中(正对照 345 命中)+ 两可达仓 import 面实测为零 + 形状消费必先 import;若你有 cloud 访问,合并前补一次 WidgetManifest|LocaleConfig|PluralRule code search 即闭环。

配套:objectui 侧 #6275(parity 测试按设计打红 + 锚点注释指向已删名,dev 已立单)。


Generated by Claude Code

…ularies, keep FieldWidgetProps (#5055)
ADR-0049 enforce-or-remove for the 14 sites #4001 批 16 measured as `no door`.
Disposed per site against a re-measurement on origin/main: 13 REMOVED, 1 KEPT.
Removed — 10 defs, 26 exported names:
ui/widget.zod.ts WidgetManifest, WidgetLifecycle, WidgetEvent,
WidgetProperty, WidgetSource (npm/remote/inline union)
ui/i18n.zod.ts I18nObject, PluralRule, NumberFormat, DateFormat,
LocaleConfig
None had a carrier key: nothing under packages/spec/src imported widget.zod at
all, every live import of i18n.zod names I18nLabelSchema or AriaPropsSchema, the
BFS from all 24 metadata-type roots plus defineStack reached none of them (with
PageSchema / ObjectListViewSchema resolving `direct` in the same run and a
synthetic carrier flipping all of them), and no repo ever parsed one. So a
published vocabulary described a widget-registration and locale-formatting
capability the platform does not have — the #3950 shape.
Kept — FieldWidgetProps. Its evidence differs and had been overtaken one day
before 批 16 measured. It is a React props contract, never authorable (absent
from authorable-surface/ and json-schema.manifest/ — onChange is a z.function()),
so having no parse is its design; and objectui PR #3289 (2026-08-03) renamed
@object-ui/fields' validation slot onto its `error` with no alias and pinned it
as a deliberate compile-time tripwire. Re-verified on objectui origin/main.
Route 3 ("nothing parses it → neither"), as #4988 / #4834: no retiredKey()
tombstone and no D2 conversion, because there is no shape to tombstone and no
source to rewrite. The declared record is the D3 SemanticMigration
ui-widget-i18n-family-retired plus 10 RETIRED_DEFS_BY_MAJOR entries, which the
#4725 manifest-deletion gate reads. WidgetManifest.performance's own tombstone
(#3896) is subsumed by the removal of the shape that carried it.
Baselines moved deliberately: json-schema.manifest/ui.json -10 (the #2978
ratchet fires first), authorable-surface/ui.json -65 (adjudicated by the #4650
gate's path 3), api-surface/ui.json -26. variant-docs.json's
`type:inline|npm|remote` entry goes with the union it described (#5552's failure
mode). Reference docs, meta.json, skill indexes and the strictness-ledger counts
regenerated; the `no door` bucket goes 14 -> 1.
Pins are bidirectional: ui/widget-i18n-retirement.test.ts asserts absence across
every public entry by resolved symbol identity AND the survival of the three
shapes a too-wide sweep would take — FieldWidgetProps, AriaProps and I18nLabel,
all three of which live in the two files being emptied. The #5056 clone-overlap
fixture is rebuilt locally so the instrument's measured 2-of-19 bound survives
its subject.
No runtime behaviour changes; that impossibility is the reason for the removal.
Refs #5055, #4001, #4988, ADR-0049, ADR-0087
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUAV11R31jhzq6v1wb6SuJ
@vercel

vercelBot commented Aug 7, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 7, 2026 4:58pm

Request Review

Absorbs #5775 / #6146 / #6245 and the rest of main (63 commits), which share
packages/spec's sharded artifacts with this branch.
Conflicts resolved:
- content/docs/references/ui/widget.mdx (modify/delete) — deleted. It is a
generated page and its five defs are gone, so gen:docs no longer emits it;
main had only re-rendered it from the pre-retirement source.
- packages/spec/src/migrations/registry.ts — both sides APPEND a paragraph to
the protocol-17 step's rationale. Kept both, #5775's last, with the paragraph
break restored between them. RETIRED_DEFS_BY_MAJOR and the
ui-widget-i18n-family-retired SemanticMigration merged intact.
- packages/spec/src/type-alias-convention.pin.test.ts — kept #5775's new M170
(ui/component.zod) import and its Iso719 PageContainerProps pin; dropped the
M168 (ui/widget.zod) import and the Iso716 WidgetLifecycleSchema pin, whose
schema this branch retires. Self-count re-measured from the source: 720 -> 716
(main's +1 for PageContainerProps, this branch's -4 for the retired schemas),
and the note now says both moves are in the one number.
- docs/audits/2026-07-unknown-key-strictness-ledger.md — kept this branch's
deletion of the i18n.zod.ts row from the remaining-strip table. Its five strip
sites were removed, so the file reaches 0 strip and leaves that table; main
had simply not seen the retirement yet.
Generated artifacts were NOT text-merged. Rebuilt from the merged tree and
regenerated via check:generated --fix (spec-changes.json,
docs/protocol-upgrade-guide.md, api-surface/, content/docs/references/**, the
strictness-ledger counts).
Verified on the merged tree: spec suite 339 files / 8624 tests green;
check:generated 10/10 up to date; the six no-generator source audits green as a
group (check:liveness, check:empty-state, check:skill-examples,
check:variant-docs, check:exported-any, check:dual-source-exports); pnpm
typecheck 125/125. Branch delta vs origin/main on api-surface is still exactly
26 removed / 0 added.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUAV11R31jhzq6v1wb6SuJ
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

112 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/tenancy-modes.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 @objectstack/spec)
  • content/docs/kernel/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx(via @objectstack/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 @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx(via @objectstack/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/http-protocol.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/apps.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/field-grouping-and-order.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.

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests protocol:ui tooling labels Aug 7, 2026
…ement (#6148)
The new #6148 gate requires every changeset that declares a breaking change to
answer the ledger question in writing. This one's answer is the first of the
four accepted forms — the entry exists: the retirement is registered as the D3
SemanticMigration `ui-widget-i18n-family-retired` in
packages/spec/src/migrations/registry.ts, alongside its ten
RETIRED_DEFS_BY_MAJOR entries.
Comment-only; no schema, artifact or test is affected.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUAV11R31jhzq6v1wb6SuJ
@qq9340100
qq9340100 marked this pull request as ready for review August 7, 2026 17:39
@qq9340100
qq9340100 added this pull request to the merge queueAug 7, 2026
Merged via the queue into main with commit f7bd4e2Aug 7, 2026
26 checks passed
@qq9340100
qq9340100 deleted the claude/issue-5055-widget-i18n-enforce-or-remove branch August 7, 2026 17:54
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:uisize/xlteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ADR-0049 enforce-or-remove: ui/widget.zod.ts 全文件 + ui/i18n.zod.ts 五个形状实测无门(#4001 批 16 改判)

2 participants

@qq9340100@claude