feat: merge 0.86-merge into 0.85-merge - #3035
Open
Saad Najmi (Saadnajmi) wants to merge 627 commits into
Open
Saad Najmi (Saadnajmi) wants to merge 627 commits into
Saad Najmi (Saadnajmi) wants to merge 627 commits into
Conversation
Summary: Pull Request resolved: react#56392 [changelog](https://github.com/facebook/flow/blob/main/Changelog.md) Changelog: [Internal] Reviewed By: gkz Differential Revision: D100104742 fbshipit-source-id: 67480b4c5a52293b67fe0100b91496d67410f75f
Summary: Pull Request resolved: react#56341 Exclude members from .api snapshots when their types (return type, parameter types, variable type, typedef target, property type) reference excluded symbols. Previously, only compounds whose names matched exclude_symbols patterns were excluded — but members of non-excluded compounds could still reference excluded types, causing dangling type references (e.g., `facebook::yoga::ExperimentalFeature`) to appear in the snapshot. Changelog: [Internal] Reviewed By: huntie Differential Revision: D99434605 fbshipit-source-id: 24d304754161ca891316061dbfee8c2be08d5d40
…eact#56346) Summary: Pull Request resolved: react#56346 Excludes all symbols and members that consists of `DO_NOT_USE`, like - findComponentViewWithTag_DO_NOT_USE_DEPRECATED - propKeysManagedByAnimated_DO_NOT_USE_THIS_IS_BROKEN - setPropKeysManagedByAnimated_DO_NOT_USE_THIS_IS_BROKEN - findComponentDescriptorByHandle_DO_NOT_USE_THIS_IS_BROKEN - componentViewName_DO_NOT_USE_THIS_IS_BROKEN - ensurePlaceholderIfEmpty_DO_NOT_USE Changelog: [Internal] Reviewed By: cortinico Differential Revision: D99834673 fbshipit-source-id: 3744f88fde6d9496506867190aae3f2dbea05fbe
…ot (react#56350) Summary: Pull Request resolved: react#56350 Excludes symbols marked as `deprecated`, such as: - viewRegistry_DEPRECATED - DEPRECATED_sendUpdatedChildFrames - nativeProps_DEPRECATED - findShadowNodeByTag_DEPRECATED - setNativeProps_DEPRECATED from the C++ public API snapshot. Changelog: [Internal] Reviewed By: huntie Differential Revision: D99838523 fbshipit-source-id: d164564f41b1ac9fa58aac87e34b17fdde135528
…apshot. (react#56351) Summary: Pull Request resolved: react#56351 Excludes categories marked as `Deprecated` and `Internal` from the ReactApple C++ public API snapshots. Changelog: [Internal] Reviewed By: huntie Differential Revision: D99838922 fbshipit-source-id: c0266d0edcd4cef4af3d856ffc55b8a7bd07a299
…#56367) Summary: Pull Request resolved: react#56367 Adds support for regex in the `exclude_symbols` field in the C++ API parser config. This enables better scoped definitions of symbols that should be matched. Changelog: [Internal] Reviewed By: huntie Differential Revision: D99844594 fbshipit-source-id: 0d2b4f9970c535afa6af8712c9435bdb06c50779
…flag is enabled (react#56375) Summary: Pull Request resolved: react#56375 ## Changelog: [Internal] [Changed] - Allowlist yoga dimension/position/flex if useSharedAnimatedBackend featureflag is enabled These are the most well tested yoga props in animation, will add more after we verify they work Reviewed By: cortinico Differential Revision: D100026348 fbshipit-source-id: de332ee06d7822c635b17e8e6dead46366e1a067
Summary: Pull Request resolved: react#56396 - "Wwhether" -> "Whether" in YGNode.h - "independants" -> "independent" in run-bench.ts X-link: react/yoga#1925 Reviewed By: cortinico Differential Revision: D100143075 Pulled By: fabriziocucci fbshipit-source-id: 1b20d0010bf9265d95be194613f6962ff31a4ba9
Summary: Pull Request resolved: react#56388 Fixed a SIGSEGV crash in the Performance API that occurred when sorting performance entries. The crash was caused by the PerformanceEntrySorter comparator missing the const qualifier on its operator() method. The PerformanceEntrySorter::operator() was not marked as const, which violates the requirements for comparators used with std::stable_sort. This caused undefined behavior and crashes on Android when sorting performance entries. Added the const qualifier to PerformanceEntrySorter::operator()() to ensure it's properly const-qualified for use with STL sorting algorithms. Changelog: [General][Fixed] - Fix crash in Performance API when sorting entries Reviewed By: rubennorte Differential Revision: D98674156 fbshipit-source-id: f6cdca0dcaaeb047e829bd30374ff70afbb68c43
…At (react#56389) Summary: Pull Request resolved: react#56389 Pull Request resolved: react#56376 Changelog: [ReactAndroid][Fixed] - Prevented a crash in Fabric mounting by handling missing viewState in SurfaceMountingManager.addViewAt() (log + no-op instead of throwing). ## Problem `SurfaceMountingManager.addViewAt()` throws `RetryableMountingLayerException` when a view tag is not found in the `tagToViewState` map. This exception is **not handled** in the `IntBufferBatchMountItem` execution path — the retry logic in `MountItemDispatcher` only catches this for `DispatchCommandMountItem`. The exception propagates and crashes the app. **Crash**: `RetryableMountingLayerException: Unable to find viewState for tag X. Surface stopped: false` **Process**: `com.oculus.firsttimenux:login` **Impact**: 44,763 occurrences / 14,674 affected users in 30 days Logview link: [252c85116a7ab5c4ec93ef3c3373cf9d](https://www.internalfb.com/logview/system_vros_crashes/252c85116a7ab5c4ec93ef3c3373cf9d) ## Root Cause `addViewAt()` uses `getViewState()` which throws on missing tags, while other methods like `removeViewAt()`, `updateProps()`, `updateLayout()`, and `deleteView()` all use `getNullableViewState()` with graceful null handling (soft exception log + early return). This inconsistency means `addViewAt` is the only mount operation that crashes when encountering a timing-related missing view state. ## Fix Changed `addViewAt()` to use `getNullableViewState()` for both parent and child tag lookups, matching the established pattern used by `removeViewAt`, `updateProps`, `updateLayout`, and `deleteView`. On null, a soft exception is logged with the `SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE` category and the operation returns early. Reviewed By: cortinico Differential Revision: D99760257 fbshipit-source-id: 3ee9baadfaf1ccb9094effe5bfc2bf9d14bb4ddb
…t#56408) Summary: Pull Request resolved: react#56408 X-link: facebook/relay#5238 X-link: facebook/hermes#1978 X-link: facebook/flow#9396 Bump hermes-parser and related packages to [0.35.0](https://github.com/facebook/hermes/blob/static_h/tools/hermes-parser/js/CHANGELOG.md). Changelog: [internal] Reviewed By: bherila Differential Revision: D100198457 fbshipit-source-id: 06dcada56d61ae359c1d7a8362f80fdfb4e2d5b5
Summary: Pull Request resolved: react#56409 The `enableAndroidLinearText` flag enables `Paint.LINEAR_TEXT_FLAG` wherever `SUBPIXEL_TEXT_FLAG` is already set. The flag defaults to `true` and has been fully rolled out internally, so this removes the flag and makes the behavior unconditional. Two call sites: - `CustomStyleSpan.kt`: always sets `isLinearText = true` alongside `isSubpixelText = true` - `ReactEditText.kt`: always toggles `LINEAR_TEXT_FLAG` in sync with `SUBPIXEL_TEXT_FLAG` The flag definition is removed from `ReactNativeFeatureFlags.config.js` and all generated accessor files are regenerated. Changelog: [Internal] Reviewed By: alanleedev Differential Revision: D100213385 fbshipit-source-id: 08a077b8bb58ff33a3781a5ac9b123c799c1dd6a
…on (react#56403) Summary: Pull Request resolved: react#56403 Document the threading contract on UIManagerViewTransitionDelegate::startViewTransition and simplifying how we track the jsi::Function Changelog: [Internal] Reviewed By: zeyap Differential Revision: D98717252 fbshipit-source-id: 6e24728efa8f316fda0b4eb9e8f2291d5bcb8fda
Summary: So the formData Upload in fetch is broken on 0.85 on main. I tracked down this PR react#55456 Also reported here react#56404 RCA:- ``` body.isOneShot() body.writeTo(buffer) // This is draining inner file InputStreams ``` Fix is to walk to each children of multipart and check for Oneshot ## 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 --> [ANDROID][FIXED] - FormData uploads broken in debug builds Pull Request resolved: react#56406 Test Plan: Tested on RN tester <img width="416" height="600" alt="image" src="https://github.com/user-attachments/assets/20cae662-e2ba-4fc7-9f8d-d8e365eb95b2" /> Reviewed By: fabriziocucci, huntie Differential Revision: D100258994 Pulled By: alanleedev fbshipit-source-id: aeda47d45db2152027598c949f0e602a586c4cb3
…act#56405) Summary: Pull Request resolved: react#56405 On Android, pressing the hardware back button while the LogBox inspector is open does nothing. `LogBoxDialog` is explicitly set to `setCancelable(false)` and there's no `onBackPressed()` override, so the back button is completely swallowed. The only way to close the inspector is the on-screen Minimize/Dismiss buttons. For RedBox, the dialog is cancelable by default so back press does dismiss it visually, but it bypasses `hideRedboxDialog()`. The dialog reference and content view don't get cleaned up, leaving stale state. This adds proper back button handling for both: **LogBox**: `LogBoxDialog` now takes an `onRequestClose` callback and overrides `onBackPressed()` to invoke it. The surface delegate passes a callback that emits `hardwareBackPress` to the JS runtime, where a new `BackHandler` listener in `LogBoxInspector` calls `onMinimize()`. This keeps `setCancelable(false)` in place (so tapping outside the dialog doesn't dismiss it) while still running the full dismiss flow through JS: state reset, `NativeLogBox.hide()`, dialog cleanup. **RedBox**: The anonymous `Dialog` subclass now overrides `onBackPressed()` to call `hideRedboxDialog()` directly, which dismisses the dialog, destroys the content view, and nulls the reference. Changelog: [Internal] - Allow LogBox and RedBox overlays to respond to Android back button press Reviewed By: alanleedev Differential Revision: D100081099 fbshipit-source-id: cabec9b75fb3e733662457bc34de006a45a11494
Summary: Pull Request resolved: react#56414 Reverting due to some internal applications relying on bugs in older whatwg-fetch versions. Changelog: [Internal] Differential Revision: D100389649 fbshipit-source-id: f87ed5e212508af8032e452cf2ba9836292a49d1
Summary: Pull Request resolved: react#56415 Reverting due to some internal applications relying on bugs in older whatwg-fetch versions. Changelog: [Internal] Differential Revision: D100389704 fbshipit-source-id: 93db9ec62641ea72313ad99d1a4186f8e5066e86
…roid/src/main/java/com/facebook/react/uimanager:uimanagerAndroid (react#56421) Summary: Pull Request resolved: react#56421 As per title. _____ Changelog: [Internal] Reviewed By: javache Differential Revision: D100505694 fbshipit-source-id: 6991b1513b3cfb361731246030e936131e388e6d
Summary: Pull Request resolved: react#56416 Registers Event, EventTarget and CustomEvent as global polyfills in `setUpDOM.js`. These are standard Web APIs that DOM nodes need access to. Removes the Event/EventTarget polyfills from the Fantom test setup since they are now provided globally by setUpDOM.js. Changelog: [internal] Marking as internal for now, until we ship to stable, even though this isn't gated. We shouldn't communicate this yet. Reviewed By: javache Differential Revision: D100462548 fbshipit-source-id: 3e30be760d4f524ca823ebf1320d9a607abeabf9
…rivateInterface (react#56417) Summary: Pull Request resolved: react#56417 Changelog: [internal] The React Native renderer needs access to these internals to dispatch events under the new EventTarget-based event dispatching pipeline. Reviewed By: javache Differential Revision: D100462549 fbshipit-source-id: 0b4f9cb5900c6b48781a98edf431a6460d16709d
…eact#56378) Summary: Fix two error message issues in `AnimatedInterpolation.js`: 1. **Typo**: "Cannot interpolation an input which is not a number" - should be "Cannot interpolate" 2. **Missing space**: Range validation message was missing a space between the variable name and "cannot", producing malformed output like `outputRangecannot be ]-infinity;+infinity[` ## Changelog: [GENERAL] [FIXED] - Fix typo "interpolation" to "interpolate" and add missing space in AnimatedInterpolation error messages Pull Request resolved: react#56378 Test Plan: 1. Trigger the interpolation input validation by passing a non-number input to an interpolation config - verify the error message reads "Cannot interpolate an input which is not a number" 2. Trigger the range validation by passing an infinite range - verify the error message has proper spacing between the parameter name and "cannot" Reviewed By: zeyap Differential Revision: D100328205 Pulled By: javache fbshipit-source-id: ae2eba5404dd7b16bf430c26bc161a83821fa920
Summary: Pull Request resolved: react#56423 Changelog: [Internal] The `FANTOM_BENCHMARK_FILENAME_RE` and `FANTOM_BENCHMARK_SUITE_RE` regexes used the `g` (global) flag, which makes `.test()` stateful — it preserves `lastIndex` between calls. When `getFantomTestConfigs` is called for multiple test files in the same process, the stale `lastIndex` from a previous successful match causes `.test()` to miss the match on the next file, returning `false`. This results in benchmark files intermittently getting the default dev config (`isJsOptimized: false`, `dev: true`), causing them to fail at runtime with "Benchmarks should not be run in development mode". Removes the `g` flag from both regexes since they are used with `.test()` across different strings and should be stateless. ___ overriding_review_checks_triggers_an_audit_and_retroactive_review Oncall Short Name: react_native_iroc Differential Revision: D100603612 fbshipit-source-id: 4eded9b0a59a2343ad44c0c1c2855466e3981b7a
…ct#56418) Summary: Pull Request resolved: react#56418 Changelog: [internal] D92150163 excluded benchmark tests by default when running `yarn fantom` without `--benchmarks`. This was incorrect because it means benchmarks could silently break without being caught. This changes the behavior so: 1. By default (without `--benchmarks`), benchmarks run in test mode (single iteration for correctness only), ensuring they do not break. 2. With `--benchmarks`, benchmarks run in full benchmark mode (multiple iterations for performance measurement). Also renames `FANTOM_FORCE_TEST_MODE` to `FANTOM_RUN_BENCHMARKS` and `forceTestModeForBenchmarks` to `runBenchmarks` to better reflect the intent (opt-in to full benchmarks rather than opt-in to test mode). Reviewed By: sammy-SC Differential Revision: D100464314 fbshipit-source-id: 822cc5a25f0cdddf035616fdddf8619d27ef436a
Summary: Pull Request resolved: react#56425 Changelog: [Internal] The Fantom CI retry loop previously re-ran the entire test suite on each attempt. This wastes time and can introduce new flaky failures that weren't in the original run (e.g., a FlatList race condition appearing on attempt 2 but not attempt 1). This changes the retry logic to use Jest's `--onlyFailures` flag on attempts 2 and 3, so only the test suites that actually failed get re-run. For example, if 1 out of 99 suites fails with a SIGSEGV, the retry runs just that 1 suite instead of all 99 — reducing retry time from ~80s to seconds. Reviewed By: rubennorte Differential Revision: D100618771 fbshipit-source-id: 3b311ddb6e88b8948120e9510b50212dfe79ae81
Summary: Pull Request resolved: react#56401 Add `pushAnimationMutations(Callback)` to the AnimationBackend as a targeted alternative to `trigger()`. The existing `trigger()` method has two problems: 1. **Blast radius**: It calls `onAnimationFrame()` which invokes ALL registered callbacks. When one animation frontend (e.g. Animated) calls `trigger()` in response to an event, every other frontend (e.g. Reanimated) also spins up unnecessarily. 2. **Broken timestamp on iOS**: `trigger()` uses `std::chrono::steady_clock` which on iOS maps to a different kernel clock than what `CADisplayLink` uses for vsync timestamps. These clocks have different baselines and can diverge over time (e.g. after device sleep), causing animations to see time jumps. `pushAnimationMutations(Callback)` fixes both issues: - Executes only the provided callback, not all registered ones - Uses `AnimationChoreographer::now()` which delegates to `HighResTimeStamp`, providing a timestamp from the same clock as the vsync path on each platform Also refactors `onAnimationFrame` to use `unpackMutations`/`applySurfaceUpdates` helpers, avoiding intermediate vector/set merging when accumulating mutations from multiple callbacks. ## Changelog: [General][Added] - Add pushAnimationMutations to AnimationBackend for targeted event-driven animation updates Reviewed By: zeyap Differential Revision: D100164749 fbshipit-source-id: 53d36ed316614baa835707a45361ae8f3b828d26
Summary: Pull Request resolved: react#56426 Adds Channel Play/Pause events to HWInput. Changelog: [Android][Added] - Channel play/pause hardware events. Reviewed By: Abbondanzo Differential Revision: D100621746 fbshipit-source-id: b3a5616569f0b097e0e1226a8deb927212cdab20
Summary: Pull Request resolved: react#56410 Missed when we first added the `ISerialization` interface. In JSI APIs, `Value` is generally passed in as a const reference. This makes it clear that the actual reference, not the referent, is const. Fixing the serialization methods to be consistent with the rest of JSI. Changelog: [Internal] Reviewed By: lavenzg Differential Revision: D100222030 fbshipit-source-id: 2297d5c89b90db51269d216e6c3a822d9a4a93ab
Summary: Add Changelog for 0.85.1 ## Changelog: [Internal] - Add Changelog for 0.85.1 Pull Request resolved: react#56428 Test Plan: N/A Reviewed By: zeyap Differential Revision: D100684846 Pulled By: alanleedev fbshipit-source-id: 29a44c96015107dd32b2182a80b964c345cc37e3
…t#56424) Summary: Pull Request resolved: react#56424 Changelog: [GENERAL][FIXED] Fixed double `setMounted` flag calls with fabric branching enabled This change removes the commit source condition from the call site in `ShadowTree::tryCommit` and moves the logic into updateMountedFlag itself: - Mounted flags are skipped for ReactRevisionMerge commits because they were already set during the React branch commit. Setting them again would double increment the EventEmitter's additive enable counter. - Runtime shadow node references updates condition didn't change, only moved to a single variable. - When neither operation is needed, the function returns early to avoid an unnecessary tree traversal under the DispatchMutex. Reviewed By: lenaic, rubennorte Differential Revision: D100125886 fbshipit-source-id: aceb1ae3609957048b78f615233ed00ce2e04038
Summary: Add Changelog for 0.83.5 ## Changelog: [Internal] - Add Changelog for 0.83.5 Pull Request resolved: react#56431 Test Plan: N/A Reviewed By: cipolleschi Differential Revision: D100760499 Pulled By: cortinico fbshipit-source-id: 5bc53acb3ee449ee499ee919bd32a83709a4a8a1
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Set RCT_HERMES_V1_ENABLED=1 on the resolve-hermes job so the resolver reads HERMES_V1_VERSION_NAME (250829098.0.12) instead of HERMES_VERSION_NAME (1000.0.0), which 404s and falls back to a stale hermes-v0.14.0 engine lacking the facebook::jsi IRuntime ABI. Align the build-from-source fallback tag in .hermesv1version to the same version. Fixes the missing IRuntime symbol link failures in Prebuild macOS Core. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Saad Najmi (Saadnajmi)
force-pushed
the
0.86-merge
branch
from
September 21, 2026 14:53
db92dc8 to
f62601f
Compare
Saad Najmi (Saadnajmi)
force-pushed
the
0.85-merge
branch
from
September 21, 2026 14:53
dcd3d60 to
8b21f63
Compare
This was referenced Sep 21, 2026
Preserve validated per-branch source and corrected stack dependencies.
Preserve validated per-branch source and corrected stack dependencies.
Preserve validated per-branch source and corrected stack dependencies.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
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.
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.85-merge. Retarget as predecessors land; stable releases retain separate stable branches.Depends on #3054 and #3058. #3036 is the 0.86 release; #3037 continues mainline.
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
This change merges the React Native 0.86 fork point into the macOS release stack while preserving the 0.85 macOS platform work and explicitly porting the 0.86 deltas that cannot be resolved mechanically.
d1cdce24cca2224f8d37873d24a49523a8271a0a(d1cdce24).4014f771b43d804c242f407b95ef3a999a48b24f, with parentsdcd3d60324c220393aae7729bb538235f3c70416andd1cdce24cca2224f8d37873d24a49523a8271a0a.db92dc832747c4ad003d8fe12da35f7dc56880b4, treed55946fa7f2f75922e2de1b7b8a535e38e0038b6.0.86-stabletipa8eb4f70c730bc3ee3dba4d9b1ca6f70f0d674d3(a8eb4f70) is not an ancestor. Its 22 stable-only commits are intentionally excluded from this fork-point merge.The temporary target is base
microsoft:0.85-mergeand headSaadnajmi:0.86-merge. After the predecessor lands, retarget this change tomicrosoft:main; do not merge it intomainbefore the predecessor is present.Conflict accounting
The mechanical merge materialized exactly 49 unique conflict paths, 145 conflict hunks, 290 side terms (145 snapshot terms and 145 diff terms), and 3 deletions. Package/workspace conflicts retain fork workspace identity and links while taking 0.86 dependency metadata. Source conflicts were resolved hunk by hunk against both the local intent and the upstream change intent.
Workspace, package, podspec, and lock metadata (23 paths)
package.jsonpackages/babel-plugin-codegen/package.jsonpackages/community-cli-plugin/package.jsonpackages/dev-middleware/package.jsonpackages/eslint-config-react-native/package.jsonpackages/eslint-plugin-specs/package.jsonpackages/jest-preset/package.jsonpackages/metro-config/package.jsonpackages/react-native/gradle/libs.versions.tomlpackages/react-native/package.jsonpackages/react-native/react-native.config.jspackages/react-native/third-party-podspecs/RCT-Folly.podspecpackages/react-native/third-party-podspecs/fmt.podspecpackages/react-native-babel-preset/package.jsonpackages/react-native-babel-transformer/package.jsonpackages/react-native-codegen/package.jsonpackages/react-native-compatibility-check/package.jsonpackages/react-native-popup-menu-android/package.jsonpackages/rn-tester/package.jsonpackages/virtualized-lists/package.jsonprivate/react-native-codegen-typescript-test/package.jsonscripts/releases/ios-prebuild/configuration.jsyarn.lockJavaScript, tests, generated artifacts, and RNTester (12 paths)
packages/react-native/Libraries/Components/TextInput/__tests__/TextInput-test.jspackages/react-native/Libraries/Components/Touchable/__tests__/__snapshots__/TouchableHighlight-test.js.snappackages/react-native/Libraries/Components/View/View.jspackages/react-native/Libraries/Lists/__tests__/__snapshots__/SectionList-test.js.snappackages/react-native/Libraries/LogBox/UI/__tests__/__snapshots__/LogBoxInspectorStackFrames-test.js.snappackages/react-native/ReactNativeApi.d.tspackages/rn-tester/NativeComponentExample/ios/RNTMyNativeViewCommon.mmpackages/rn-tester/Podfile.lockpackages/rn-tester/js/examples/Layout/LayoutEventsExample.jspackages/rn-tester/js/examples/TextInput/TextInputExample.ios.jspackages/rn-tester/js/examples/View/ViewExample.jspackages/rn-tester/js/utils/RNTesterList.ios.jsObjective-C, Objective-C++, C++, SwiftPM, and native podspecs (14 paths)
packages/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mmpackages/react-native/Package.swiftpackages/react-native/React/Base/RCTRootView.hpackages/react-native/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.hpackages/react-native/React/CoreModules/RCTRedBox.mmpackages/react-native/React/CoreModules/RCTWebSocketModule.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.hpackages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mmpackages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mmpackages/react-native/React/Modules/RCTUIManager.mmpackages/react-native/React/Profiler/RCTProfile.mpackages/react-native/React/Views/ScrollView/RCTScrollView.hpackages/react-native/ReactCommon/react/renderer/components/view/BaseTouch.cpppackages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspecConflict resolution reviewer table
workspace:*edges, thereact-native-macosidentity, the fork virtualized-lists replacement, and security overrides. The fmt value is the upstream-equivalent12.1.0.TARGET_OS_OSX; SwiftPM excludes tvOS host sources and the fork-root coordinator while retaining the platform/ios header root. The React-Fabric podspec mirrors macOS-versus-cxx source selection. Review source lists and header search roots together.RCTPlatformView,RCTPlatformColor,RCTUIView,RCTUIScrollView, and otherRCTUIKitabstractions while taking 0.86 subclassability, clipped-subview ownership, imperative focus, content-metrics ordering, zoom scale, renderer-debug, animated/mutation/view-transition/tracing, and nullable UTF-8 changes.orderOut:rather than UIKit's hidden property.TARGET_OS_SXguard typo and provide forwarding/dispatch headers for the evolved key/mouse include shape.250829098.0.12for this fork point. Production resolution defaults to Hermes V1 unlessRCT_HERMES_V1_ENABLED=0, downloads the production archive, and recomposes the standalone macOS slice into the xcframework before prebuilds.PODFILE_DIRproject setting.RCTUIKitand other fork behavior with canonical markers where comments are legal. Generated JSON, locks, snapshots, API output, and structural deletions are explicitly classified rather than force-tagged.Layered commits
4014f771b43d804c242f407b95ef3a999a48b24ffeat: merge React Native 0.86 fork point279148b3e255bcade03da5033583211860df1170feat(macos): port React Native 0.86 platform changes6d613d39f44a654d5d2ecd95cda8131502776b86fix(hermes): align 0.86 compiler artifacts01e4c1a79c6d14a41b91beb4cdb0b986d78a9d8echore: regenerate 0.86 derived artifacts5db7b732baf81cafa34ad53d55890520a2e49709chore: audit 0.86 macOS diff tags04900d746ede6566bf531ede20e1b45eb3df9798fix(workspaces): align 0.86 parser tooling083d8059ee693842b9c1e8af4ee51d7c73e9e42ffix(macos): port 0.86 native ownershipc0073885ad61cc22aa2b32077163a36aaa853d87fix(codegen): transpile absolute source paths0d5c74fa75553d1542de6f10eb0df9be84106adfchore: audit 0.86 follow-up diff tagsbcf6084886b989b617546d4e538eb3ac63857aa4fix(swiftpm): single host source ownership for 0.86 Fabric958d45274e048d381d7f967393f963fbd535854dfix(macos): guard 0.86 frame timings observer45a553efbfb797568a1c107ef2c1a25e02ec2b66fix(macos): hide 0.86 loading window with AppKitc5a4a2ec46faabd2beb39629cd6aec1c49f844a7fix(hermes): default production resolver to Hermes V1db92dc832747c4ad003d8fe12da35f7dc56880b4chore: regenerate 0.86 pod artifactsThe first port layer carries reviewed 0.86 macOS behavior, while generated output is separate from semantic source changes. Later recovery layers are deliberately narrow: parser tooling, native ownership, absolute-path codegen, follow-up tag audit, single-source Fabric ownership, frame timing, AppKit loading behavior, production Hermes selection, and the final pod checksum.
Commands used
The rough command sequence was:
jj new <0.85-merge> <0.86-fork-point>; usejj resolve, focused edits, andjj describefor resolution layers, thenjj git exportthe Git commits.pod install; retain semantic lock/checksum output and restore path-sensitive project output.resolve-hermes.mts download-hermes Debug, thenresolve-hermes.mts recompose-xcframework ...; verify the macOS library entry and prepare the production prebuilt Hermes tree.ios-prebuild.jsbuild slices: iOS, iOS Simulator, macOS, visionOS, and visionOS Simulator.xcodebuild.The first monolithic final Xcode attempt was not all green. Xcode 26 SwiftBuild stalled at
CreateBuildDescriptionafter interrupted shared build state. Failed logs and exact owned process information were retained; no stalled result counted as a pass. Clean sequential retries then ran against the same exact head/export and passed all five prebuild slices, all three RNTester builds, and the ownership gate. Independent review accepted the consolidated canonical retries as genuine environmental stalls rather than source failures.Validation
All 42/42 canonical gates exit with
0.HostPlatformViewProps=1andCoordinator=1; CocoaPods selects the same coordinator for all 3 RNTester targets.250829098.0.12and fmt12.1.0.Diff-tag independent judge gate
The canonical diff guide remains methodology-only and byte-identical, SHA-256
79f533c26acf8e23bc2ea09d74d744aa16a1ed0b0ceecd026665af4a0f7d4d4c; it was not modified to make this merge pass.The scoped audit covers 73 paths: 42 tagged, 25 exempt, and 6 upstream-equal, with 0 failures. The logical-condition audit reports 0 untagged conditions and 0 manual reviews. The scope includes merge-touched files and focused follow-up layers; the broad historical fork scan remains supplemental.
The independent judge must rerun and enforce this contract. Any retained fork behavior without a canonical marker, invalid pairing, unsupported deletion, unclassified changed condition, or inappropriate exemption is a blocking failure.
Novel conflict classes and skill lessons
Focused follow-up PR candidates
Proposed draft metadata
feat: merge \0.86-merge` into 0.85-merge`microsoft:0.85-mergeSaadnajmi:0.86-mergeFinal CI follow-up
This branch receives only these independently reviewed follow-up paths:
.github/scripts/__tests__/resolve-hermes-test.jspackages/react-native/ReactNativeApi.d.tspackages/react-native/scripts/ios-prebuild/__tests__/hermes-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.