The macrotask rethrow let React commit the fallback first: that paints a frame, expo-updates records first content / launch success, and the cached- update rollback is dropped before the delayed fatal ever runs — so a bad OTA's Home crash could persist. Rethrowing from the boundary's own render while the fatal-first-paint policy applies means nothing above the seam catches it, React discards the whole in-progress commit, and no frame is shown. That is the same unwinding a boundaryless render throw took before this PR existed, so ErrorRecovery's startup failure path (rollback + its crash log) is untouched; componentDidCatch never runs for the discarded pass, so nothing double-reports.
Julius Marminge committed on 9/23/2026, 12:13:23 AMparent333b8fe
1 file changedLine totals unavailable