Skip to content

feat: merge 0.86-merge into 0.85-merge - #3035

Open
Saad Najmi (Saadnajmi) wants to merge 627 commits into
microsoft:0.85-mergefrom
Saadnajmi:0.86-merge
Open

Saad Najmi (Saadnajmi) wants to merge 627 commits into
microsoft:0.85-mergefrom
Saadnajmi:0.86-merge

Conversation

@Saadnajmi

@Saadnajmi Saad Najmi (Saadnajmi) commented Jul 18, 2026

Copy link
Copy Markdown
Collaborator

Current release stack

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> and backup/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.

  • Exact upstream fork point: d1cdce24cca2224f8d37873d24a49523a8271a0a (d1cdce24).
  • Mechanical merge: 4014f771b43d804c242f407b95ef3a999a48b24f, with parents dcd3d60324c220393aae7729bb538235f3c70416 and d1cdce24cca2224f8d37873d24a49523a8271a0a.
  • Reviewed head: db92dc832747c4ad003d8fe12da35f7dc56880b4, tree d55946fa7f2f75922e2de1b7b8a535e38e0038b6.
  • The 0.86-stable tip a8eb4f70c730bc3ee3dba4d9b1ca6f70f0d674d3 (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-merge and head Saadnajmi:0.86-merge. After the predecessor lands, retarget this change to microsoft:main; do not merge it into main before 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.json
  • packages/babel-plugin-codegen/package.json
  • packages/community-cli-plugin/package.json
  • packages/dev-middleware/package.json
  • packages/eslint-config-react-native/package.json
  • packages/eslint-plugin-specs/package.json
  • packages/jest-preset/package.json
  • packages/metro-config/package.json
  • packages/react-native/gradle/libs.versions.toml
  • packages/react-native/package.json
  • packages/react-native/react-native.config.js
  • packages/react-native/third-party-podspecs/RCT-Folly.podspec
  • packages/react-native/third-party-podspecs/fmt.podspec
  • packages/react-native-babel-preset/package.json
  • packages/react-native-babel-transformer/package.json
  • packages/react-native-codegen/package.json
  • packages/react-native-compatibility-check/package.json
  • packages/react-native-popup-menu-android/package.json
  • packages/rn-tester/package.json
  • packages/virtualized-lists/package.json
  • private/react-native-codegen-typescript-test/package.json
  • scripts/releases/ios-prebuild/configuration.js
  • yarn.lock
JavaScript, tests, generated artifacts, and RNTester (12 paths)
  • packages/react-native/Libraries/Components/TextInput/__tests__/TextInput-test.js
  • packages/react-native/Libraries/Components/Touchable/__tests__/__snapshots__/TouchableHighlight-test.js.snap
  • packages/react-native/Libraries/Components/View/View.js
  • packages/react-native/Libraries/Lists/__tests__/__snapshots__/SectionList-test.js.snap
  • packages/react-native/Libraries/LogBox/UI/__tests__/__snapshots__/LogBoxInspectorStackFrames-test.js.snap
  • packages/react-native/ReactNativeApi.d.ts
  • packages/rn-tester/NativeComponentExample/ios/RNTMyNativeViewCommon.mm
  • packages/rn-tester/Podfile.lock
  • packages/rn-tester/js/examples/Layout/LayoutEventsExample.js
  • packages/rn-tester/js/examples/TextInput/TextInputExample.ios.js
  • packages/rn-tester/js/examples/View/ViewExample.js
  • packages/rn-tester/js/utils/RNTesterList.ios.js
Objective-C, Objective-C++, C++, SwiftPM, and native podspecs (14 paths)
  • packages/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm
  • packages/react-native/Package.swift
  • packages/react-native/React/Base/RCTRootView.h
  • packages/react-native/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h
  • packages/react-native/React/CoreModules/RCTRedBox.mm
  • packages/react-native/React/CoreModules/RCTWebSocketModule.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.h
  • packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm
  • packages/react-native/React/Modules/RCTUIManager.mm
  • packages/react-native/React/Profiler/RCTProfile.m
  • packages/react-native/React/Views/ScrollView/RCTScrollView.h
  • packages/react-native/ReactCommon/react/renderer/components/view/BaseTouch.cpp
  • packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec

Conflict resolution reviewer table

Area Resolution and reviewer focus
Package/workspace graph Take the 0.86 package, Metro, Flow, and Hermes parser 0.36 metadata while retaining local workspace:* edges, the react-native-macos identity, the fork virtualized-lists replacement, and security overrides. The fmt value is the upstream-equivalent 12.1.0.
Source and header ownership SwiftPM and CocoaPods select one Apple host family and one legacy interop coordinator. Root dispatch headers choose macOS declarations only for 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.
Fabric and RCTUIKit Preserve RCTPlatformView, RCTPlatformColor, RCTUIView, RCTUIScrollView, and other RCTUIKit abstractions 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.
Frame timing Exclude the UIKit frame-timing implementation on macOS and use a no-op observer there. This recovery is intentionally isolated from host ownership.
AppKit loading window Hide the 0.86 development loading window with AppKit orderOut: rather than UIKit's hidden property.
Key events and API evolution Preserve macOS mouse/modifier fields and tagged keyboard filtering while taking the 0.86 timestamp naming and native view-prop transformation flag. Correct the stale TARGET_OS_SX guard typo and provide forwarding/dispatch headers for the evolved key/mouse include shape.
RedBox Accept the 0.86 controller extraction and RedBox 2 selection, then port the legacy controller into the new file family. UIKit-only RedBox 2 UI remains gated on macOS while the macOS-compatible controller path is preserved.
TextInput Use upstream attributed-text range clamping because it supersedes the narrower platform-specific text/string split. Preserve macOS zero defaults for content metrics until the backing scroll view supplies real values, plus tagged spelling, submit-key, and cursor examples.
Hermes Keep Hermes V1 250829098.0.12 for this fork point. Production resolution defaults to Hermes V1 unless RCT_HERMES_V1_ENABLED=0, downloads the production archive, and recomposes the standalone macOS slice into the xcframework before prebuilds.
Codegen and generated artifacts Transpile absolute codegen source paths rather than assuming relative paths. Regenerate the API declaration, LogBox snapshot, lockfile, and deterministic React-Fabric checksum only after source inputs settle. Do not retain the path-sensitive generated PODFILE_DIR project setting.
Security fixes Keep upstream WebSocket empty-URL validation, guarded cookie/header conversion, and provider injection; retain Hermes tag handling and iOS prebuild header protections. Dedicated tests cover all three areas.
Structural deletions Accept all three upstream Jest artifact deletions from Jest-to-Fantom migrations. The displaced local assertions become focused follow-ups instead of retaining obsolete Jest files.
Diff tags Preserve RCTUIKit and 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

Order Commit Subject
1 4014f771b43d804c242f407b95ef3a999a48b24f feat: merge React Native 0.86 fork point
2 279148b3e255bcade03da5033583211860df1170 feat(macos): port React Native 0.86 platform changes
3 6d613d39f44a654d5d2ecd95cda8131502776b86 fix(hermes): align 0.86 compiler artifacts
4 01e4c1a79c6d14a41b91beb4cdb0b986d78a9d8e chore: regenerate 0.86 derived artifacts
5 5db7b732baf81cafa34ad53d55890520a2e49709 chore: audit 0.86 macOS diff tags
6 04900d746ede6566bf531ede20e1b45eb3df9798 fix(workspaces): align 0.86 parser tooling
7 083d8059ee693842b9c1e8af4ee51d7c73e9e42f fix(macos): port 0.86 native ownership
8 c0073885ad61cc22aa2b32077163a36aaa853d87 fix(codegen): transpile absolute source paths
9 0d5c74fa75553d1542de6f10eb0df9be84106adf chore: audit 0.86 follow-up diff tags
10 bcf6084886b989b617546d4e538eb3ac63857aa4 fix(swiftpm): single host source ownership for 0.86 Fabric
11 958d45274e048d381d7f967393f963fbd535854d fix(macos): guard 0.86 frame timings observer
12 45a553efbfb797568a1c107ef2c1a25e02ec2b66 fix(macos): hide 0.86 loading window with AppKit
13 c5a4a2ec46faabd2beb39629cd6aec1c49f844a7 fix(hermes): default production resolver to Hermes V1
14 db92dc832747c4ad003d8fe12da35f7dc56880b4 chore: regenerate 0.86 pod artifacts

The 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:

  1. Create the two-parent merge with jj new <0.85-merge> <0.86-fork-point>; use jj resolve, focused edits, and jj describe for resolution layers, then jj git export the Git commits.
  2. Run immutable Yarn installation, workspace codegen build, constraints, API/type generation, snapshot regeneration, Jest, Flow, ESLint, Prettier, TypeScript, and generated-TypeScript checks.
  3. Install pinned Ruby/Bundler and run pod install; retain semantic lock/checksum output and restore path-sensitive project output.
  4. Run resolve-hermes.mts download-hermes Debug, then resolve-hermes.mts recompose-xcframework ...; verify the macOS library entry and prepare the production prebuilt Hermes tree.
  5. Run five ios-prebuild.js build slices: iOS, iOS Simulator, macOS, visionOS, and visionOS Simulator.
  6. Build RNTester for macOS, iOS Simulator, and visionOS Simulator with xcodebuild.
  7. Verify per-architecture Fabric host/coordinator object provenance, run the scoped diff-tag contract, and check final graph connectivity and cleanliness.

The first monolithic final Xcode attempt was not all green. Xcode 26 SwiftBuild stalled at CreateBuildDescription after 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.

  • Full Jest: 278/278 suites, 5,647 passed plus 2 skipped = 5,649 tests, and 1,797/1,797 snapshots.
  • Flow: 2,068 files checked, 0 errors.
  • Snapshot regeneration: 1/1 suite, 13/13 tests, and 2/2 snapshots, followed by a clean diff.
  • Security-focused tests: WebSocket 2/2, Hermes utilities 8/8, and iOS prebuild headers 2/2.
  • SwiftPM/prebuild: manifests pass and all 5/5 platform slices build successfully.
  • RNTester: all 3/3 builds succeed (macOS, iOS Simulator, visionOS Simulator).
  • Ownership-single-source: 8 architecture object directories each contain exactly HostPlatformViewProps=1 and Coordinator=1; CocoaPods selects the same coordinator for all 3 RNTester targets.
  • CocoaPods semantic lock validation preserves Hermes 250829098.0.12 and fmt 12.1.0.
  • Conflict markers, tracked-output hygiene, graph topology, fresh export, and final connectivity all pass.

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

  • Source discovery can compile while selecting duplicate or inconsistent host families. Object-file provenance, not successful linking alone, proves ownership.
  • A structural rename such as RedBox requires accepting the new architecture first and then porting fork behavior into the new file family.
  • Structural Jest-to-Fantom deletions should be accepted while displaced fork assertions are tracked separately.
  • CocoaPods output mixes deterministic semantic checksums with machine-specific project settings and requires separate treatment.
  • Production Hermes validation is download plus recomposition; copying an existing destination tree is not equivalent.
  • Absolute-path codegen input is a distinct workspace portability class and must be transpiled explicitly.
  • Multiline platform conditions and typoed legacy guards require logical-condition auditing rather than line-only marker checks.
  • After interrupted Xcode builds, isolate exact owned processes and generated build directories, then retry slices sequentially on the same immutable export.

Focused follow-up PR candidates

  • Port deleted TextInput macOS Jest coverage to Fantom.
  • Add the displaced TouchableHighlight keyboard-handler assertion to Fantom.
  • Add the displaced SectionList flattening assertion to Fantom.
  • Keep Fabric host/coordinator ownership and negative duplicate-source checks as a focused validation change.
  • Keep the production Hermes V1 resolver/recomposition path as a focused review unit.
  • Upstream the graph-derived validation runner separately from release merge content.

Proposed draft metadata

  • Title: feat: merge \0.86-merge` into 0.85-merge`
  • Base: microsoft:0.85-merge
  • Head: Saadnajmi:0.86-merge

Final CI follow-up

This branch receives only these independently reviewed follow-up paths:

  • .github/scripts/__tests__/resolve-hermes-test.js
  • packages/react-native/ReactNativeApi.d.ts
  • packages/react-native/scripts/ios-prebuild/__tests__/hermes-test.js

The 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.

Sam Zhou (SamChou19815) and others added 30 commits April 9, 2026 06:23
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>
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

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.