Repository navigation
[0.88] Fix cache-key test failing on release branches #1416
Copy link
Copy link
Closed
Labels
Type Pick RequestPick requests to include commits inside a React Native releasePick requests to include commits inside a React Native release
Description
Activity
- addedType Pick RequestPick requests to include commits inside a React Native releasePick requests to include commits inside a React Native release
on Sep 16, 2026 Thank you for opening a new React Native Pick Request.
These are the criteria we follow when accepting or rejecting a code change into a React Native release branch (source).
If your Pick Request does not satisfy the criteria below, please close it as it will not be considered.
✅ Which Pick Requests we accept
- ✅ Fixes for regressions to core APIs. Examples:
- A core component is behaving differently between versions 0.X and 0.X-1
- The
TurboModule.getEnforcingfunction is throwing an unexpected assertion error.
- ✅ Fixes to bugs in core React Native. Examples:
- Breakpoints in React Native DevTools not working correctly in the debugger
- Fast Refresh not working as expected
- Metro bundler not starting properly or ignoring the configuration file
- Buttons that are not clickable
- ✅ Fixes to APIs used by third-party libraries and out-of-tree platforms. Examples:
- An API used by
react-native-macosis not behaving as expected or is regressing
- An API used by
- ✅ Bump of patch version of dependencies. Example:
- Bump Gradle from 8.11.0 to 8.11.1
- ✅ Fixes for low/high severity security vulnerabilities. Example:
- Bump Gradle from 8.11.0 to 8.12.0 if there is a security vulnerability in 8.11 and no 8.11.x version contains the same fix.
- ✅ Fixes and reverts of accidental breaking changes. Example:
- Reverting or fix-forwarding a Kotlin migration of a file (e.g.
ReactRootView.java) if it is causing a breaking change for the React Native ecosystem.
- Reverting or fix-forwarding a Kotlin migration of a file (e.g.
- ✅ Performance improvements. Examples:
- Fixing unnecessary re-renders in FlatList.
- ✅ Any Pick Request if the release is still in RC0 (after RC1, the previously listed criteria apply)
❌ Which Pick Requests we don't accept
- ❌ Any Pick Request that introduces a breaking change after RC1. Example:
- A bugfix that contains a refactoring, resulting in changes to the public API of a class
- ❌ Any Pick Request that introduces a new feature after RC1. Example:
- A commit that introduces a new API or a specific feature for a component.
- ❌ Bump of major or minor version of dependencies. Examples:
- Bump Gradle from 8.11.0 to 8.12.0
- Bump Gradle from 8.11.0 to 9.0.0
- ❌ Bump of a dependency to a pre-release version. Example:
- Bump Gradle from 8.11.0 to 8.11.1-beta.1
- ❌ Any Pick Request that introduces changes to the React Native testing infrastructure after RC1. Examples:
- Changes to GitHub Actions workflows to optimize them, even if they are on main.
- Changes to the logic used to publish packages to NPM or Maven Central
- ❌ Pick Request composed of multiple commits that have several merge conflicts.
- If your Pick Request is too complex to apply to the release branch, it will be rejected.
- ❌ Any non-critical improvement that landed on main.
- These will generally ship in the following version unless they fit one of the criteria above.
- ❌ Any Pick Request considered a "nice to have".
- Even one-line changes carry a risk of destabilizing and further delaying the release.
ℹ️ What makes for a good Pick Request
In order for your Pick Request to be considered, please do the following:
- ℹ️ Limit your Pick Request to one commit from
main, or one PR against the release branch. - ℹ️ Include a clear explanation of why your Pick Request should be considered, ideally referencing one of the criteria above.
- ℹ️ Target only one minor version of React Native (e.g. [0.76]). To have your Pick Request applied to more versions, please open separate Pick Requests.
- ✅ Fixes for regressions to core APIs. Examples:
Picked manually into
0.88-stableasad7b17d8eef, and forward-ported tomainas6e862f9a781(#58546).- moved this from Inbox to Done / Picked in React Native 0.88 Releases
on Sep 16, 2026
Metadata
Metadata
Assignees
Labels
Type Pick RequestPick requests to include commits inside a React Native releasePick requests to include commits inside a React Native release
Type
Projects
- StatusShow more project fieldsDone / Picked
Target Branch
0.88
Link to commit or PR to be picked
6e862f9a781onmain, D120209439)0.88-stableasad7b17d8eefDescription
Bookkeeping record. Already applied to both
0.88-stableandmain, so there is nothing to action. Filing it so the 0.88 list is complete.The problem
test_jsfailed on every0.88-stablerun, on both Node versions, on a single assertion inpackages/react-native-babel-preset/src/__tests__/cache-key-test.js:getCacheKeyshort-circuits for published releases:The test called it twice with different package contents and asserted the keys differ. On a release branch the version is
0.88.0-rc.x, which does not end in-main, so both calls return the same version string and.not.toBecannot pass. The test's own name says it: "cache key includes package metadata for main builds". It asserted main-only behaviour with no version guard.Why 0.88 and not earlier
The test was added by #58251 (
9c6efa25c1b) on 2026-09-02, five days before the 0.88 branch cut. It does not exist on0.87-stableor earlier, so 0.88 is the first release branch to inherit it. It has been red since 0.88.0-rc.0.This is not "how release branches are". It is a test bug that would have hit 0.89 too, the moment its version stopped ending in
-main.The fix
Assert the property that actually holds for each case, rather than skipping:
This also adds coverage for the published-release path, which previously had none.
Both branches were verified, not just the one that runs on the release branch. On
0.88.0-rc.0the release assertion passes; temporarily stamping the package version to0.89.0-mainmakes the original main-build assertion pass. So neither branch is vacuously green.Result
test_jsis green on0.88-stable. This was the last red job before rc1 was cut.Unusual ordering worth noting: this was applied to
0.88-stablefirst to unblock rc1, then forward-ported tomain, rather than landing onmainand being picked. Both are now done, so0.89will inherit the fix at its branch cut.