fix(deps): keep react and react-dom on one update so neither ships alone - #362
Merged
Merged
Conversation
`.github/dependabot.yml` deliberately left the runtime dependencies ungrouped so each arrives as its own reviewable PR. React makes that impossible for two of them: it refuses to run when `react` and `react-dom` disagree -- "Incompatible React versions: the react and react-dom packages must have the exact same version". Separate PRs therefore do not produce two independently reviewable updates; they produce one broken PR and one that cannot merge before it. #361 bumped react 19.2.8 without react-dom and failed 25 suites for exactly that reason, and this recurs on every React release. Grouping the two preserves what the ungrouped rule was actually for: this is still a runtime PR of its own, separate from dev-tooling, reviewed and dispositioned on its own. `@wxt-dev/module-react` stays ungrouped; it carries no such constraint. Adds `tests/repo/react-runtime-version-parity.test.ts` so the grouping does not rely on being remembered, following `node-runtime-types-alignment.test.ts`: one assertion against the resolved versions in `pnpm-lock.yaml`, which state what is installed and cannot be written as a range or commented out. Confirmed to fail when the lockfile is edited to the exact #361 mismatch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
lamemustafa
marked this pull request as ready for review
September 15, 2026 14:14
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
37 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Group
reactwithreact-dom(and their types) in Dependabot so a React update cannot arrive as two PRs that are each unmergeable without the other. Adds a lockfile-level regression test so the grouping does not depend on being remembered.Supersedes #361, which bumped
react19.2.8 → 19.3.0 while leavingreact-domat 19.2.8 and failed 25 suites.Root Cause / Decision Record
.github/dependabot.ymlgrouped by risk and deliberately left the runtime dependencies ungrouped, so each update reaching a taxpayer's browser would arrive as its own PR with its own disposition. That reasoning is right for@wxt-dev/module-react. It does not hold forreactandreact-dom, because React enforces exact-version equality between them at runtime:So ungrouping them does not produce two independently reviewable updates. It produces one PR that fails every component suite and a second that cannot be merged before it. This is not a one-off: it recurs on every React release, and #361 is the instance that surfaced it.
Smallest safe fix: put the four React packages in their own
reactgroup. This is not a relaxation of the risk rule — the group is still separate fromdev-tooling, still arrives as its own runtime PR, and is still dispositioned on its own. What changes is only that the two packages React requires to move together do move together.The rule is then removed from the category of things that must be remembered.
tests/repo/react-runtime-version-parity.test.tsasserts the resolvedreactandreact-domversions inpnpm-lock.yamlare equal, so a mismatch fails the suite however it arrives — a grouped update gone wrong, a manual edit, or a future config change that ungroups them again.The test asserts against the lockfile rather than the declared ranges in
package.json, following the reasoning already recorded intests/repo/node-runtime-types-alignment.test.ts: the lockfile states what is installed, cannot be expressed as a range, and cannot be commented out. Two mutually compatible^ranges can still resolve apart, so checking ranges would pass while broken.Scope
src/**change and no packaged-output change..github/dependabot.ymlcomments record why the exception exists.Pack Workflow Preflight
pnpm workflow:preflightwas run before editing/push, or the skip reason is documented.Sanchika Adoption Gate
Not applicable: no Sanchika adoption.
@sanchika/*packages or copied Sanchika guidance, Iread
sanchika/docs/adoption-pack.mdin the coordinated parent worktree.and records the Sanchika commit or copied guidance used.
../sanchika,sanchika/packages/*/src, or parentsource paths.
Privacy And Data-Flow Impact
Sensitive Surface Review
Chrome Web Store Impact
docs/PUBLICATION_READINESS.mdis checked.Verification
Run locally against this branch:
pnpm exec prettier --check .— "All matched files use Prettier code style!"pnpm exec eslint . --max-warnings 0— cleanpnpm exec tsc --noEmit— cleanpnpm exec vitest runVitest, verbatim:
The new guard was driven to failure before being trusted. With
pnpm-lock.yamledited to the exact #361 mismatch (react19.2.8,react-dom19.3.0), the test fails:The lockfile was restored immediately;
git diff pnpm-lock.yamlis empty and no lockfile change is part of this PR.Not run, and not claimed:
pnpm audit --audit-level high,wxt build/zip, package and ZIP verification, provenance and Store scripts. No packaged output changes here — the diff is one YAML config and one repo test.pnpm review:gate -- --strict-head-review --wait-head-review-ms 180000before merge/readiness claim; a missing Codex review blocks readiness:Left unchecked. Codex review capacity is exhausted until roughly 2026-09-19, so no current-head review can arrive. CI's own gate invocation passes
--allow-missing-head-review, so the required check does not depend on it.Artifact Evidence
PR Review Follow-Up
Screenshots
None. No user-facing surface changed.