feat(macos): merge React Native through the RedBox 2.0 cutoff - #3058
Open
Saad Najmi (Saadnajmi) wants to merge 576 commits into
Open
Saad Najmi (Saadnajmi) wants to merge 576 commits into
Saad Najmi (Saadnajmi) wants to merge 576 commits into
Conversation
…56243) Summary: Pull Request resolved: react#56243 Modifies C++ API parser config to accept `exclude_symbols` at the platform level and sets `Android` symbols to be excluded from the ReactApple snapshot. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98298766 fbshipit-source-id: 70b39fe4935e6791701c173e7c9e12532c2817a5
Summary: Pull Request resolved: react#56245 Removes feature flags from the C++ public API snapshots as they are considered private. This greatly reduces snapshots size. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98312529 fbshipit-source-id: e6aad9d930c7c77300329c25668dc2fc3a4686f2
Summary: Pull Request resolved: react#56242 Excluded symbols that contain "UnstableLegacy" from public stable C++ API snapshot, that is `UnstableLegacyViewManagerAutomaticComponentDescriptor` and `UnstableLegacyViewManagerInteropComponentDescriptor`. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98317003 fbshipit-source-id: deb4631a26ecb138007cf4958dbabb57ef3739cc
…56244) Summary: Pull Request resolved: react#56244 Excludes symbols marked as Experimental from the C++ public API snapshots. Types with the "Experimental" prefix are explicitly not stable API — they represent features still under active development and are subject to change or removal without notice. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98454721 fbshipit-source-id: 7f7488fab6bc94c52b94a3ae2d9a7a7914815d63
…react#56249) Summary: Pull Request resolved: react#56249 Prevents iOS Switch component leaking into the ReactAndroid snapshot by adding `*/components/switch/iosswitch/*` path to the `exclude_patterns` in the parser config. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98473064 fbshipit-source-id: de25c4cbe839f8a065b8465e48a2b8c2a5ba81d7
…ot (react#56251) Summary: Pull Request resolved: react#56251 Excludes InputAccessory which is an iOS-only component with no Android support at any layer. In the `InputAccessoryView.js` there is explicit iOS guard which logs warning on Android. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98478125 fbshipit-source-id: 871923e001024971167a7bb2eb900ca3867983a4
…eact#56250) Summary: Pull Request resolved: react#56250 Excludes iOS-specific symbols from the ReactAndroid C++ API snapshot. The snapshot contains iOS native modules CxxSpec templates, their data structs, and bridging structs that have no relevance on Android. These symbols leaked because the Android codegen generates CxxSpec templates for ALL JavaScript module specs regardless of platform. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98480080 fbshipit-source-id: a5990c4769456ab756095129851eb4e8dbeda912
…#56253) Summary: Pull Request resolved: react#56253 Renames flag for verifying that the C++ public API snapshot is with sync with the actual public API surface to match the JS API command. Changelog: [Internal] Reviewed By: huntie Differential Revision: D98484129 fbshipit-source-id: ec806353f263b00e5060d9e7f0333bcf4cced148
Summary: Pull Request resolved: react#56286 [changelog](https://github.com/facebook/flow/blob/main/Changelog.md) Changelog: [Internal] Reviewed By: gkz Differential Revision: D98860515 fbshipit-source-id: 196ffafcee417ac2949822848fe7752070a2c30a
Summary: Pull Request resolved: react#56207 Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D96101927 fbshipit-source-id: 06c6dd11c145be44bcdd97f14683a222c66c96c6
Summary: Add Changelog for 0.85.0-rc.7 ## Changelog: [Internal] - Add Changelog for 0.85.0-rc.7 Pull Request resolved: react#56276 Test Plan: N/A Reviewed By: cipolleschi Differential Revision: D98792883 Pulled By: alanleedev fbshipit-source-id: c21c189e35d3eca3a013e2e924c87725cec86153
Summary: Adds missing `mixBlendMode: 'plus-lighter'` which has full support on CSS across all browsers (as opposed to, for example, `plus-darker`) iOS: ended up using linear dodge blend mode which should be identical, I tried using `@"addition"` which should've used `CIAdditionCompositing` but that didn't work, although I did confirm `maximum` does work and apply `CIMaximumCompositing`, funny stuff, can't wait for SwiftUI layer to take this over Android works as expected with its `BlendMode.PLUS` ## Changelog: [GENERAL] [ADDED] - Add mixBlendMode plus-lighter Pull Request resolved: react#56278 Test Plan: <img width="726" height="822" alt="image" src="https://github.com/user-attachments/assets/6f8a235c-f79b-4739-9d6c-90c989bad5f5" /> Reviewed By: javache, jorge-cab Differential Revision: D98842036 Pulled By: NickGerleman fbshipit-source-id: 3f4bf83918276579c48c784479d2a20bf2a2ba4c
Summary: Pull Request resolved: react#56282 Fixes react#56185 Fixes react#56186 Fixes react#56187 Delete the `fixTextClippingAndroid15useBoundsForWidth()` feature flag and all code gated behind it. This flag was never shipped, and the new code path has been implicated in several bugs. The change removes: - The feature flag definition and all generated plumbing (C++, JNI, Kotlin, JS) - The visual-bounds-based width measurement path in `TextLayoutManager.kt` - The `setUseBoundsForWidth(true)` call in `buildLayout()` - The MobileConfig parameter (`react_fabric.fix_text_clipping_android_15_use_bounds_for_width`) - The Facebook Android and OSS Experimental overrides The old advance-based width logic is retained as the sole code path. Changelog: [Internal] Reviewed By: cortinico Differential Revision: D98427218 fbshipit-source-id: 7c322353d9c0a0548386a486ecd4280b73a66872
…fined with props 2.0 (react#56288) Summary: When Android props 2.0 diffs a `View` where `zIndex` changes from a value to `undefined`, `HostPlatformViewProps::getDiffProps` calls `zIndex.value()` and throws `bad_optional_access`: https://github.com/user-attachments/assets/89752243-ff48-42c7-a584-b47a091b4a4d This change emits `folly::dynamic(nullptr)` when `zIndex` is cleared instead. ## Changelog: [ANDROID] [FIXED] - Fixed a crash when clearing `zIndex` with props 2.0 enabled Pull Request resolved: react#56288 Test Plan: Use the repro in `packages/rn-tester/js/examples/Playground/RNTesterPlayground.js`: ```js function Playground() { const [toggle, setToggle] = React.useState(false); return ( <View style={styles.container}> <Button title="Toggle" onPress={() => setToggle(t => !t)} /> <View style={{ backgroundColor: toggle ? 'blue' : 'red', height: 100, width: 100, position: 'absolute', zIndex: toggle ? undefined : 1, }} /> </View> ); } ``` 1. Enable Android props 2.0: ``` override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = true override fun enableExclusivePropsUpdateAndroid(): Boolean = true override fun enablePropsUpdateReconciliationAndroid(): Boolean = true ``` 2. run RNTester Playground on Android, and press `Toggle` to switch `zIndex` between `1` and `undefined`. This is with the issue fixed: https://github.com/user-attachments/assets/11253c23-b235-4e70-89a3-0d7bd07937f5 Reviewed By: javache Differential Revision: D98960669 Pulled By: NickGerleman fbshipit-source-id: d4a98434c599d2298c5cfc8c6895988ed0743af6
Summary: Pull Request resolved: react#56293 Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D98942266 fbshipit-source-id: b6df078e4e10191b464b3aebc70d55cca5f12fa2
Summary: Pull Request resolved: react#56300 Changelog: [Internal] Reviewed By: marcoww6 Differential Revision: D99004126 fbshipit-source-id: dfedc13c867cb768777e2ba65256a2c40ffb1d08
Summary: Pull Request resolved: react#56289 Changelog: [GENERAL][FIXED] Link VirtualView component I saw D98039999 and I wanted to check how the new components are working in OSS, and currently they don't. VirtualView component isn't correctly linked in OSS. This diff addresses that. Note that VirtualView in OSS requires `babel-plugin-transform-flow-enums` which is not part of the default template. Reviewed By: CalixTang Differential Revision: D98887952 fbshipit-source-id: f06ec9d4581c6fa3f2185641cb4b9f7acb8f557e
…56292) Summary: Pull Request resolved: react#56292 The TinyMap is a helper class under internal directory, not referenced anywhere in the snapshot, and considered unsafe (from the comment). It is not part of any module, so it is better to remove that from the snapshot. The `packAnimatedProps` method is used in `AnimationBackend` for translation from `AnimatedProps` to `folly::dynamic` and should not be used outside of React Native. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D98907855 fbshipit-source-id: e3a371cc088000a23f1ce1121fda808494979140
…EY (react#56304) Summary: Pull Request resolved: react#56304 Add support for specifying a custom `timeStamp` in the `Event` constructor options via a private symbol key (`EVENT_INIT_TIMESTAMP_KEY`) defined in `EventInternals`. This is for internal construction of events using a custom timestamp (instead of event object creation), for use cases like dispatching events from the host platform using the original timestamps. - Added `EVENT_INIT_TIMESTAMP_KEY` symbol to `EventInternals` - Added `setEventInitTimeStamp(eventInit, timeStamp)` helper function in `EventInternals` that validates the type and sets the symbol-keyed property on the event init object - Updated the `Event` constructor to read the custom timestamp from options if present, falling back to `performance.now()` - Added Fantom tests for custom timestamp and zero as a valid timestamp Changelog: [Internal] Reviewed By: huntie Differential Revision: D99076591 fbshipit-source-id: 2ea00394de885a5f338c1b3fe4792d5b4768cd7b
Summary: Pull Request resolved: react#56295 Changelog: [Android][Added] - Pass event object to `BackHandler` `hardwareBackPress` events to access timeStamp from native event. BackHandler on Android emits the `hardwareBackPress` event with a `null` payload — no timestamp or event data. This means there is no way for handlers to know when the user actually pressed the back button, which prevents accurate performance tracing for back navigations. This diff: - Sends `SystemClock.uptimeMillis()` as `timestamp` in the native `DeviceEventManagerModule.emitHardwareBackPressed()` event payload - Creates a new `HardwareBackPressEvent` class extending the DOM `Event` class, which overrides the `timeStamp` getter to return the native timestamp (falling back to `performance.now()` if unavailable) - Makes the public constructor throw `TypeError("Illegal constructor")` following the `PerformanceEntry` pattern - Updates all BackHandler platform files (Android, iOS, macOS, Windows) and type definitions (Flow, TypeScript) to create and pass the event to handlers - Updates the BackHandler mock to pass events in `mockPressBack` - Adds Fantom integration tests for both `HardwareBackPressEvent` and `BackHandler` Reviewed By: huntie Differential Revision: D98941079 fbshipit-source-id: baca35947cd7e8f598e9e040059579fb6e19553e
Summary:
scheduleCallback() and pause() held synchronized(paused) while calling
ReactChoreographer.postFrameCallback/removeFrameCallback, which acquire
synchronized(callbackQueues). ReactChoreographer dispatches frame
callbacks inside synchronized(callbackQueues), invoking
executeFrameCallback -> scheduleCallback -> synchronized(paused).
This is a lock ordering inversion: background thread acquires paused
then callbackQueues, main thread acquires callbackQueues then paused.
Fix: move postFrameCallback/removeFrameCallback calls outside the
synchronized(paused) block. The atomic state check (paused +
callbackPosted) stays inside the lock, only the ReactChoreographer
interaction moves outside.
Why this is safe:
- callbackPosted.getAndSet(true) inside the lock guarantees at most one
thread proceeds to post. A concurrent scheduleCallback will see
callbackPosted=true and bail out.
- If pause() runs between the lock release and postFrameCallback:
pause sets paused=true and callbackPosted=false, then calls
removeFrameCallback. Two outcomes depending on ordering inside
callbackQueues (which serializes both calls):
(a) post runs first, then remove cancels it — clean.
(b) remove runs first (nothing to remove), then post adds a callback.
That callback fires once, executeFrameCallback sees paused=true
via scheduleCallback and does not re-post. Net effect: one extra
no-op frame, then the loop stops.
- resume() already operated without synchronized(paused) before this
change, so no new races are introduced on that path.
## Changelog:
[Android] [Changed] - AnimationBackendChoreographer doesn't guard the ReactChoreographer post/remove with synchronized(paused)
Reviewed By: zeyap
Differential Revision: D99099455
fbshipit-source-id: 5c5e9e76ec23fd300a0a67c98b70a9c5bdb08f30
Summary: Pull Request resolved: react#56273 Adds a new, experimental `ReactNativeApplication.unstable_fastRefreshComplete` CDP event, emitted to subscribed active CDP sessions when a Fast Refresh update completes. **Notes** - As with D97486551, we reuse the `changeId` block in `HMRClient.js`, ensuring duplicate updates for the same change are not reported. Changelog: [Internal] Reviewed By: GijsWeterings, hoxyq Differential Revision: D98493216 fbshipit-source-id: b0b81a210fb84873e9358aa5484038062f110103
…ule (react#56257) Summary: Pull Request resolved: react#56257 ## Changelog: [General] [Changed] - move ViewTransition APIs not for react reconciler to its own TurboModule Move `unstable_getViewTransitionInstance` which is not consumed by react reconciler out of UIManagerBinding into a standalone NativeViewTransition CxxTurboModule, following the NativeDOM pattern. This avoids bloating UIManager with ViewTransition-specific APIs. Reviewed By: christophpurrer Differential Revision: D98360009 fbshipit-source-id: 191d0c8cc39fbe1cff87e12ad9a99d5e125b0250
Summary: Pull Request resolved: react#56302 Changelog: [Internal] migrate `ProgressBarAndroid` from Jest to Fantom Note: AndroidProgressBar does not expose props in the Fantom rendered output, so the test only verifies that the component renders. The old Jest snapshot verified JS-level props via the shallow renderer, but those aren't available through Fantom's native rendering pipeline for this component. Reviewed By: sammy-SC Differential Revision: D98998943 fbshipit-source-id: 6c570eaed1639e18cb54e29920c22aa9b9397615
) Summary: Guard `ReactViewGroup.addChildrenForAccessibility` against transient non-descendant races during accessibility traversal on Android. This replaces direct `super.addChildrenForAccessibility(...)` calls with a small wrapper that: - catches `IllegalArgumentException` - only swallows the specific "descendant of this view" case - rethrows all other `IllegalArgumentException`s ## Why There are recurring crashes with stack traces ending in: `ViewGroup.offsetRectBetweenParentAndChild` -> `offsetDescendantRectToMyCoords` -> `addChildrenForAccessibility` -> `IllegalArgumentException: parameter must be a descendant of this view`. This can happen when accessibility is traversing children while views are being re-parented/removed. Related reports: - react#32649 - react#38925 - react#7377 - kirillzyusko/react-native-keyboard-controller#961 - kirillzyusko/react-native-keyboard-controller#962 - dotnet/maui#32927 There is also precedent in RN for handling this class of non-descendant race defensively: - react#55273 ## Scope This is intentionally minimal and localized to accessibility child collection in `ReactViewGroup`. Behavior is unchanged in the non-racy path. ## Changelog: [Android] [Fixed] - Guard `ReactViewGroup.addChildrenForAccessibility` against transient non-descendant accessibility traversal crashes. Pull Request resolved: react#56182 Test Plan: Validated in a downstream RN Android app on Android 16 with repeated sheet/modal open-close stress and active accessibility hierarchy traversal; crash reproduces before patch and no longer reproduces with this guard. Reviewed By: jorge-cab Differential Revision: D97861147 Pulled By: Abbondanzo fbshipit-source-id: 15e624a94d5acd99777a7426787b52d8e85cdf8a
Summary: Pull Request resolved: react#56318 [changelog](https://github.com/facebook/flow/blob/main/Changelog.md) Changelog: [Internal] Reviewed By: gkz Differential Revision: D99477741 fbshipit-source-id: 3d3175111b128ae85c75db55d7e2f1d4bf3e1372
Summary: Pull Request resolved: react#56337 Feature is currently always on. ## Changelog: [internal] Reviewed By: marcoww6 Differential Revision: D99681591 fbshipit-source-id: 82a651fea23e160dd753c2e9644d0423e6a80395
…nvocation (react#56201) Summary: Pull Request resolved: react#56201 JavaMethodWrapper is a legacy architecture class that wraps ReactMethod-annotated Java methods via reflection for the bridge-based NativeModule invocation path. When ReactNativeFeatureFlags.useTurboModuleInterop is enabled (the new architecture), this class is completely bypassed — the TurboModule interop layer uses JavaInteropTurboModule (C++) with direct JNI invocation via JavaTurboModule::invokeJavaMethod(), which converts JSI values to JNI arguments directly in C++ without any Java-side reflection. This diff: - Deletes JavaMethodWrapper.kt (only instantiated from JavaModuleWrapper.findMethods()) - Deletes BaseJavaModuleTest.kt (test that exercised JavaMethodWrapper) - Removes the NativeMethod interface from JavaModuleWrapper (only implemented by JavaMethodWrapper) - Rewrites JavaModuleWrapper.findMethods() to compute method type inline without JavaMethodWrapper - Changes JavaModuleWrapper.invoke() to throw UnsupportedOperationException - Sets md.signature to empty string for sync methods to prevent C++ null deref The JavaModuleWrapper class shell is kept because it is still referenced from C++ JNI (JavaModuleWrapper.cpp) and NativeModuleRegistry. Full removal is planned as follow-up. Changelog: [Internal] internal Reviewed By: cortinico, javache Differential Revision: D97387121 fbshipit-source-id: 5c6a16f5b8d92430e4afeb3603b5bc538c076f90
…ds (react#56040) Summary: X-link: react/yoga#1918 Pull Request resolved: react#56040 Fixed 101 MissingOverrideAnnotation lint errors in YogaNodeJNIBase.java. Added Override annotation to all public methods that override abstract methods from the YogaNode superclass but were missing the annotation. This includes style getters/setters (direction, flex, margin, padding, border, position, width, height, min/max dimensions, aspect ratio, gap), layout methods (reset, calculateLayout, dirty), tree manipulation (addChildAt, removeChildAt, indexOf), and measurement/baseline functions. Changelog: [Internal] internal Reviewed By: cortinico Differential Revision: D95413075 fbshipit-source-id: fc148c8aefe734c090541b6eb02815c1446d2e98
…ster Summary: Chronos Job Instance ID: 1125908291255772 Sandcastle Job Instance ID: 22518000715806458 allow-large-files ignore-conflict-markers opt-out-review drop-conflicts Differential Revision: D99780677 fbshipit-source-id: 915f9d29d6587b15730422cceb9023df25d3a843
Summary: Same fix as react#56584 (targeting 0.83-stable), applied to main. Add a `redbox` subspec to `React-debug.podspec` with its own `header_dir`, following the same pattern `React-Fabric` uses for its subdirectories. Without this, static library builds (without `USE_FRAMEWORKS`) flatten all headers into the top-level `header_dir` (`react/debug`), so imports like `<react/debug/redbox/RedBoxErrorParser.h>` fail because the `redbox/` subdirectory is lost. On main this is currently masked because `test_e2e_ios_templateapp` uses prebuilt `React.framework`, but it would break any from-source static library build that includes `React-CoreModules`. Changelog: [Internal] Pull Request resolved: react#56585 Test Plan: CI Reviewed By: cortinico Differential Revision: D102809818 Pulled By: motiz88 fbshipit-source-id: 9871706a8e028c27f64f4d0dd9942d7c408c6b3b
This was referenced Jul 29, 2026
Tommy Nguyen (tido64)
approved these changes
Jul 29, 2026
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>
Saad Najmi (Saadnajmi)
force-pushed
the
saadnajmi/0-85-redbox2-merge
branch
from
September 21, 2026 14:53
16c149f to
87f638b
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 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.
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.
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 #3033. Upstream RedBox cutoff; #3054 follows.
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
c1798b51with ordered parentsdcd3d603and78a740d4e3351d0aThis is the lower PR in a two-PR draft stack. #3054 contains the RCTUIKit compatibility primitives and RedBox 2.0 AppKit port and will be retargeted onto this branch.
Topology
The first-parent order is:
c1798b51c75f09c2b8585bd6ceb8ccc2dee31dc7e3351d0afc5432314e586f4fd6fd8d516e51355f16c149f6888b2065485ecb97075087117084ac20The merge commit is unchanged. Its ordered parents remain:
dcd3d60324c220393aae7729bb538235f3c7041678a740d40aa2f9284b4568cb14307628e0f1d3f1The deterministic PR head tree is
99eaaeccb310145d3ead2f17dc63b424e68251d7.Validation
.hermesv1versionare byte-identical to the previous feat(macos): port RedBox 2.0 to AppKit via RCTUIKit compatibility primitives #3054 headFinal 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.