Repository navigation
chore(deps): narrow the React peer range to ^19.0.0 (objectui#13465) - #13481
Conversation
Every workspace package that asks its host for React now declares `react` / `react-dom` as `^19.0.0` instead of `^18.0.0 || ^19.0.0`: 31 packages, 56 peer declarations (31 react + 25 react-dom). Nothing in the tree ever installed or tested React 18, so the 18 arm was a published promise with no test behind it. Maintainer ruling A on the card. Moves with it, because the repo pins the range in several places: - react-peer-range-norm-3741 test: the norm is now `^19.0.0`; - the 12 package README peer lines and doc-version-claims' ledger keys; - QUICK_REFERENCE.md's React row (the release-block test reads the majors); - AGENTS.md section 2 and its verbatim mirror in skills/objectui/SKILL.md; - create-plugin's generated peers, the plugin skeletons in the docs, the troubleshooting page and comments that cited the old range. One minor changeset per package with a breaking note (no `major`, per the version-alignment policy). Claude-Session: https://claude.ai/code/session_01Erxd3BYXhV2mQMatxGZ9yg Co-authored-by: Claude <noreply@anthropic.com>
"React 19" carries no version token the scan records, so the troubleshooting page and the skills Tech Stack mirror no longer make a claim the inventory excuses; the ratchet requires their entries to go. Claude-Session: https://claude.ai/code/session_01Erxd3BYXhV2mQMatxGZ9yg Co-authored-by: Claude <noreply@anthropic.com>
|
changeset-claim-re-read
|
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
维护者速读 · PR #13481 @
|
Contract reviewServed-tier: ① Derived judgments
② Semver level32 changesets, each ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Contract reviewServed-tier: Director seat, summon #49 (session ① Derived judgments
② Semver level32 changesets, one per package plus the shared ones; the one read in full ( ③ Boundary flags
Implemented-by: VERDICT: PASS
Generated by Claude Code |
|
Review label cleared · approval of record Director seat, summon #49 (session Generated by Claude Code |
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Requested by Elon · project thread
Fixes #13465
Clause-②: no
Metadata-protocol: none
维护者速读(草稿)
react/react-dom的 peer 依赖从^18.0.0 || ^19.0.0收窄到^19.0.0(实测 31 个包、56 条声明;卡上写的 33 个是旧计数)。AGENTS.md §2 和技能里的同一句「React 18+」改成「React 19」;脚手架 create-plugin 生成的新插件同样只声明 19。What changed
react+ 25react-dom) now read^19.0.0. Derived by any spelling oncd70b78: no other React peer spelling and no@types/reactpeer exists in the workspace.react-peer-range-norm-3741.test.ts:REACT_PEER_NORMis now^19.0.0, with a docblock paragraph saying why the 18 arm went.doc-version-claims.test.ts: the 12 package README peer lines are asserted verbatim against their manifests, so the READMEs move; ledger keys follow (PEER_19, the react-runtime prose line, the two plugin-skeleton samples). The twoReact 18+unanchored entries are deleted: "React 19" carries no version token the scan records, and the ratchet refuses an entry that outlives its claim.QUICK_REFERENCE.md: the React row reads19.x;quick-reference-current-release-4143.test.tsderives it from the peer majors.AGENTS.md§2 (governed): "React 18+ (Hooks)" → "React 19 (Hooks)", per the ruling.skills/**(published skills face), two files, net line delta 0, rewrite in place:skills/objectui/SKILL.md: the Tech Stack line is the verbatim mirror of AGENTS.md §2 (the doc-version-claims ledger states it is), so it moves with §2 to keep the two agent-facing texts in sync.skills/objectui/guides/plugin-development.md: the plugin skeleton'speerDependenciesnow say^19.0.0. A plugin built on@object-ui/*packages that only accept React 19 cannot honestly offer React 18 to its host; same change as the create-plugin generator below.@object-ui/create-plugin: a generated plugin's peers are^19.0.0(user-visible, own minor changeset). The hand-written skeleton incontent/docs/guide/plugins.mdmoves the same way.content/docs/guide/troubleshooting.md, two "Built with React 18+" lines inpackages/componentsdocs, and comment-only edits inuseGlobalUndo(@object-ui/react),inline-markdown(@object-ui/components), andscaffold-dependenciesplus its test (@object-ui/cli; no release needed for a comment, the gate is satisfied by the other changesets)..changeset/13465-react-peer-*.md: oneminorper package with a Breaking note (nomajor, per 版本号策略).pnpm-lock.yamlis unchanged: workspace importers do not record peer ranges, andpnpm install --frozen-lockfilepassed on the narrowed manifests.Gates run locally (head
08400c4)Acceptance notes
Not done, out of scope: no runtime code changes here. Code that exists only to keep React 18 working, if any, was not searched for; it is a possible cleanup, not a defect.
dropped — no defect.The peer narrowing of a published range owes a contract-review-tier review before the queue (claim 6391446264); the skills/** hunk owes the same (seat comment 6391465213).
Adds no product-specific widget, dialog, hook or string (see AGENTS.md › Product-neutral renderer)
🤖 Generated with Claude Code
https://claude.ai/code/session_01Erxd3BYXhV2mQMatxGZ9yg