Repository navigation
refactor(ui)!: retire @object-ui/plugin-ai and its three node types - #27042
Conversation
…(WIP) Part of the plugin-ai retirement (ruling A on the zero-consumer card). Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
…WIP) Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
…puts and the types pins (WIP) Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
…he new retirement pin (WIP) Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
…g note (WIP) Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
… ledgers after the plugin-ai retirement (WIP) Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
…xed group Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com> # Conflicts: # scripts/sdui-manifest.sources/i18n.json # scripts/sdui-manifest.sources/types.json
…plugin-ai retirement Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com> # Conflicts: # .changeset/25831-object-ui-18-1-to-merge.md # content/docs/protocol/backward-compatibility.mdx # scripts/publish-smoke-pack.mjs # scripts/sdui-manifest.sources/i18n.json # scripts/sdui-manifest.sources/types.json # ui/packages/plugin-ai/CHANGELOG.md # ui/packages/plugin-ai/package.json # ui/scripts/__tests__/package-files-exist.test.ts
Claude-Session: https://claude.ai/code/session_01VBDBR9oS1MNUcjBVXds5D6 Co-authored-by: Claude <noreply@anthropic.com>
…-26wk5s # Conflicts: # ui/QUICK_REFERENCE.md # ui/README.md # ui/packages/plugin-ai/README.md # ui/scripts/__tests__/package-files-exist.test.ts # ui/scripts/markdown-test-inputs.mjs
The runtime-export-retired marker names the package as `@object-ui/plugin-ai#*` (ADR-0087 D9 whole-package operand) and its three per-export FROM lines become one line naming the package. Merging main brought two more mentions of the deleted package: the pending README-links changeset's patch line (a pending changeset naming a deleted package breaks `changeset version`) and the CONTRIBUTING.md package-table row that moved there from ui/README.md. Claude-Session: https://claude.ai/code/session_01JQwxbYonqfPMAts3ErwZAK Co-authored-by: Claude <noreply@anthropic.com>
Main added `notRead: ['packages/cli/README.md']` to the cli ratchet's markdown-input entry because the scanner resolved the bare `README.md` segment of the plugin-ai README path against that package. With the plugin-ai README gone the scanner no longer offers it, and the audit reports the entry stale. Claude-Session: https://claude.ai/code/session_01JQwxbYonqfPMAts3ErwZAK Co-authored-by: Claude <noreply@anthropic.com>
Seat note · contract review owed · seat
|
…-26wk5s # Conflicts: # pnpm-lock.yaml # ui/packages/plugin-ai/package.json
Seat note · contract review hand-off renewed · seat
|
|
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U Contract-review-claim: Triage seat, taking the hand-off that names this head ( Generated by Claude Code |
Contract reviewServed-tier: Inputs read in full: card #25921 body and all 27 comments (ruling A is the transferred comment ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgmentThe narrowing, read against the published spec on
Implemented-by: VERDICT: PASS Generated by Claude Code |
|
同意删除 |
|
确认删掉 .changeset/26080-readme-contributing-links.md 里 '@object-ui/plugin-ai': patch |
维护者速读(席位终稿)
席位意见:契约复核 PASS(6469104529, 席位核对ACCEPT · seat
Generated by Claude Code |
#27042 retired plugin-ai and its README, which carried 3 decidable and 1 site-absolute href; with the extension README this card removes, the floors read 126 and 39 on the merged tree. Claude-Session: https://claude.ai/code/session_01QSeKYm29SiQaonK2q8F7CS Co-authored-by: Claude <noreply@anthropic.com>
Requested by Warren · project thread
Part of #25921 (the plugin-ai item only; the card's other items stay open).
Supersedes #26365 (its commits are carried here unchanged, then
mainmerged and the changeset finished).Clause-②: no (narrowing)
Metadata-protocol: narrowed
Skills-docs: follow-up #27048 (the two
skills/objectui/guides/*mentions, kept out of this PR by ruling 6439038287)维护者速读
@object-ui/plugin-ai包;十个语言包删掉它的ai.*文案块;@object-ui/types里它的类型/zod 镜像改为@deprecated的never墓碑,三个节点类型按名拒收并给出处方。changeset 改用整包操作数@object-ui/plugin-ai#*。PACKAGE#*, D9 amendment) #26766 落地,按 6439038287 的「同意」改写 changeset 标记后门禁转绿。check-empty-changeset故意红着:合并 main 后待发的 26080 changeset 列着已删除的包,本 PR 删掉那一行,需要你确认。.changeset/25921-retire-plugin-ai.md(整包标记与 FROM 行)、.changeset/26080-readme-contributing-links.md(删掉的一行)、ui/packages/types/src/zod/ai.zod.ts(拒收 arm 与墓碑)。node scripts/check-adr-0087-registration.mjs --base origin/main,预期 exit 0,并打印verified: @object-ui/plugin-ai#* (package, ui/packages/plugin-ai/package.json)。'@object-ui/plugin-ai': patch这一行(包已删除,留着会让changeset version失败),然后按 Tier H 批准(改动超过 3,000 行)。What changes
ui/packages/plugin-ai/**, itspnpm-lock.yamlimporter and itsui/vitest.config.mtsalias..changeset/config.json.ai.*block (ai.nlQuery.*,ai.formAssist.*,ai.recommendations.*) is deleted from all ten packs.ui/packages/types/src/ai.tskeeps its nine exported names as@deprecatedneveraliases with the remedy, andAnySchemaloses the three node members. Inzod/ai.zod.tsthe three arms becomeretiredNodeType()refusal arms, listed inAnyComponentSchemaand not exported from the barrel. The eight published zod names stay exported as@deprecatedz.never()schemas that accept nothing; when they leave the published face is docs/adr: a sunset rule for @deprecated tombstones — 574 tags (504 in packages/types, 640 'never' members) with no rule for when a tombstone leaves the authoring face #25912's sunset rule.known-schema-types.tsloses the three keys.ui/content/docs/plugins/plugin-ai.mdxand itsmeta.jsonentry. The package-table row now lives in the rootCONTRIBUTING.md(main foldedui/README.mdinto it), and is removed there..changeset/25921-retire-plugin-ai.md:@object-ui/types,@object-ui/i18n,@object-ui/climinor, BREAKING. The ADR-0087 marker isnot-required (runtime-export-retired @object-ui/plugin-ai#*), and the three per-export FROM lines are one line naming the package (FROMthe packageTO nothing, the TO text kept)..changeset/26080-readme-contributing-links.md(landed on main after refactor(ui)!: retire@object-ui/plugin-aiand its three node types #26365 was built) listed'@object-ui/plugin-ai': patch. A pending changeset naming a deleted package breakschangeset version, so that one line is deleted. Nothing else in that note changes.Follow-up, not here (Tier H):
skills/objectui/guides/project-setup.mdandskills/objectui/guides/page-builder.mdstill name@object-ui/plugin-ai. They are governed, so they go in a separate PR after this one.Forced test edits (each follows the deletion, none relaxes a check)
ui/packages/types/src/__tests__/plugin-ai-retired-25921.test.ts: compile-time absence fromAnySchemaand thenevernames, the named refusal for each literal with its remedy, a firing control (buttonstill accepted), a generic-path control for an unknown literal, and the eight zod names accepting nothing.ai-zod-arms-10859.test.ts,ai-node-faces-agree-10874.test.ts,ai-zero-read-members-retired-8178.test.tsand the package's own test files.zod-mirror-parity.test.ts,arm-named-export-8784.test.ts,any-component-emit-headroom-11573.test.ts,component-docs-retired-handler-keys-7340.test.ts,content-channel-family-d-9256.test.ts,content-channel-parser-tier-clause-10928.test.ts,silence-clause-parser-tier-closure-10981.test.ts,ai-insights-retired-8800.test.ts: rows and counts that named the three nodes, as in refactor(ui)!: retire@object-ui/plugin-aiand its three node types #26365.ui/packages/cli/src/__tests__/registered-types-validate-ratchet-10859.test.ts: the "armed" case becomes a by-name refusal case with a generic-path control.ui/scripts/markdown-test-inputs.mjsfollows: the entries that read the plugin-ai README go, and so does thenotRead: ['packages/cli/README.md']that main added to the cli entry (the scanner found that path only through the plugin-ai README's bareREADME.mdsegment, so the audit reports it stale once the README is gone).clickableNonControlCensus-13461,iconOnlyButtonCensus-12143,runner-package-test-entry-3746,doc-version-claims;percent-storage-callers-11475loses its plugin-ai exclusion set.console-vite-alias-closure-4925.test.ts: its named negative control is now@object-ui/cli.select-type-check-scope.test.ts: its leaf-package fixture moves toplugin-markdown.ui/scripts/__tests__/package-files-exist.test.ts: main's side taken on merge. test(floors, ui): one shared floor per ui package population, one catalog entry floor, all at about two thirds #26576 moved both floors to the shared published-package constant, which a retirement does not move, so refactor(ui)!: retire@object-ui/plugin-aiand its three node types #26365's hand-lowered floors are gone.Tests
Readings at head 7040d92 (merge of main acc9c57)
pnpm --dir ui exec vitest run packages/types packages/i18n packages/cli: 511 files passed, 12453 tests passed, 13 skipped.pnpm --dir ui exec vitest run scripts/at 53dfa40: 178 files, 1 failed (markdown-test-inputs.test.ts, the stalenotReadabove), 5017 passed. Fixed in 7040d92; that file rerun: 17 / 17 passed.type-checkof@object-ui/types,@object-ui/i18n,@object-ui/cli(script names echoed): exit 0.pnpm --dir ui run type-check:scripts: exit 0.turbo run buildwith the root script's filters, 115 / 115 tasks.@object-ui/plugin-aiand its three node types #26365, its test unchanged here):RetiredNLQueryNodeSchemadeleted fromAnyComponentSchematurns exactly the twonl-querycases red (2 failed, 15 passed of 17); restored, blob equals HEAD.Acceptance notes
maskCommentsandpackageReference,ui/packages/types/src/zod/ai.zod.tsat this head names@object-ui/plugin-aiin code twice: both are the refusal remedy strings of the retired node arms (the text ruling A asks for). Every other mention inui/packages/types/src/zod/*.zod.tsis a comment. Predicate 2 judges the package at the merge base, where all four mentions on main are comments, so the gate is green. The seat ruled to proceed as is.(objectstack#25921). AGENTS.md says runtime strings carry no tracker number (check:doc-authoring); that gate is not in this diff's derived set and nothing derived refused it, so the strings are left as built.check-empty-changesetred by design. It refuses the one-line correction of.changeset/26080-readme-contributing-links.md(DELIBERATE CORRECTION class). The gate stays red until a maintainer confirms the correction on this PR.@object-ui/plugin-ai: NOT MEASURED; the changeset carries the FROM / TO line.ui/.changeset/still name@object-ui/plugin-ai; the root changesets config does not read that directory (ui/AGENTS.md), so they are untouched.plugin-aimentions underpackages/spec,packages/metadata-protocolandscripts/check-service-providers.mjsname the platform's own AI service plugin, not this package.Verification
node scripts/check-adr-0087-registration.mjs --base origin/main: exit 0,verified: @object-ui/plugin-ai#* (package, ui/packages/plugin-ai/package.json).pnpm changeset status: exit 0.pnpm install --frozen-lockfileexit 0 after the merge, andpnpm install --lockfile-onlyleavespnpm-lock.yamlbyte-identical (0plugin-aimentions).node scripts/pm/dispatch-gates.mjs --ran: 56 derived, 56 run, 0 NOT-MEASURED. Red:check-empty-changeset --base origin/main(by design, above) and the firstvitest run scripts/(fixed, above).check:dts-closure,check:dual-build-cjs-loadsandcheck:lean-entry-closureexit 3 or 1 before the build and 0 after it.node scripts/check-platform-checklist.mjs --changed-from origin/main: 0 anchored files in the change set.dispatch-gates --tier: no path-derived mandate (TIER_DEFAULT). Changed lines 7568 (+439 / −7129): over the 3,000-line threshold, so this lands by an authorized approval.Human Minimum
packages/specholds no runtime logic.pnpm lintpasses (CI-owned run).main, one pull request.packages/spectouched: not touched.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code