Repository navigation
Backport upstream Fabric native-props synchronization to react-native-macos 0.81.9 - #4499
Merged
Jason Morse (JasonVMo) merged 3 commits intoNov 13, 2026
Merged
Conversation
4 of 10 tasks
Contributor
Bundle size reportTree-shaken, minified production esbuild bundles with React and React Native runtimes externalized.
The job is advisory: size changes are reported but do not fail the pull request. Bundle or analysis errors still fail. |
This was referenced Nov 12, 2026
Open
Jason Morse (JasonVMo)
marked this pull request as ready for review
November 13, 2026 08:13
Minimal backport of MIT-licensed upstream React Native code by OrfeasZ from 923e7ddcaf4d2de45ca7dedafbb84c6b87dbffc4 (react/react-native#52646). Original source copyright and license remain intact. F16 defect 1's oversized-preview qualification exposed the renderer race in the unchanged PGB-006 NativeSemantics window-resize callback. Both Fabric full lanes lost the app; a clean native rebuild still failed. The owned ASan report fabric-progress-asan-report.86816 records BUS while ShadowNode::clone copies nativeProps_DEPRECATED during AppKit layout. Guard both writers and the cloning reader with the upstream family mutex and preserve props precedence. Validated after fresh Pods and a clean Fabric native build with ASan retained: forced PGB-006 1/1, run 61d2dce4-5980-49b9-a727-412da47fca71; Apple module and Office-style bridging-header probe 3/3. Evidence: artifacts/desktop/f16-macos-physical/native-props-clean-build-green.log. FluentTester and other native app hosts were not built locally. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document the observed failing reader, inferred concurrent writer, complete Fabric regression results, and immutable-install/fresh-native-build evidence for the independent lower branch. No E driver or runtime implementation is present in this layer. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move session-only run details out of the published reference into ignored private PR evidence. Preserve upstream attribution, lock scope, renderer diagnosis, and the qualified native-host boundary. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Jason Morse (JasonVMo)
force-pushed
the
user/jasonvmo/rnmacos-native-props-backport
branch
from
November 13, 2026 08:13
5bdfc13 to
fb89e9d
Compare
Vladimir Morozov (vmoroz)
approved these changes
Nov 13, 2026
Jason Morse (JasonVMo)
deleted the
user/jasonvmo/rnmacos-native-props-backport
branch
November 13, 2026 14:38
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.
Platforms Impacted
Description of changes
Part of #4435. Prerequisite for the macOS physical-input fixes (#4441), which are stacked on this PR. This bottom layer contains only the renderer backport.
Adds a second repository-local Yarn patch on
react-native-macos@0.81.9:.yarn/patches/react-native-macos-npm-0.81.9-native-props.patch. It is a minimal backport of MIT-licensed upstream commit923e7ddcaf4d(react/react-native#52646), and the upstream copyright and license headers are kept.ShadowNode::clone) on the main thread while JavaScript replaces theirnativeProps_DEPRECATEDmap. An AddressSanitizer run of the owned process recordedBUSinfolly::dynamic::type()while that unprotected map was being copied. The concurrent writer is inferred from the failing reader, the unguarded source and the upstream fix; ThreadSanitizer was not run.ShadowNodeFamily.h) guards both native-props writers (UIManager.cpp) and the cloning reader (ShadowNode.cpp). The props are copied under the lock and parsed after it is released, so merge precedence is unchanged and the mutex is never held across shadow-tree commits.react-native-macosresolution chains both patches (…aa583a0648.patch&…native-props.patch), andyarn.lockis updated.native-core/references/rnmacos-patch.mdcovers attribution, the inferred race and lock scope, the clean-build requirement and the qualification boundary. Upstream replacement is a release gate tracked inremaining-work.md. Changeset:calm-fabric-props.md(native-core patch, docs only). Publishing native-core does not install this patch for consumers.This is a renderer concurrency fix, not a click-through or driver retry workaround. Without it, Fabric Storybook's PGB-006 NativeSemantics window-resize callback crashed the app in both the full physical and the accessible lanes, even after a clean native rebuild.
Verification
Local macOS (Apple silicon), under a machine-wide lock for native runs.
yarn install --immutable(no manifest, lockfile or patch drift),yarn buildapps/storybook:yarn storybook bundle --macos,prep --macos,build --macoswith fresh Pods/DerivedDatayarn workspace @fluentui-react-native/native-core test:apple-integration(CocoaPods module plus Office-style bridging header)react-native-macos); hosted CI covers the buildThe original Checkbox, keyboard-clear and Accordion physical reproductions passed without this backport. It is needed only for the full Fabric lanes, which include PGB-006.
One Opus 5.5 review: the backport matches upstream, the mutex scope is safe, and the
&resolution and changeset are appropriate. One minor finding (session details in a published reference) was fixed in5bdfc133f.ShadowNode::clonewhile the native-props map is replaced concurrentlyPull request checklist
This PR has considered (when applicable):