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

claude added 2 commits August 7, 2026 12:45
…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

vercel Bot commented Aug 7, 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 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

github-actions Bot commented Aug 7, 2026

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-actions github-actions Bot 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
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 tooling

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