From cdad6746dbe2967daa03d672d58e7a78c0b6c0c8 Mon Sep 17 00:00:00 2001 From: war-in Date: Fri, 20 Mar 2026 15:24:30 +0100 Subject: [PATCH 1/2] fix: recalculate layout when `display: contents` is set --- ....83.1+033+fix-display-contents-dirty-flag.patch | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 patches/react-native/react-native+0.83.1+033+fix-display-contents-dirty-flag.patch diff --git a/patches/react-native/react-native+0.83.1+033+fix-display-contents-dirty-flag.patch b/patches/react-native/react-native+0.83.1+033+fix-display-contents-dirty-flag.patch new file mode 100644 index 0000000000000..c8ab532b98b2e --- /dev/null +++ b/patches/react-native/react-native+0.83.1+033+fix-display-contents-dirty-flag.patch @@ -0,0 +1,14 @@ +diff --git a/node_modules/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp b/node_modules/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +index bd327ef..a51c45d 100644 +--- a/node_modules/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp ++++ b/node_modules/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +@@ -118,6 +118,9 @@ YogaLayoutableShadowNode::YogaLayoutableShadowNode( + if (auto layoutableChild = + std::dynamic_pointer_cast( + child)) { ++ if (static_cast(layoutableChild->yogaNode_.style().display()) == YGDisplayContents) { ++ yogaNode_.setDirty(true); ++ } + yogaLayoutableChildren_.push_back(std::move(layoutableChild)); + } + } From 54284dd855f1737f5e7453d49384e05326ef1374 Mon Sep 17 00:00:00 2001 From: war-in Date: Fri, 20 Mar 2026 15:24:37 +0100 Subject: [PATCH 2/2] chore: remove outdated patch and update details --- patches/react-native/details.md | 38 +++--- ...-display-contents-not-updating-nodes.patch | 120 ------------------ ...ut-prevent-focus-on-first-responder.patch} | 0 ...ix-modal-transparent-navigation-bar.patch} | 0 ...3.1+023+restore-interaction-manager.patch} | 0 ...024+perf-increase-initial-heap-size.patch} | 0 ...-hermes-young-gc-before-tti-reached.patch} | 0 ...+0.83.1+026+strip-hermes-debug-info.patch} | 0 ...ft-exception-if-viewState-not-found.patch} | 0 ...83.1+028+fix-fetching-files-android.patch} | 0 ...9+fix-view-stealing-first-responder.patch} | 0 ...ive+0.83.1+030+fix-exif-orientation.patch} | 0 ...ix-hermes-sampling-profiler-disable.patch} | 0 ...ampling-profiler-pthread-kill-crash.patch} | 0 14 files changed, 19 insertions(+), 139 deletions(-) delete mode 100644 patches/react-native/react-native+0.83.1+021+fix-display-contents-not-updating-nodes.patch rename patches/react-native/{react-native+0.83.1+022+textinput-prevent-focus-on-first-responder.patch => react-native+0.83.1+021+textinput-prevent-focus-on-first-responder.patch} (100%) rename patches/react-native/{react-native+0.83.1+023+fix-modal-transparent-navigation-bar.patch => react-native+0.83.1+022+fix-modal-transparent-navigation-bar.patch} (100%) rename patches/react-native/{react-native+0.83.1+024+restore-interaction-manager.patch => react-native+0.83.1+023+restore-interaction-manager.patch} (100%) rename patches/react-native/{react-native+0.83.1+025+perf-increase-initial-heap-size.patch => react-native+0.83.1+024+perf-increase-initial-heap-size.patch} (100%) rename patches/react-native/{react-native+0.83.1+026+perf-disable-hermes-young-gc-before-tti-reached.patch => react-native+0.83.1+025+perf-disable-hermes-young-gc-before-tti-reached.patch} (100%) rename patches/react-native/{react-native+0.83.1+027+strip-hermes-debug-info.patch => react-native+0.83.1+026+strip-hermes-debug-info.patch} (100%) rename patches/react-native/{react-native+0.83.1+028+log-soft-exception-if-viewState-not-found.patch => react-native+0.83.1+027+log-soft-exception-if-viewState-not-found.patch} (100%) rename patches/react-native/{react-native+0.83.1+029+fix-fetching-files-android.patch => react-native+0.83.1+028+fix-fetching-files-android.patch} (100%) rename patches/react-native/{react-native+0.83.1+030+fix-view-stealing-first-responder.patch => react-native+0.83.1+029+fix-view-stealing-first-responder.patch} (100%) rename patches/react-native/{react-native+0.83.1+031+fix-exif-orientation.patch => react-native+0.83.1+030+fix-exif-orientation.patch} (100%) rename patches/react-native/{react-native+0.83.1+032+fix-hermes-sampling-profiler-disable.patch => react-native+0.83.1+031+fix-hermes-sampling-profiler-disable.patch} (100%) rename patches/react-native/{react-native+0.83.1+033+fix-hermes-sampling-profiler-pthread-kill-crash.patch => react-native+0.83.1+032+fix-hermes-sampling-profiler-pthread-kill-crash.patch} (100%) diff --git a/patches/react-native/details.md b/patches/react-native/details.md index 666a6477b5da9..fdbef63a1b169 100644 --- a/patches/react-native/details.md +++ b/patches/react-native/details.md @@ -151,14 +151,7 @@ - E/App issue: 🛑 - PR Introducing Patch: https://github.com/Expensify/App/pull/59738 -### [react-native+0.83.1+021+fix-display-contents-not-updating-nodes.patch](react-native+0.83.1+021+fix-display-contents-not-updating-nodes.patch) - -- Reason: This patch updates Yoga to correctly update the subtrees of `display: contents` nodes so that they are in sync with their React Native counterparts. -- Upstream PR/issue: https://github.com/facebook/react-native/pull/52530 -- E/App issue: https://github.com/Expensify/App/issues/65268 -- PR introducing patch: [#65925](https://github.com/Expensify/App/pull/65925) - -### [react-native+0.83.1+022+textinput-prevent-focus-on-first-responder.patch](react-native+0.83.1+022+textinput-prevent-focus-on-first-responder.patch) +### [react-native+0.83.1+021+textinput-prevent-focus-on-first-responder.patch](react-native+0.83.1+021+textinput-prevent-focus-on-first-responder.patch) - Reason: On iOS, a text input automatically becomes the "first responder" in UIKit's "UIResponder" chain. Once a text input becomes the first responder, it will be automatically focused. (This also causes the keyboard to open) - This is not handled by React or React Native, but is rather a native iOS/UIKit behaviour. This patch adds an additional `TextInput` prop (`preventFocusOnFirstResponder`) and a ref method (`preventFocusOnFirstResponderOnce`) to bypass the focus on first responder. @@ -167,14 +160,14 @@ - E/App issue: [#54813](https://github.com/Expensify/App/issues/54813) - PR Introducing Patch: [#61492](https://github.com/Expensify/App/pull/61492) -### [react-native+0.83.1+023+fix-modal-transparent-navigation-bar.patch](react-native+0.83.1+023+fix-modal-transparent-navigation-bar.patch) +### [react-native+0.83.1+022+fix-modal-transparent-navigation-bar.patch](react-native+0.83.1+022+fix-modal-transparent-navigation-bar.patch) - Reason: This patch fixes an issue where it is not possible to enable a transparent navigation bar on Android - Upstream PR/issue: 🛑 - E/App issue: [#69005](https://github.com/Expensify/App/issues/69005) - PR introducing patch: [#69004](https://github.com/Expensify/App/pull/69004) -### [react-native+0.83.1+024+restore-interaction-manager.patch](react-native+0.83.1+024+restore-interaction-manager.patch) +### [react-native+0.83.1+023+restore-interaction-manager.patch](react-native+0.83.1+023+restore-interaction-manager.patch) - Reason: @@ -190,65 +183,72 @@ - E/App issue: https://github.com/Expensify/App/issues/71913 - PR introducing patch: https://github.com/Expensify/App/pull/69535 -### [react-native+0.83.1+025+perf-increase-initial-heap-size.patch](react-native+0.83.1+025+perf-increase-initial-heap-size.patch) +### [react-native+0.83.1+024+perf-increase-initial-heap-size.patch](react-native+0.83.1+024+perf-increase-initial-heap-size.patch) - Reason: This patch increases the initial heap size of the Hermes runtime. This allows us to disable Hermes Young-Gen Garbage Collection (GC) in a separate patch, which improves initial TTI and app startup time. - Upstream PR/issue: This is not intended to be upstreamed, since this is a low-level fix very specific to the Expensify app's requirements. - E/App issue: [#76859](https://github.com/Expensify/App/issues/76859) - PR introducing patch: [#76154](https://github.com/Expensify/App/pull/76154) -### [react-native+0.83.1+026+perf-disable-hermes-young-gc-before-tti-reached.patch](react-native+0.83.1+026+perf-disable-hermes-young-gc-before-tti-reached.patch) +### [react-native+0.83.1+025+perf-disable-hermes-young-gc-before-tti-reached.patch](react-native+0.83.1+025+perf-disable-hermes-young-gc-before-tti-reached.patch) - Reason: This patch disables Hermes Young-Gen Garbage Collection (GC), which improves initial TTI and app startup time, by delaying GC for early allocated memory to the first Old-Gen GC run. - Upstream PR/issue: This is not intended to be upstreamed, since this is a low-level fix very specific to the Expensify app's requirements. - E/App issue: [#76859](https://github.com/Expensify/App/issues/76859) - PR introducing patch: [#76154](https://github.com/Expensify/App/pull/76154) -### [react-native+0.83.1+027+strip-hermes-debug-info.patch](react-native+0.83.1+027+strip-hermes-debug-info.patch) +### [react-native+0.83.1+026+strip-hermes-debug-info.patch](react-native+0.83.1+026+strip-hermes-debug-info.patch) - Reason: Always pass `-output-source-map` to `hermesc` for production iOS builds, stripping ~13.4MB of debug metadata from the Hermes bytecode. Previously this flag was only passed when `SOURCEMAP_FILE` was set; if the build environment didn't propagate that variable, debug info remained in the shipped bundle. - Upstream PR/issue: This should ideally be the default behavior upstream, but no PR has been filed yet. - E/App issue: [#83000](https://github.com/Expensify/App/issues/83000) - PR introducing patch: [#83256](https://github.com/Expensify/App/pull/83256) -### [react-native+0.83.1+028+log-soft-exception-if-viewState-not-found.patch](react-native+0.83.1+028+log-soft-exception-if-viewState-not-found.patch) +### [react-native+0.83.1+027+log-soft-exception-if-viewState-not-found.patch](react-native+0.83.1+027+log-soft-exception-if-viewState-not-found.patch) - Reason: This patch prevents app crashes by soft-logging the exception when JS try to send events to native views even if they are removed from view hierarchy. The approach follows existing patterns in the same file where similar events are already handled this way and is based on suggestions from other developers in upstream discussions. - Upstream PR/issue: [#49077](https://github.com/facebook/react-native/issues/49077) [#7493](https://github.com/software-mansion/react-native-reanimated/issues/7493) - E/App issue: [#82611](https://github.com/Expensify/App/issues/82611) - PR introducing patch: [#84303](https://github.com/Expensify/App/pull/84303) -### [react-native+0.83.1+029+fix-fetching-files-android.patch](react-native+0.83.1+029+fix-fetching-files-android.patch) +### [react-native+0.83.1+028+fix-fetching-files-android.patch](react-native+0.83.1+028+fix-fetching-files-android.patch) - Reason: Fixes fetching files (blobs, file URIs) on Android - Upstream PR/issue: https://github.com/facebook/react-native/pull/55706 - E/App issue: https://github.com/Expensify/App/issues/75120 - PR Introducing Patch: https://github.com/Expensify/App/pull/79962 -### [react-native+0.83.1+030+fix-view-stealing-first-responder.patch](react-native+0.83.1+030+fix-view-stealing-first-responder.patch) +### [react-native+0.83.1+029+fix-view-stealing-first-responder.patch](react-native+0.83.1+029+fix-view-stealing-first-responder.patch) - Reason: In RN 0.83, `RCTViewComponentView.canBecomeFirstResponder` unconditionally returns `YES` (added for the `enableImperativeFocus` feature). This causes UIKit to promote parent views to first responder after navigation transitions complete (`_promoteSelfOrDescendantToFirstResponderIfNecessary`), stealing focus from text inputs and triggering an immediate focus→blur cycle. The fix gates `canBecomeFirstResponder` behind the `enableImperativeFocus` feature flag, which defaults to `false`. - Upstream PR/issue: https://github.com/facebook/react-native/pull/55908 - E/App issue: https://github.com/Expensify/App/issues/75120 - PR Introducing Patch: https://github.com/Expensify/App/pull/79962 -### [react-native+0.83.1+031+fix-exif-orientation.patch](react-native+0.83.1+031+fix-exif-orientation.patch) +### [react-native+0.83.1+030+fix-exif-orientation.patch](react-native+0.83.1+030+fix-exif-orientation.patch) - Reason: In RN 0.83, PR [#54127](https://github.com/facebook/react-native/pull/54127) changed `RCTDecodeImageWithData` to use `CGImageSourceCreateImageAtIndex` instead of `CGImageSourceCreateThumbnailAtIndex` for full-size images (to fix memory crashes with large images). However, `CGImageSourceCreateImageAtIndex` does NOT apply EXIF orientation transform to pixels, unlike the previous thumbnail API which used `kCGImageSourceCreateThumbnailWithTransform`. The code still hardcodes `UIImageOrientationUp`, so EXIF orientation is silently lost. This causes camera-captured images (which have EXIF orientation metadata) to appear rotated when processed by `expo-image-manipulator`. The fix reads the EXIF orientation from image properties and passes it to `UIImage` for the full-size code path. - Upstream PR/issue: https://github.com/facebook/react-native/pull/55934 - E/App issue: https://github.com/Expensify/App/issues/75120 - PR Introducing Patch: https://github.com/Expensify/App/pull/79962 -### [react-native+0.83.1+032+fix-hermes-sampling-profiler-disable.patch](react-native+0.83.1+032+fix-hermes-sampling-profiler-disable.patch) +### [react-native+0.83.1+031+fix-hermes-sampling-profiler-disable.patch](react-native+0.83.1+031+fix-hermes-sampling-profiler-disable.patch) - Reason: Fixes a copy-paste bug in `HermesSamplingProfiler::registerNatives()` where the JNI `"disable"` method was mapped to `HermesSamplingProfiler::enable` instead of `::disable`. This caused Sentry (or any caller of `HermesSamplingProfiler.disable()`) to call `enable()` again, corrupting the sampling thread state and leading to a `SIGABRT` crash (`invalid pthread_t passed to pthread_kill` in the `hermes-sampling` thread). - Upstream PR/issue: https://github.com/facebook/react-native/issues/56120 - E/App issue: [#77171](https://github.com/Expensify/App/issues/77171) - PR introducing patch: [#84708](https://github.com/Expensify/App/pull/84708) -### [react-native+0.83.1+033+fix-hermes-sampling-profiler-pthread-kill-crash.patch](react-native+0.83.1+033+fix-hermes-sampling-profiler-pthread-kill-crash.patch) +### [react-native+0.83.1+032+fix-hermes-sampling-profiler-pthread-kill-crash.patch](react-native+0.83.1+032+fix-hermes-sampling-profiler-pthread-kill-crash.patch) - Reason: On Android (Bionic libc), `pthread_kill` with an invalid `pthread_t` (e.g., thread has exited) calls `abort()` instead of returning `ESRCH` like glibc. The Hermes sampling profiler's timer thread sends `SIGPROF` via `pthread_kill` to registered runtime threads at ~100Hz. If a runtime's thread exits while profiling is active (e.g., during HybridApp transitions or background/foreground), the stale `pthread_t` triggers `SIGABRT: invalid pthread_t passed to pthread_kill`. This patch adds a `doLast` hook to the `unzipHermes` Gradle task that modifies `SamplingProfilerPosix.cpp` after Hermes source extraction, replacing `pthread_kill` with the `tgkill` syscall on Android, which safely returns `ESRCH` for dead threads. A kernel thread ID (`currentTid_`) is stored alongside the `pthread_t` and kept in sync via `setRuntimeThread()`. The Gradle hook approach is necessary because `unzipHermes` downloads fresh Hermes source, overwriting any direct source patches. - Upstream PR/issue: 🛑 - E/App issue: [#77171](https://github.com/Expensify/App/issues/77171) - PR introducing patch: [#84708](https://github.com/Expensify/App/pull/84708) + +### [react-native+0.83.1+033+fix-display-contents-dirty-flag.patch](react-native+0.83.1+033+fix-display-contents-dirty-flag.patch) + +- Reason: When a child node has `display: contents`, Yoga may reuse cached layout results from a previous pass even though the subtree has changed. This patch marks the parent yoga node as dirty when it encounters a child with `display: contents`, ensuring Yoga re-visits and recalculates the layout for that subtree instead of skipping it. +- Upstream PR/issue: 🛑 +- E/App issue: https://github.com/Expensify/App/issues/85877 +- PR introducing patch: 🛑 diff --git a/patches/react-native/react-native+0.83.1+021+fix-display-contents-not-updating-nodes.patch b/patches/react-native/react-native+0.83.1+021+fix-display-contents-not-updating-nodes.patch deleted file mode 100644 index c541fac088318..0000000000000 --- a/patches/react-native/react-native+0.83.1+021+fix-display-contents-not-updating-nodes.patch +++ /dev/null @@ -1,120 +0,0 @@ -diff --git a/node_modules/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp b/node_modules/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp -index 3618474..ab5b828 100644 ---- a/node_modules/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp -+++ b/node_modules/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp -@@ -476,16 +476,19 @@ static void zeroOutLayoutRecursively(yoga::Node* const node) { - } - - static void cleanupContentsNodesRecursively(yoga::Node* const node) { -- for (auto child : node->getChildren()) { -- if (child->style().display() == Display::Contents) { -- child->getLayout() = {}; -- child->setLayoutDimension(0, Dimension::Width); -- child->setLayoutDimension(0, Dimension::Height); -- child->setHasNewLayout(true); -- child->setDirty(false); -- child->cloneChildrenIfNeeded(); -- -- cleanupContentsNodesRecursively(child); -+ if (node->hasContentsChildren()) [[unlikely]] { -+ node->cloneContentsChildrenIfNeeded(); -+ for (auto child : node->getChildren()) { -+ if (child->style().display() == Display::Contents) { -+ child->getLayout() = {}; -+ child->setLayoutDimension(0, Dimension::Width); -+ child->setLayoutDimension(0, Dimension::Height); -+ child->setHasNewLayout(true); -+ child->setDirty(false); -+ child->cloneChildrenIfNeeded(); -+ -+ cleanupContentsNodesRecursively(child); -+ } - } - } - } -diff --git a/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.cpp b/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.cpp -index dce42fb..f1bc5e8 100644 ---- a/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.cpp -+++ b/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.cpp -@@ -181,6 +181,17 @@ void Node::setDirty(bool isDirty) { - } - } - -+void Node::setChildren(const std::vector& children) { -+ children_ = children; -+ -+ contentsChildrenCount_ = 0; -+ for (const auto& child : children) { -+ if (child->style().display() == Display::Contents) { -+ contentsChildrenCount_++; -+ } -+ } -+} -+ - bool Node::removeChild(Node* child) { - auto p = std::find(children_.begin(), children_.end(), child); - if (p != children_.end()) { -@@ -379,6 +390,23 @@ void Node::cloneChildrenIfNeeded() { - if (child->getOwner() != this) { - child = resolveRef(config_->cloneNode(child, this, i)); - child->setOwner(this); -+ -+ if (child->hasContentsChildren()) [[unlikely]] { -+ child->cloneContentsChildrenIfNeeded(); -+ } -+ } -+ i += 1; -+ } -+} -+ -+void Node::cloneContentsChildrenIfNeeded() { -+ size_t i = 0; -+ for (Node*& child : children_) { -+ if (child->style().display() == Display::Contents && -+ child->getOwner() != this) { -+ child = resolveRef(config_->cloneNode(child, this, i)); -+ child->setOwner(this); -+ child->cloneChildrenIfNeeded(); - } - i += 1; - } -diff --git a/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.h b/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.h -index 5ae7d43..3454d54 100644 ---- a/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.h -+++ b/node_modules/react-native/ReactCommon/yoga/yoga/node/Node.h -@@ -96,6 +96,10 @@ class YG_EXPORT Node : public ::YGNode { - return config_->hasErrata(errata); - } - -+ bool hasContentsChildren() const { -+ return contentsChildrenCount_ != 0; -+ } -+ - YGDirtiedFunc getDirtiedFunc() const { - return dirtiedFunc_; - } -@@ -244,15 +248,12 @@ class YG_EXPORT Node : public ::YGNode { - owner_ = owner; - } - -- void setChildren(const std::vector& children) { -- children_ = children; -- } -- - // TODO: rvalue override for setChildren - - void setConfig(Config* config); - - void setDirty(bool isDirty); -+ void setChildren(const std::vector& children); - void setLayoutLastOwnerDirection(Direction direction); - void setLayoutComputedFlexBasis(FloatOptional computedFlexBasis); - void setLayoutComputedFlexBasisGeneration( -@@ -286,6 +287,7 @@ class YG_EXPORT Node : public ::YGNode { - void removeChild(size_t index); - - void cloneChildrenIfNeeded(); -+ void cloneContentsChildrenIfNeeded(); - void markDirtyAndPropagate(); - float resolveFlexGrow() const; - float resolveFlexShrink() const; diff --git a/patches/react-native/react-native+0.83.1+022+textinput-prevent-focus-on-first-responder.patch b/patches/react-native/react-native+0.83.1+021+textinput-prevent-focus-on-first-responder.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+022+textinput-prevent-focus-on-first-responder.patch rename to patches/react-native/react-native+0.83.1+021+textinput-prevent-focus-on-first-responder.patch diff --git a/patches/react-native/react-native+0.83.1+023+fix-modal-transparent-navigation-bar.patch b/patches/react-native/react-native+0.83.1+022+fix-modal-transparent-navigation-bar.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+023+fix-modal-transparent-navigation-bar.patch rename to patches/react-native/react-native+0.83.1+022+fix-modal-transparent-navigation-bar.patch diff --git a/patches/react-native/react-native+0.83.1+024+restore-interaction-manager.patch b/patches/react-native/react-native+0.83.1+023+restore-interaction-manager.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+024+restore-interaction-manager.patch rename to patches/react-native/react-native+0.83.1+023+restore-interaction-manager.patch diff --git a/patches/react-native/react-native+0.83.1+025+perf-increase-initial-heap-size.patch b/patches/react-native/react-native+0.83.1+024+perf-increase-initial-heap-size.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+025+perf-increase-initial-heap-size.patch rename to patches/react-native/react-native+0.83.1+024+perf-increase-initial-heap-size.patch diff --git a/patches/react-native/react-native+0.83.1+026+perf-disable-hermes-young-gc-before-tti-reached.patch b/patches/react-native/react-native+0.83.1+025+perf-disable-hermes-young-gc-before-tti-reached.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+026+perf-disable-hermes-young-gc-before-tti-reached.patch rename to patches/react-native/react-native+0.83.1+025+perf-disable-hermes-young-gc-before-tti-reached.patch diff --git a/patches/react-native/react-native+0.83.1+027+strip-hermes-debug-info.patch b/patches/react-native/react-native+0.83.1+026+strip-hermes-debug-info.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+027+strip-hermes-debug-info.patch rename to patches/react-native/react-native+0.83.1+026+strip-hermes-debug-info.patch diff --git a/patches/react-native/react-native+0.83.1+028+log-soft-exception-if-viewState-not-found.patch b/patches/react-native/react-native+0.83.1+027+log-soft-exception-if-viewState-not-found.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+028+log-soft-exception-if-viewState-not-found.patch rename to patches/react-native/react-native+0.83.1+027+log-soft-exception-if-viewState-not-found.patch diff --git a/patches/react-native/react-native+0.83.1+029+fix-fetching-files-android.patch b/patches/react-native/react-native+0.83.1+028+fix-fetching-files-android.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+029+fix-fetching-files-android.patch rename to patches/react-native/react-native+0.83.1+028+fix-fetching-files-android.patch diff --git a/patches/react-native/react-native+0.83.1+030+fix-view-stealing-first-responder.patch b/patches/react-native/react-native+0.83.1+029+fix-view-stealing-first-responder.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+030+fix-view-stealing-first-responder.patch rename to patches/react-native/react-native+0.83.1+029+fix-view-stealing-first-responder.patch diff --git a/patches/react-native/react-native+0.83.1+031+fix-exif-orientation.patch b/patches/react-native/react-native+0.83.1+030+fix-exif-orientation.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+031+fix-exif-orientation.patch rename to patches/react-native/react-native+0.83.1+030+fix-exif-orientation.patch diff --git a/patches/react-native/react-native+0.83.1+032+fix-hermes-sampling-profiler-disable.patch b/patches/react-native/react-native+0.83.1+031+fix-hermes-sampling-profiler-disable.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+032+fix-hermes-sampling-profiler-disable.patch rename to patches/react-native/react-native+0.83.1+031+fix-hermes-sampling-profiler-disable.patch diff --git a/patches/react-native/react-native+0.83.1+033+fix-hermes-sampling-profiler-pthread-kill-crash.patch b/patches/react-native/react-native+0.83.1+032+fix-hermes-sampling-profiler-pthread-kill-crash.patch similarity index 100% rename from patches/react-native/react-native+0.83.1+033+fix-hermes-sampling-profiler-pthread-kill-crash.patch rename to patches/react-native/react-native+0.83.1+032+fix-hermes-sampling-profiler-pthread-kill-crash.patch