chore: merge React Native 0.87 fork point - #3037
Open
Saad Najmi (Saadnajmi) wants to merge 559 commits into
Open
Saad Najmi (Saadnajmi) wants to merge 559 commits into
Saad Najmi (Saadnajmi) wants to merge 559 commits into
Conversation
Summary: This makes the shell to use escape interpretation by setting `echo -e "..."`. For zsh shell, this often works out of the box. For other shells like bash, we may need to set it explicitly. ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: [ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [INTERNAL] [FIXED] - allow escape interpretation for shells Pull Request resolved: react#57114 Test Plan: - CI Passes - Verified Locally on template app https://github.com/user-attachments/assets/4c8c6bf7-1cf2-4bd8-b094-651c44578ae0 Reviewed By: cipolleschi Differential Revision: D107904889 Pulled By: cortinico fbshipit-source-id: 2222f589ecc149a82d5067e0a2198b9c1a17ffcb
…eact#57130) Summary: Pull Request resolved: react#57130 The 0.86 release notes were split across four release-candidate sections (rc.0 through rc.3). Merge them into one v0.86.0 section without changing any entry text: - Combine all four RC sections under a single v0.86.0 heading - Organize entries under the standard Added / Changed / Deprecated / Fixed / Security categories, each with general / Android specific / iOS specific subsections - Sort entries within every subsection by their bold prefix - No entries were added, removed, or reworded (124 entries preserved) Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D107887110 fbshipit-source-id: c63f6fc7310eac0a58cc04ec25347093717b2175
Summary: fixes react/yoga#1659. **problem:** `YGNodeFree` called `owner->removeChild(node)` to detach the node from its parent, but never called `owner->markDirtyAndPropagate()`. the parent's layout stayed stale after the free, so a subsequent `YGNodeCalculateLayout` wouldn't recompute it. `YGNodeRemoveChild` has always called `markDirtyAndPropagate` — `YGNodeFree` was just missing the same call. `YGNodeFreeRecursive` was already correct for its recursive child removals (it calls `YGNodeRemoveChild` internally), but the terminal `YGNodeFree(root)` inherited the bug. **fix:** added `owner->markDirtyAndPropagate()` after `node->setOwner(nullptr)` in `YGNodeFree`. regression tests: `dirty_parent_when_child_freed` and `dirty_parent_when_subtree_freed_recursive` in `YGDirtyMarkingTest.cpp`. bypass-github-export-checks ## Changelog [General][Changed] - mark parent dirty when child is freed X-link: react/yoga#1969 Reviewed By: javache Differential Revision: D107895988 Pulled By: cipolleschi fbshipit-source-id: 5dce726e13147e8b7735bf72c441e80bb0c9b5a3
…ct#57116) Summary: Pull Request resolved: react#57116 ## Changelog: [General][Breaking] Compile out RuntimeScheduler_Legacy under RCT_REMOVE_LEGACY_ARCH Guard the legacy RuntimeScheduler implementation behind the `RCT_REMOVE_LEGACY_ARCH` macro instead of deleting it. `RuntimeScheduler_Legacy.h`/`.cpp` remain in the tree, but their contents — along with the feature-flag-based selection between the legacy and modern schedulers in `RuntimeScheduler.cpp`, `NativeMutationObserver.cpp`, and `Task.h` — are wrapped in `#ifndef RCT_REMOVE_LEGACY_ARCH`. When the macro is defined, the legacy code is compiled out and `RuntimeScheduler` unconditionally instantiates `RuntimeScheduler_Modern`; when it is not defined, behavior is unchanged. The C++ API snapshots are updated to drop the `RuntimeScheduler_Legacy` symbols from the new-arch surface, and the parameterized scheduler test (`RuntimeSchedulerTest`) only runs the modern configuration when the legacy arch is compiled out. Reviewed By: rubennorte Differential Revision: D107777881 fbshipit-source-id: 2b50711ab3af182edc45a87fd232d96a0f879837
Summary: `textDecorationStyle` is declared on `TextStyleIOS` in the public types but `wavy` is silently dropped: Fabric's C++ enum doesn't include `Wavy`, and UIKit's `NSUnderlineStyle` has no native wavy pattern bit. Separately, `dotted` and `dashed` map to `NSUnderlineStylePatternDot` / `NSUnderlineStylePatternDash` which don't match browser geometry on iOS. This PR adds `TextDecorationStyle::Wavy` to the shared Fabric primitives / conversions (also unblocks the same value on Android, see companion PR react#56768) and renders wavy / dotted / dashed decorations with custom Core Graphics paths. **Implementation:** - Wavy ranges are tagged with a custom `RCTCustomDecorationAttributeName` (storing the line kinds, stroke color, and style key) in `RCTAttributedTextUtils.mm` and painted by `RCTTextLayoutManager.mm` after `drawGlyphsForGlyphRange:`. Wavy uses an adaptation of WebKit's formula from `Source/WebCore/style/InlineTextBoxStyle.cpp` (`controlPointDistance = thickness * 1.5 + 0.5`, one cubic Bezier per wavelength, control points at the midpoint above and below the y-axis). At iOS point sizes the literal Blink amplitude renders as a very pronounced wave because Core Graphics paints in points (not device pixels), so the constants are dialed back to read as a clear-but-subtle browser-style wave at typical text sizes. - Dotted uses a custom CG path with a zero-length dash + round line caps, producing actual circular dots at `2 * thickness` spacing. - Dashed uses a custom CG path with `[2 * thickness, thickness]` intervals — short rectangular dashes with a tight gap, closer to Safari's geometry than UIKit's default. - Solid and double continue to use UIKit's native `NSUnderlineStyle` pattern bits, so this PR does not touch the long-standing iOS Arial+bold solid-underline rendering bug tracked in react#53935. - The wavy drawing loop iterates `while x < x2` so the final cycle continues through the last character (including trailing punctuation that would otherwise be visually uncovered when the run width is not an integer multiple of the wavelength). Companion PRs (independent, also targeting `main`): - react#56767 — fix(android): textDecorationColor on underlines + strikethroughs. Resolves react#4579 (2015). - react#56768 — feat(android): textDecorationStyle solid/double/dotted/dashed/wavy. Shares the `TextDecorationStyle::Wavy` enum addition; whichever lands first leaves the other with a trivial conflict to resolve. ## Changelog: [IOS] [ADDED] - `textDecorationStyle: 'wavy'` for `<Text>` (custom CoreGraphics path) [IOS] [CHANGED] - `textDecorationStyle: 'dotted'` and `'dashed'` for `<Text>` render with custom CoreGraphics paths instead of UIKit pattern bits, matching browser geometry more closely Pull Request resolved: react#56769 Test Plan: See the screenshot comparisons here: https://www.internalfb.com/compare-screenshots-from-diff/D104680636 {F1990979243} ---- Side-by-side comparison on iPhone 17 sim (iOS 26.4) of a `<Text>` with `textDecorationLine="underline"` and `textDecorationStyle` cycling through `solid` / `double` / `dotted` / `dashed` / `wavy`, verified against Safari rendering of the same CSS. Trailing periods now fall under the wavy stroke. Verified with `textDecorationColor` set distinct from the foreground color. ```tsx <Text style={{ color: 'black', textDecorationLine: 'underline', textDecorationStyle: 'wavy', textDecorationColor: '#ff00aa', }}> Hello </Text> ``` Reviewed By: cipolleschi Differential Revision: D104680636 Pulled By: cortinico fbshipit-source-id: ac96e5b36530f7d243a4b85a67c576b62fe99866
Summary: Adds a temporary debug step to both jobs of the reusable npm publish workflow that requests the GitHub Actions OIDC token (npm audience) and prints its decoded claims. This makes it possible to compare the token claims against the npm Trusted Publisher configuration when the OIDC exchange fails. Only the decoded claims are printed, never the raw token. Changelog: [Internal] bypass-github-export-checks Reviewed By: cortinico, cipolleschi Differential Revision: D108108630 fbshipit-source-id: 6ae8be8c9e9e2e611b6941b336230a21f876e134
Summary: iOS I18nManager.isRTL is not wrong but often misinterpreted. This PR adds a comment to clarify what the native call does, since Apple doesn't. Undocumented behavior made me waste several hours hunting for an i18n issue that incorrectly made me think RN had a bug. It's impossible to know this code is working as intended as original commit does not state why the code exist, only that it was changed, no mentions in changelogs, and no official docs from neither RN nor from Apple explains the combined or individual behavior. ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: [ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [iOS] [Added] - Added comment to clarify why i18nManager.isRTL may not return the expected value Pull Request resolved: react#51661 Test Plan: This project demonstrates that compiling and running will give you the "wrong"/unexpected isRTL value when using Hebrew https://github.com/scarlac/rtl-test When Hebrew is added to the Xcode project under "Internationalization" then you will observe that `.isRTL` starts returning `true`. Note that Xcode has a nasty caching bug that means that removing Hebrew: 1. Will Not remove Hebrew (you need to remove it twice) 2. Will Not cause `.isRTL` to revert behavior The solution is to remove Hebrew 2x, and then to clear DerivedData (or Product -> Clean Build Folder..., or CMD+Shift+K) In addition to these issues, it's important to note that calling .forceRTL or .allowRTL are persisted across restarts. This is clearly intentional but also not clearly documented, so you cannot "clear" these states. A reinstall is necessary, or a counter-value call is necessary. The demo project does not use these calls, so it's not an issue there. Reviewed By: javache Differential Revision: D108129627 Pulled By: cortinico fbshipit-source-id: 34f5b5509f48c0f102d4234f0315c5f58e30e773
…erface (react#57159) Summary: The hand-written TypeScript types declare only **12 of the 20** pointer event handlers that `ViewProps` actually exposes (per the Flow source and the generated `react-native-strict-api` types). The `PointerEvents` interface in `Libraries/Types/CoreEventTypes.d.ts` is missing: - `onPointerOver` / `onPointerOverCapture` - `onPointerOut` / `onPointerOutCapture` - `onGotPointerCapture` / `onGotPointerCaptureCapture` - `onLostPointerCapture` / `onLostPointerCaptureCapture` These are part of the W3C Pointer Events API. They are declared in the Flow source — `Libraries/Components/View/ViewPropTypes.js` (all typed `(e: PointerEvent) => void`) — and in the generated `react-native-strict-api` types, but were missing from the hand-written TypeScript types, so TypeScript users get a type error using them on any built-in component: ``` Property 'onPointerOver' does not exist on type '... ViewProps'. Did you mean 'onPointerMove'? ``` This adds the 8 missing handlers to the `PointerEvents` interface (matching the existing 12) and a type test covering them. ## Changelog: [GENERAL] [FIXED] - Add missing pointer event handler types (`onPointerOver`, `onPointerOut`, `onGotPointerCapture`, `onLostPointerCapture`, and their `*Capture` variants) to the TypeScript types Pull Request resolved: react#57159 Test Plan: `yarn test-typescript` passes. Verified before/after with `tsc -p packages/react-native/types/tsconfig.json`: - **Before** (props absent): the added type test fails with `Property 'onPointerOver' does not exist on type '... ViewProps'`. - **After**: passes — `<View onPointerOver={e => e.nativeEvent.pointerId} … />` type-checks for all 8 handlers, with the event correctly inferred as `PointerEvent`. Reviewed By: huntie Differential Revision: D108114655 Pulled By: fabriziocucci fbshipit-source-id: 08d364d2e156953027c0d951ab3d895a1eeab159
Summary: X-link: react#57133 `JSIndexedRAMBundle` was a deprecated legacy-architecture class (annotated `[[deprecated("This API will be removed along with the legacy architecture.")]]` and guarded by `#ifndef RCT_REMOVE_LEGACY_ARCH`) for parsing indexed RAM bundles. It was only ever instantiated by `Instance::loadRAMBundleFromString` and `Instance::loadRAMBundleFromFile`, and those two `Instance` methods have no callers anywhere in fbsource: the old Android entry point `CatalystInstanceImpl` that used to call them has been deleted, and the new architecture (`ReactInstance` / bridgeless) routes `loadScriptFromFile` through `loadJSBundleFromFile` in the new runtime, never touching the legacy `Instance`. The only remaining user was its own unit test. This removes `JSIndexedRAMBundle` and the two dead `Instance` RAM-bundle loaders that referenced it: - Delete `JSIndexedRAMBundle.cpp`, `JSIndexedRAMBundle.h`, and `JSIndexedRAMBundleTest.cpp`. - Remove `loadRAMBundleFromString` / `loadRAMBundleFromFile` from `Instance.cpp` / `Instance.h` and drop the now-unused include. - Drop `JSIndexedRAMBundle.h` from `CXXREACT_PUBLIC_HEADERS` in `cxxreact/BUCK`. - Update the committed C++ API snapshots accordingly. The broader legacy RAM-bundle machinery (`RAMBundleRegistry`, `JSModulesUnbundle`, `Instance::loadRAMBundle`, `JSIExecutor::setBundleRegistry`) is left in place; it belongs to the same `RCT_REMOVE_LEGACY_ARCH` legacy bridge and can be removed as a follow-up. Changelog: [Internal] Reviewed By: javache, mdvacca Differential Revision: D108001933 fbshipit-source-id: 4b0f12258e8caff1991847a4bb211e94fbecefa8
Summary: X-link: react#57125 Fixes a crash (`java.lang.RuntimeException` via `NoSuchElementException`) in `SkewMatrixHelper.isAffine2DTransformWithSkew` and `buildAffine2DMatrix` when a transform array contains an empty map entry (no keys). Changelog: [Android][Fixed] Fix crash in SkewMatrixHelper Reviewed By: Abbondanzo Differential Revision: D107763077 fbshipit-source-id: d61819e875e2334c6d6b121aba1876ec3153c002
Summary: X-link: react#57134 `telemetryTimePointToSecondsSinceEpoch()` in `ReactCommon/react/utils/Telemetry.h` was a `static inline` helper that converted a `TelemetryTimePoint` to seconds since the UNIX epoch, but it had no callers anywhere. This is a pure dead-code removal. The sibling `clockCast` helper it used is left in place (it remains part of the public API surface). Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012910 fbshipit-source-id: 5361ef87aaae3c676b542059c0a9d6475b33de45
Summary: X-link: react#57135 `ClearableSynchronizedPool` (an `internal` Kotlin class in `ReactAndroid/.../common/`) was a variant of androidx `Pools.SynchronizedPool` adding a `clear()` method, but it was never instantiated or referenced anywhere. The live event pools (`OnLayoutEvent`, `PointerEvent`, `TouchEvent`, `ScrollEvent`) use androidx `SynchronizedPool` directly. This removes the orphaned class. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012905 fbshipit-source-id: d5972b4c47d054310c8b7803482fa4e6b7a9928e
Summary: X-link: react#57136 `ReactRootView.simulateAttachForTesting()` was a package-private `VisibleForTesting` helper that set up the attach flags and dispatchers, but no test or production code ever called it. `RootViewTest` exercises `startReactApplication`/`unmountReactApplication` and the sibling `simulateCheckForKeyboardForTesting`, never this method. This removes the orphaned helper. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012908 fbshipit-source-id: ee550f66fae07bfeb75fd59b85d5d812fea7e2c1
Summary: X-link: react#57145 `HostTargetController::installPerfIssuesBinding()` was declared in `jsinspector-modern/HostTarget.h` but had no definition anywhere and no callers. (`HostTargetController` is `final`, so the method is not an override.) A declared-but-never-defined non-virtual member cannot be invoked — any call would be a link error — so this is unreachable dead code. The unrelated, live `HostTarget::installPerfIssuesBinding` (a different class) is left intact. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012907 fbshipit-source-id: 5c7f14a7956f67e3e884a32f95aa2e50fd0f3ea6
Summary: X-link: react#57143 `RAMBundleRegistry::singleBundleRegistry` was a static factory that wrapped the public `RAMBundleRegistry` constructor, but it had no callers anywhere. Objects are constructed via the public constructor directly. This removes the orphaned factory; the sibling `multipleBundlesRegistry`, the constructor, `MAIN_BUNDLE_ID`, `registerBundle`, `getModule`, and `getBundle` are all left intact. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012903 fbshipit-source-id: 5d8f18ebce2bb19abd124dbb7c9eda60baa0f272
Summary: X-link: react#57137 `RAMBundleRegistry::multipleBundlesRegistry` was a static factory wrapping the public `RAMBundleRegistry` constructor (the one taking a main bundle plus a factory callback), but it had no callers anywhere. Registries are constructed via the public constructor directly. With the sibling `singleBundleRegistry` already removed, this deletes the last orphaned static factory; the constructor and the rest of the class remain intact. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012906 fbshipit-source-id: 7bb403ff7660317f0f5b422dca140ac69e048dac
Summary: X-link: react#57142 `StartupLogger::getRunJSBundleEndTime()` was a public getter that returned the `runJSBundleEndTime` member, but it had no callers. `NativePerformance` is the only consumer of `StartupLogger` and reads the start-time getters plus `getAppStartupEndTime`, never this end-time getter. This removes the dead getter. The backing member `runJSBundleEndTime` is kept because `logStartupEvent`/`reset` still write it. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012912 fbshipit-source-id: ac6348b8223fba8695843340e99d7e277bf4f60a
Summary: X-link: react#57140 `StartupLogger::getInitReactRuntimeEndTime()` was a public getter returning the `initReactRuntimeEndTime` member, but it had no callers. `NativePerformance` (the only consumer of `StartupLogger`) never reads it. This removes the dead getter; the backing member `initReactRuntimeEndTime` is kept because `logStartupEvent`/`reset` still write it. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012904 fbshipit-source-id: 56a6710c485a926caf82ecb1cc08e845571b2dd8
Summary: X-link: react#57138 `getWarningHighlightColor` in `LogBox/UI/LogBoxStyle.js` was an exported color helper with no importers. It is a duplicate of the live `getHighlightColor` (identical `rgba(252, 176, 29, ...)` value), which is the one actually used by LogBox UI. This removes the dead duplicate. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012913 fbshipit-source-id: dd22adcf191284eb3c81778f92a8c72be15f9d30
Summary: X-link: react#57139 `RCTJSCSetOptionType` was a file-local `using` alias (`BOOL (*)(const char *)`) in `RCTPerfMonitor.mm` that was never referenced. The concrete `RCTJSCSetOption` function is called directly at its two call sites; no code ever used the function-pointer typedef. This removes the dead alias. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012902 fbshipit-source-id: 2d8b207c6d216356a5b4eef9b71effda47db5744
Summary: X-link: react#57141 `RCTImageStoreManager.h` declared `RCT_EXTERN void RCTEnableImageStoreManagerStorageQueue(BOOL enabled);`, but no definition exists anywhere in the tree and nothing calls it. A declared-but-never-defined external function is uncallable (any use would be a link error), so this is unreachable dead code. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012909 fbshipit-source-id: 807a5dd83616bf277c17f3832a65f92bc6f856b9
Summary: Pull Request resolved: react#57163 [changelog](https://github.com/facebook/flow/blob/main/Changelog.md) Changelog: [Internal] Reviewed By: panagosg7 Differential Revision: D108172771 fbshipit-source-id: 9e3bc0d869e297b3b92713783356d0af58d07b91
Summary: if you check the search results you won't find any usages of `UTFSequence` module. Also it wasn't documented. So, it can be treated as dead-code and need to be removed from RN package ```bash open https://github.com/search?q=%22UTFSequence.BOM%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_KATAKANA%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NEWLINE%22&type=code open https://github.com/search?q=%22UTFSequence.NBSP%22&type=code open https://github.com/search?q=%22UTFSequence.PIZZA%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_LEFT%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_RIGHT%22&type=code ``` In RN repo in used in one places and can be replaced with string litaral: https://github.com/facebook/react-native/blob/8bcfb3ba1c16b1ba45058798bf43ecdc9bd42d3a/packages/react-native/Libraries/LogBox/Data/parseLogBoxLog.js#L109 ## Changelog: [GENERAL] [DEPRECATED] - Mark undocumented `UTFSequence` module as deprecated X-link: react#57122 Reviewed By: zeyap Differential Revision: D108005122 Pulled By: javache fbshipit-source-id: 0641b1cd90cc9c4924a4afb3779a94b58e7153d4
Summary: Chronos Job Instance ID: 1125908308267201 Sandcastle Job Instance ID: 58546795604338354 Processed xml files: android_res/com/facebook/fds/listcell/res/values/strings.xml android_res/com/facebook/fds/contextualmessage/res/values/strings.xml android_res/com/bloks/foa/cds/bottomsheet/strings/res/values/strings.xml android_res/com/facebook/fds/floatingpivotcta/res/values/strings.xml android_res/com/facebook/components/list/fb/fragment/res/values/strings.xml ../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/views/uimanager/values/strings.xml ../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/systeminfo/values/strings.xml android_res/com/facebook/video/components/feed/res/values/strings.xml android_res/com/facebook/runtimepermissions/res/values/strings.xml android_res/com/facebook/notifications/res/values/strings.xml android_res/com/facebook/ui/mainview/res/values/strings.xml android_res/com/facebook/navigation/communitypanel/res/values/strings.xml android_res/com/facebook/fds/pivotlink/res/values/strings.xml android_res/com/facebook/fds/subnavigationbar/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/brandasset/res/values/strings.xml android_res/com/facebook/events/create/loading/res/values/strings.xml android_res/com/facebook/widget/titlebar/res/values/strings.xml android_res/com/facebook/reportaproblem/res/values/strings.xml android_res/com/facebook/fds/inputchip/res/values/strings.xml android_res/com/facebook/fds/actionchip/res/values/strings.xml android_res/com/facebook/fds/composer/res/values/strings.xml android_res/com/facebook/oxygen/preloads/integration/tosacceptance/res/values/strings.xml android_res/com/facebook/bizapp/auth/res/values/strings.xml android_res/com/facebook/bizapp/login/res/values/strings.xml android_res/com/facebook/playground/common/fblogin/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/textinput/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/navbar/res/values/strings.xml android_res/com/facebook/bootstrap/app/res/values/strings.xml android_res/com/facebook/secretgarden/app/res/values/strings.xml android_res/com/facebook/mig/dialog/alert/res/values/strings.xml android_res/com/facebook/presence/status/res/values/strings.xml android_res/com/facebook/fds/progressbar/res/values/strings.xml android_res/com/facebook/screencast/res/values/strings.xml android_res/com/facebook/bugreporter/core/res/values/strings.xml android_res/com/facebook/bugreporter/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/searchfield/res/values/strings.xml android_res/com/facebook/analytics/view/tracking/res/values/strings.xml android_res/com/facebook/webview/res/values/strings.xml android_res/com/facebook/katana/internsettings/sandboxpicker/res/values/strings.xml libraries/bloks-core/rendeer/res/values/strings.xml libraries/bloks-debug/com/bloks/debug/res/values/strings.xml android_res/com/facebook/katana/res/values/strings.xml android_res/com/facebook/account/switcher/res/values/strings.xml android_res/com/facebook/login/res/values/strings.xml android_res/com/facebook/account/recovery/res/values/strings.xml android_res/com/facebook/account/common/res/values/strings.xml android_res/com/facebook/growth/res/values/strings.xml android_res/com/facebook/wem/res/values/strings.xml android_res/com/facebook/timeline/ui/common/res/values/strings.xml android_res/com/facebook/photos/editgallerylauncher/res/values/strings.xml android_res/com/facebook/photos/crop/res/values/strings.xml android_res/com/facebook/fb4a/base/res/values/strings.xml ../arvr/libraries/ocui/res/values/strings.xml android_res/com/oculus/auth/authenticator/meta/res/values/strings.xml android_res/com/oculus/horizon/platformplugin/res/values/strings.xml java/com/oculus/horizon/platform/res/known_signer_res/values/strings.xml android_res/com/oculus/horizon/try_before_you_buy/res/values/strings.xml android_res/com/oculus/horizon/common/res/values/strings.xml android_res/com/oculus/horizon/linkedaccounts/res/values/strings.xml android_res/com/oculus/auth/authenticator/work/res/values/strings.xml android_res/com/oculus/auth/authenticator/threadssso/res/values/strings.xml android_res/com/oculus/auth/authenticator/oculus/res/values/strings.xml android_res/com/oculus/auth/authenticator/instagramsso/res/values/strings.xml android_res/com/oculus/auth/authenticator/horizonworldsplatform/res/values/strings.xml android_res/com/oculus/auth/authenticator/facebooksso/res/values/strings.xml android_res/com/oculus/auth/authenticator/facebook/res/values/strings.xml android_res/com/oculus/demoapp/res/values/strings.xml android_res/com/facebook/wearable/sdk/watchface/res/values/strings.xml android_res/com/facebook/wearable/common/wds/switchbutton/res/values/strings.xml android_res/com/facebook/wearable/apps/weather/res/values/strings.xml android_res/com/facebook/wearable/common/watchface/complications/res/values/strings.xml android_res/com/facebook/wearable/common/watchface/res/values/strings.xml android_res/com/facebook/wearable/apps/weather/panel/res/values/strings.xml android_res/com/facebook/wearable/apps/mockappmedium/res/values/strings.xml android_res/com/instagram/ui/common/res/values/strings.xml android_res/com/instagram/actionbar/strings/res/values/strings.xml android_res/com/instagram/tabs/strings/res/values/strings.xml android_res/com/instagram/igds/newbadge/res/values/strings.xml android_res/com/instagram/avatar/strings/res/values/strings.xml android_res/com/instagram/icons/igax/res/values/strings.xml android_res/com/instagram/debug/strings/res/values/strings.xml android_res/com/instagram/language/strings/res/values/strings.xml android_res/com/instagram/util/number/strings/res/values/strings.xml android_res/com/meta/metaai/imagine/memu/permissions/res/values/strings.xml android_res/com/instagram/creation/genai/magicmod/model/strings/res/values/strings.xml android_res/com/instagram/common/timeformat/strings/res/values/strings.xml android_res/com/instagram/bugreporter/strings/res/values/strings.xml android_res/com/instagram/homecoming/feeds/inboxtabs/strings/res/values/strings.xml android_res/com/instagram/zero/banner/strings/res/values/strings.xml android_res/com/instagram/voice/voicemessagebar/strings/res/values/strings.xml android_res/com/instagram/homecoming/feeds/feedpills/strings/res/values/strings.xml android_res/com/instagram/homecoming/feeds/mergedfeeds/strings/res/values/strings.xml android_res/com/instagram/unifiedvideo/scrubber/strings/res/values/strings.xml android_res/com/instagram/ui/mediaactions/strings/res/values/strings.xml android_res/com/instagram/zero/strings/res/values/strings.xml android_res/com/instagram/ui/dialog/strings/res/values/strings.xml android_res/com/instagram/ui/text/strings/res/values/strings.xml android_res/com/instagram/ui/menu/strings/res/values/strings.xml android_res/com/instagram/igds/dialog/res/values/strings.xml android_res/com/instagram/igds/headline/strings/res/values/strings.xml allow-large-files ignore-conflict-markers opt-out-review drop-conflicts Differential Revision: D108245950 fbshipit-source-id: c26a5a75547f93955b7ec924772a3e78dadea4a7
…t-native (react#57167) Summary: Pull Request resolved: react#57167 Update GitHub Actions workflow files to reflect React Native's migration from `facebook/react-native` to `react/react-native`. Changes the fork-prevention guards (`github.repository == 'facebook/react-native'`) to use the new org across 17 workflow files (28 occurrences total), plus updates the `repo_owner` parameter in the issue monitoring workflow. Changelog: [Internal] Reviewed By: fabriziocucci Differential Revision: D108246445 fbshipit-source-id: 010631838a05e366da525aa765d3ea4376f9d145
…tate and updatePadding (react#57181) Summary: Pull Request resolved: react#57181 ## Summary Fixes `RetryableMountingLayerException: Unable to find viewState for tag N. Surface stopped: false` crashing `com.oculus.firsttimenux` from the Fabric batch-mount path. Logview link: [252c85116a7ab5c4ec93ef3c3373cf9d](https://www.internalfb.com/logview/system_vros_crashes/252c85116a7ab5c4ec93ef3c3373cf9d) ## Root cause `IntBufferBatchMountItem.execute` dispatches batched mount instructions. When a view tag is transiently missing from the registry (async race between the JS commit and native mount — surface teardown / out-of-order delivery), mount methods that call the throwing `getViewState` raise `RetryableMountingLayerException`. `MountItemDispatcher.dispatchMountItems` only retries this exception `if (item is DispatchCommandMountItem)` (comment: *"Only DispatchCommandMountItem supports retries"*) — `IntBufferBatchMountItem` is not one, so the "retryable" exception propagates uncaught and crashes the app. The RN team has been hardening each batch mount method to handle missing viewState gracefully (soft-log + early return): `addViewAt` in `D99760257` (which references this same MID and process), `updateOverflowInset` in `D104400233`; `removeViewAt`, `updateProps`, `updateLayout`, and `deleteView` were already graceful. The originally-reported `addViewAt` stack is therefore already fixed in trunk — crashes persist on release branch v201/v203 which predates `D99760257`. `updateState` (`INSTRUCTION_UPDATE_STATE`) and `updatePadding` (`INSTRUCTION_UPDATE_PADDING`) were the two remaining throwing `getViewState` callers reachable from `IntBufferBatchMountItem.execute` — unfixed siblings of the same multi-site pattern and live/contributing crash sites for the same exception. ## Fix Change `updateState` and `updatePadding` to use `getNullableViewState`; on null, log a `SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE` soft exception and return early — identical to the established pattern in `addViewAt`, `updateOverflowInset`, `updateProps`, `updateLayout`, and `deleteView`. This is not a throw-downgrade of an invariant: `RetryableMountingLayerException` is an explicitly retryable transient signal, and this matches the canonical handling the RN team applies to every other batch mount method. The non-batch callers (`sendAccessibilityEvent`, `setJSResponder`) are intentionally left unchanged — `sendAccessibilityEvent` is already protected by its own `try/catch (RetryableMountingLayerException)` in `SendAccessibilityEventMountItem.execute`. ## Changelog: [Android] [Fixed] - Handle missing viewState gracefully in `SurfaceMountingManager.updateState` and `updatePadding` to avoid `RetryableMountingLayerException` crashes from the Fabric batch-mount path Reviewed By: javache Differential Revision: D107768754 fbshipit-source-id: 5861bcae5d598b6ffae48c32830d16323474d8bf
…eact#57180) Summary: Pull Request resolved: react#57180 ## Changelog: [Internal] Reviewed By: javache Differential Revision: D108062822 fbshipit-source-id: 5e49107d34db31fc5e21e913cf74ec0e2ed366aa
Summary: Pull Request resolved: react#57173 - All legacy casting syntax has been converted, so we remove `casting_syntax=both` to use the default option of only allowing the new `as` casting syntax - Removed all other options that are already the default value Changelog: [Internal] Reviewed By: panagosg7 Differential Revision: D108281827 fbshipit-source-id: 0557fd0e45061c5c3c1d2f517caa3491921d153d
Summary: X-link: react#57127 Changelog: [Android][Fixed] Prevent React Native containers from delaying native touches [`shouldDelayChildPressedState`](https://developer.android.com/reference/android/view/ViewGroup#shouldDelayChildPressedState%28%29) returns `true` for compatibility reasons and non-scrollable containers should override it and return `false` to prevent the press feedback from being delayed. Reviewed By: javache Differential Revision: D108003374 fbshipit-source-id: 5c9cff01a088b09d3de27396a834ee370ae740ce
…57184) Summary: if you check the search results you won't find any usages of `UTFSequence` module. Also it wasn't documented. So, it can be treated as dead-code and needs to be removed from RN package ```bash open https://github.com/search?q=%22UTFSequence.BOM%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_KATAKANA%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NEWLINE%22&type=code open https://github.com/search?q=%22UTFSequence.NBSP%22&type=code open https://github.com/search?q=%22UTFSequence.PIZZA%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_LEFT%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_RIGHT%22&type=code ``` In RN repo in used in one places and can be replaced with string litaral: https://github.com/facebook/react-native/blob/8bcfb3ba1c16b1ba45058798bf43ecdc9bd42d3a/packages/react-native/Libraries/LogBox/Data/parseLogBoxLog.js#L109 ## Changelog: [GENERAL] [DEPRECATED] - Mark undocumented `UTFSequence` module as deprecated Pull Request resolved: react#57184 Test Plan: ... Reviewed By: cortinico Differential Revision: D108397866 Pulled By: javache fbshipit-source-id: 3b343fb6a33f064df47f0819c84b127b64706a97
Saad Najmi (Saadnajmi)
force-pushed
the
0.87-merge
branch
from
September 21, 2026 14:53
d8c588e to
86adb43
Compare
Saad Najmi (Saadnajmi)
force-pushed
the
0.86-merge
branch
from
September 21, 2026 14:53
db92dc8 to
f62601f
Compare
This was referenced Sep 21, 2026
Preserve validated per-branch source and corrected stack dependencies.
This was referenced Sep 22, 2026
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
This branch has not been deployed
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.
Current release stack
0.86-merge. Retarget as predecessors land; stable releases retain separate stable branches.Depends on #3035. The single 0.87 path continues through #3104 → #3105 → #3106 → #3100 → #3101 → #3107.
Validation and backups
The branch-specific repaired source passed hardened immutable installation, constraints, and its complete release-helper selection. The selected 18-head packet records 1,406 passing helper tests. Exact source-tree equivalence is used for rewritten endpoints where applicable; the two changed linear RC checkpoints were tested separately.
Native/API evidence retains its recorded scope. The SwiftPM and RNTester repairs have six focused native build passes. Public stable versions and runtime/API contents were preserved except for the independently reviewed SwiftPM destination repair where applicable.
Public-registry lock correction passed all 18 hosted generation, hardened immutable, constraints, and metadata-audit jobs in run 35769816507. Only equivalent executable-path spelling changes are permitted; dependency versions, checksums, and ranges are unchanged. The previous functional test results remain applicable to this metadata-only correction. Fresh GitHub CI and review remain required. Previous heads are preserved on the same repository under
backup/pre-ci-repair-20260922/<original-branch>andbackup/pre-public-registry-20260922/<original-branch>; local complete-history bundles were verified as well.The 0.87 PR sequence is one first-parent path: #3037 → #3104 → #3105 → #3106 → #3100 → #3101 → #3107. The redundant #3102/#3103 reviews are consolidated into #3105.
This section supersedes earlier stack order, source identity, and validation-status notes below.
Summary
Merges the independently certified React Native 0.87 fork point into the React Native macOS 0.86 mainline. This intentionally does not merge
facebook/0.87-stableor its release/version commits.The exact recovery head is
d8c588e4a67cbe9d3cdebb27a8909a93448807cd. Local JavaScript, static, dependency, and canonical C++ gates are green on98e4b51f38; the two subsequent Hermes build-script fixes pass focused shell/static/fixture proofs. Local native compilation is not claimed: Xcode stalled during compiler discovery under extreme host contention, before source compilation, so the draft PR's hosted CI is the authoritative native/RNTester signal.Topology
5cad69e891fd6f5038ea4005338054da4a6eb5badb92dc832747c4ad003d8fe12da35f7dc56880b4(certified 0.86 mainline)ce057d6554b5ed44070336fa2353d7d6624eab92(recomputed fork point)d8c588e4a67cbe9d3cdebb27a8909a93448807cd754e6051819af4b6076a17e663e8d45dabcc5a80fc0be7349d1aeda36f26b26d57d97f6674fd2e08is not reachable.db92dc83 ce057d65.Conflict evidence and definitions
The mechanical merge resolves every authoritative Git conflict; no conflict was deferred.
Ledger byte forms are explicit and corrected:
1a99ed3b4d37860f08a9ed01fed13a0f47bda5038c397b92e8e98a2348c5ed17.RCTUIManager.mmcompile-probe decision changed exactly one row: raw SHA2564b52f101b01917bfdf0edb730f15f2b69c9cb80ba77bc402ae485108572a6c9f.a64f1253d5a292edb2ee5574f978321bb168c6abebc97f1f3dbdce78979f6853.The earlier use of
1a99ed3b...as the final authoritative hash was stale; it identifies only the initial pre-probe form.c58c12aba7b2a85de3a00a706245128dc09264f7mt087SHA256:ceb4a5d05b81468895442a1096d732f051c0b469509dc6caaaad0dfb304a9f05paths087SHA256:2e21aecad99f6615f6d10ecd2b42f0e248540ab5fa33fef4b9f4e357a579700bTerminology:
UUis modified on both sides;UDis modified in parent 1 and deleted in parent 2.<<<<<<<through>>>>>>>; a path may contain multiple blocks.<<<<<<<,|||||||,=======, or>>>>>>>boundary.Git is authoritative. Git/Jujutsu reconciliation was 142 intersection + 1 Git-only + 3 Jujutsu-only = union 146. Membership table SHA256:
ca994e2035869dab987112b9bff4e3938fa8fe313e493512a0d0a3503ac69673.Supplemental semantic obligations outside the authoritative 143:
ErrorUtils.hfalse rename remained parent-2 byte-identical.Major conflict decisions
86350ab988/ Remove legacy architecture code guarded by RCT_REMOVE_LEGACY_ARCH from RN iOS (#56831) react/react-native#56831 removes the deprecated, legacy-architecture-only surface; there were no build references or consumers. The separate core wrapper view controller remains untouched.RCTAppSetupUtils.h/.mmandRCTRootView.mfollow parent 2 exactly.RCTRootView.mSHA256 is89221f710245fc711f8ee6a15b09e657483d46b888c7c81310e094810868fdf9.RCTUIManager.mmkeeps the Fabric-era parent-2 stub plus approved platform type/import substitutions, drops the removed Paper rows/imports, and uses the unguarded scrollable-protocol import after an actual macOS compile probe passed.Reversible layers
5cad69e891mechanical two-parent merge and all conflict decisions1b619e2271CocoaPods regeneration3f10d8ab2eworkspace constraints5d523c0147Flow modernization577fecfbd9merged configuration formattingdb6c417397import ordering52468a13c6TypeScript API regenerationd6673f2df6Jest snapshot regeneration7ad2c6b001C++ API enum deduplication34831bbc15C++ API snapshots2836f70fb2native/Fabric reconciliationcb0c8ee0f1diff-tag correctionsbab0787897SwiftPM linker-setting disambiguationd5c234bc11nested diff-tag pairing42e3682cc5minimal diff-tag formatting4a3daf7687final CocoaPods checksumsbe403fe694recovery: remove noncanonical C++ enum-deduplication generator changea9dca301c5recovery: regenerate canonical C++ API snapshots82a2c7b10frecovery: reconcileGemfile.lockwith the forkGemfile9b0258fa86recovery: embed a checkout-path-independent Hermes prepare command98e4b51f38recovery: regenerate the RNTester lock with bundled CocoaPods 1.14.2211fa7f8dcrecovery: pass the existing build type when configuring host HermesCd8c588e4a6recovery: skip legacy inspector header globs removed from newer Hermes tagsAll 23 first-parent commits are non-empty and contain the Copilot co-author trailer.
Recovery changes and deterministic proofs
Canonical C++ API
be403fe694.a9dca301c5.669aeeef...) through Rosetta.Ruby lock reconciliation
Gemfilebut retained the upstream lock, leaving theactivesupport >= 7.2.3.1/nkfrequirements unresolved.c92be41e2ed6aa6c3367c9de35169b549350cab8; SHA256682886bcb1266bb084c2215ba37b29f56afdcead61623f9950e436dd75a48e7c.Hermes prepare command and CocoaPods
9b0258fa86embeds the helper script contents withFile.read, so CocoaPods executes the command in the downloaded Hermes source root without serializing the checkout path.98e4b51f38regenerates onlypackages/rn-tester/Podfile.lockunder Ruby 3.4.5, Bundler 2.4.12, and CocoaPods 1.14.2.b31af4df03103d006996baed689687ae884dc97d, CocoaPods footer 1.14.2, and an unchanged RNTester project.859b236e74977c23a4fe3ad184cc09e20578cf49; SHA2568cd7b1bcf1b46f6b4b5f39ccbe7c0b896fc44564d2d3a73d6b3c63c8f14782cd.Host HermesC build type
98e4b51f38resolved Hermes successfully but failed host HermesC configuration atCMakeLists.txt:45:Please set CMAKE_BUILD_TYPE.211fa7f8dcpasses the script's existingBUILD_TYPEvalue to the host CMake configure command:-DCMAKE_BUILD_TYPE="$BUILD_TYPE".bash -n,git diff --check, default-value, and exact-command checks. A local Hermes compile was not started because proven host load remained in the hundreds; the current-head hosted rerun is required.Newer Hermes inspector header removal
211fa7f8dcproves the build-type fix: Hermes resolution andBuild hermescpass.cp: API/hermes/inspector/*.h: No such file or directory.d8c588e4a6independently guards only the two removed inspector globs in both packaging paths. The chrome guard is not nested under the top-level guard.set -efixture matrix passes all five states: absent directory, empty directory, top-level only, chrome only, and both. Shell syntax and diff checks pass; unrelated proven-present header globs remain unguarded.Exact-head validation
Full local validation green on parent
98e4b51f38:Focused local validation after
98e4b51f38:211fa7f8dc: one source file and one CMake command;bash -n,git diff --check, existing build-type default, and exact-command checks pass.d8c588e4a6: one source file;bash -n,git diff --check, exact independent guards at both copy sites, five-state fixture matrix, and candidate-tag header-presence checks pass.Cheap current-head integrity checks on exact
d8c588e4a6:754e6051819af4b6076a17e663e8d45dabcc5a80Local native status:
CreateBuildDescriptioncompiler discovery with idle clang probes; direct clang completed successfully, no competing Xcode writer existed, and source compilation never began.Not completed locally on
d8c588e4a6because native validation stopped before compile:React.xcframework/dSYM compositionFirst hosted CI run (
98e4b51f38)The first hosted draft-PR run completed with 13 successful checks, 9 skipped checks, and 3 failures.
Hosted native/RNTester passed:
Other passing checks included workspace constraints, JavaScript tests, npm publish dry run, Hermes resolution, CLA, and GitOps validation.
Failures:
Merge React Native 0.87 fork pointis not conventional-commit formatted. The title remains unchanged per coordinator direction.CMakeLists.txt:45withPlease set CMAKE_BUILD_TYPE. Commit211fa7f8dcdirectly addresses this failure.The Hermes slice jobs, platform prebuild matrix, and Debug XCFramework composition were skipped after the host HermesC failure. The hosted rerun for exact head
211fa7f8dcis authoritative for that fix.Second hosted CI run (
211fa7f8dc)The second hosted run proves the CMake fix:
Build hermescpass.cp: API/hermes/inspector/*.h: No such file or directory.Commit
d8c588e4a6directly addresses the shared slice failure by independently guarding only the removed inspector header globs.Final hosted CI run (
d8c588e4a6)Hosted run
29679047851completed successfully on exact headd8c588e4a67cbe9d3cdebb27a8909a93448807cd:iphoneos,iphonesimulator,macosx,xros, andxrsimulatorslices: passmacos,ios,ios-simulator,visionos, andvisionos-simulator: passThe run produced 19 hosted artifacts, including five Hermes slices, assembled Hermes artifacts, five platform slices/headers,
ReactCoreDebug.xcframework.tar.gz, andReactCoreDebug.framework.dSYM.tar.gz.Skipped in this hosted run:
Test react-native-test-app integrationTest react-native-macos initCheck for ChangesetsBuild the websiteThe separate
Validate C++ API Snapshotsworkflow was skipped and is not claimed as hosted validation. Canonical C++ evidence is the exact-head local Linux proof described above: Doxygen 1.16.1, Python 3.12.13, 9/9 validation, two-run identity, and committed-byte identity.Diff-tag, API, and advisory evidence
The prior external
[macOS]audit reported zero new pairing issues, file-marker issues, or untagged preprocessor-condition keys versus the 0.86 baseline. Its raw scanner output contained 30,879 new suspect keys and 676 deletion-coordinate deltas; after normalization and exhaustive classification, zero entries were unexplained. The raw counts are disclosed as scanner findings, not represented as normalized failures.That external raw/normalized diff-tag audit was not rerun on exact head
d8c588e4a6. The seven recovery commits change C++ snapshots,Gemfile.lock, one tagged Hermes podspec line,Podfile.lock, and tagged Hermes build-script changes; static marker and Paper-scope checks are green on98e4b51f38, but the prior external audit remains prior evidence rather than a new certification.The following are also prior evidence and were not rerun on
d8c588e4a6after the native stop:POTENTIALLY_BREAKING: 137 changed API symbols versus the 0.86 parent and 104 versus upstream 0.87. Machine reports contain the complete symbol and native/C++ file deltas.undici@7.25.0.Rough command record
Authoritative 143-path conflict ledger
Each authoritative Git conflict path appears exactly once below with bilateral source provenance, status class, decision, and rationale.
Final CI follow-up
This branch receives only these independently reviewed follow-up paths:
.github/workflows/microsoft-npm-publish.yml.github/workflows/microsoft-pr.ymlpackages/react-native/ReactNativeApi.d.tspackages/react-native/scripts/ios-prebuild/__tests__/hermes-test.jspackages/react-native/scripts/ios-prebuild/__tests__/hermes-version-test.jsThe complete 16-head batch passed 92 recorded validation commands, including branch-specific API revalidation/generated TypeScript, full formatting checks, and combined targeted suites where applicable. Native changes are limited to the reviewed #3033 destination guards (also present in stable 0.85) and #3104's sidecar-copy correction (already present in its descendants). Exact source equivalence preserves earlier native results elsewhere. The public-registry lockfiles and package manifests remain byte-identical.
Previous heads are backed up at
backup/pre-ci-followup-20260922/<original-branch>on their source repository. Fresh current-head CI remains required. The one-first-parent 0.87 sequence is preserved.Flow/lint closeout
This branch receives the reviewed Flow annotation/test-fixture or duplicate Jest mapper correction. Full Flow, ESLint, and format checks pass; generator output/runtime AST or effective Jest mapper behavior remain equivalent as applicable. Public-registry locks, package manifests, and API declarations remain unchanged. Backups are verified under
backup/pre-flow-lint-20260922/<original-branch>. The single first-parent PR path is preserved; current-head CI remains the final acceptance gate.