Conversation
… containing a space (#48747) Co-authored-by: Jakub Grzywacz <kontakt@jakubgrzywacz.pl>
…y --retry The "started - watch the run" comment is now posted only with --announce; the eyes reaction stays as the default receipt. --retry (comment flag or the new dispatch retry input) tells the publish phase to pass updateLatest to the findings tool, so the thread's previous findings comment is updated in place instead of joined by a sibling. The server resolves which comment that is; no comment id crosses the tool boundary.
# Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Fix ENG-26103 # How <!-- How did you build this feature or fix this bug and why? --> - Update EAS Observe docs for GA and update callout about MAUs. # Test Plan <!-- Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction. --> Proofread. # Checklist <!-- Please check the appropriate items below if they apply to your diff. --> - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [x] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
…ups (#49184) # Why <!-- Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests. --> Fix ENG-26094 # How <!-- How did you build this feature or fix this bug and why? --> Fix llms.txt generator dropping pages in nested navigation groups in the `llms.txt` generation script. # Test Plan <!-- Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction. --> See [preview](https://pr-49184.expo-docs.pages.dev/llms.txt) and search for `using-posthog` and there should be two pages: <img width="1618" height="264" alt="CleanShot 2026-08-21 at 01 26 18@2x" src="https://github.com/user-attachments/assets/33ddf78a-3b27-444b-8aeb-ce0bfbe9d50c" /> # Checklist <!-- Please check the appropriate items below if they apply to your diff. --> - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
# Why `RootModal` is not used anywhere # How Remove the file # Test Plan <!-- Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction. --> # Checklist <!-- Please check the appropriate items below if they apply to your diff. --> - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) Co-authored-by: expo-tuft[bot] <288127324+expo-tuft[bot]@users.noreply.github.com>
# Why `InteractionManager` is deprecated in react-native and `warns` in tests # How <!-- How did you build this feature or fix this bug and why? --> # Test Plan <!-- Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction. --> # Checklist <!-- Please check the appropriate items below if they apply to your diff. --> - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) Co-authored-by: expo-tuft[bot] <288127324+expo-tuft[bot]@users.noreply.github.com>
…9202) Automated upstream sync of generated reference content. | Generator | Status | | --- | --- | | App config schema | ➖ No changes | | Expo Skills | ➖ No changes | | EAS CLI reference | ✅ Synced | | Android permissions | ➖ No changes | ## Files - `docs/pages/eas/cli.mdx` - `docs/ui/components/EASCLIReference/data/eas-cli-commands.json` Co-authored-by: Expo Bot <expo-bot@users.noreply.github.com>
…rror on non-conformant firmwares (#48957) # Why `PictureInPictureUtils.applyPiPParams` guards the `setAutoEnterEnabled` call with `Build.VERSION.SDK_INT >= Build.VERSION_CODES.S`, which is correct per the platform docs. We have production crashes from **two different OEMs** whose **stock, unmodified** firmwares report `SDK_INT >= 31` **and** `PackageManager.FEATURE_PICTURE_IN_PICTURE`, yet whose `framework.jar` does not contain `PictureInPictureParams$Builder.setAutoEnterEnabled(Z)`: | Device | Android | `SDK_INT` | ROM state | | ----------------------------- | ------- | --------- | ---------- | | Samsung SM-A325F (Galaxy A32) | 13 | 33 | unmodified | | motorola one 5G UW ace | 12 | 31 | unmodified | Because the API level check and the PiP system-feature check **both pass**, there is no capability signal left for the library to branch on. The only way to survive this is to attempt the call and catch the failure. **To be clear about where the fault lies: the root cause is the OEM firmware, not `expo-video`.** `setAutoEnterEnabled` is a standard public API since API 31, and shipping a build that reports `SDK_INT` 31/33 without it is a compatibility violation on the vendor's side. Trusting `SDK_INT` as a capability signal is the documented approach, so the current code isn't wrong. The problem is that **`expo-video` is the only layer that can do anything about it.** These are budget devices that will not receive a firmware update, and app developers have no way out either: - The `NoSuchMethodError` propagates out of `VideoView.onLayout`, so it fires on **every layout pass** that mounts a `VideoView` — it cannot be caught or recovered from in app code. - It is not opt-in. `findAndSetupPipCandidate` calls `applyPiPParams` inside the `if (!newAutoEnter)` branch too, so apps that never enable PiP (`allowsPictureInPicture={false}` or the default) are affected identically. In our app the affected screen is the first screen after launch, so those users cannot get into the app at all — relaunching just crashes again. We see **3 distinct installations / 24 crash events / 19 sessions** over 90 days; the roughly one-event-per-session ratio is the signature of launch → crash → relaunch → crash again. <details> <summary>Stack trace</summary> ``` java.lang.NoSuchMethodError: No virtual method setAutoEnterEnabled(Z)Landroid/app/PictureInPictureParams$Builder; in class Landroid/app/PictureInPictureParams$Builder; or its super classes (declaration of 'android.app.PictureInPictureParams$Builder' appears in /system/framework/framework.jar) at expo.modules.video.utils.PictureInPictureUtilsKt.applyPiPParams (PictureInPictureUtils.kt:90) at expo.modules.video.utils.PictureInPictureUtilsKt.applyPiPParams$default (PictureInPictureUtils.kt:79) at expo.modules.video.managers.PictureInPictureManager.findAndSetupPipCandidate (PictureInPictureManager.kt:78) at expo.modules.video.managers.PictureInPictureManager.onPiPParamsChanged (PictureInPictureManager.kt:111) at expo.modules.video.VideoView.pipParams_delegate$lambda$2 (VideoView.kt:96) at expo.modules.video.delegates.IgnoreSameSet.setValue (IgnoreSameSet.kt:22) at expo.modules.video.VideoView.setPipParams (VideoView.kt:94) at expo.modules.video.VideoView.onLayout (VideoView.kt:338) at android.view.View.layout (View.java:22972) at android.view.ViewGroup.layout (ViewGroup.java:6389) at com.facebook.react.fabric.mounting.SurfaceMountingManager.updateLayout (SurfaceMountingManager.java:983) ... ``` Samsung build fingerprint from the native crash dump, showing a stock release build: ``` FINGERPRINT: samsung/a32ser/a32:13/TP1A.220624.014/A325FXXSCDXL2:user/release-keys TAGS: release-keys SDK: 33 VERSION.RELEASE: 13 ``` </details> Note that one of the two devices is on **Android 12 / API 31 itself** — the release that introduced `setAutoEnterEnabled`. That suggests some OEM firmwares from that period shipped without the method fully present, and that this is not specific to one vendor or SKU. Affected devices can't be enumerated ahead of time, so a device allowlist/denylist isn't a viable mitigation. # How Treat the setter as best-effort. Auto-enter PiP is the only functionality lost when it is unavailable, so degrading gracefully is strictly better than an unrecoverable crash. Two things worth noting about how this fits the existing code: 1. **This isn't a new pattern — it's a consistency fix.** Every other PiP framework call in this file already goes through `runWithPiPMisconfigurationSoftHandling`, which soft-handles `IllegalStateException` from a misconfigured manifest for exactly the same reason (the library can't verify device/manifest state up front). `setAutoEnterEnabled` was the one call sitting _outside_ that protection: ```kotlin if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { paramsBuilder.setAutoEnterEnabled(autoEnterPiP) // <- not wrapped } runWithPiPMisconfigurationSoftHandling { activity.setPictureInPictureParams(paramsBuilder.build()) // <- wrapped } ``` 2. **Simply moving the call inside that block would not fix it.** `NoSuchMethodError` is an `Error` (a `LinkageError`), not an `Exception`, so it isn't caught by `catch (e: IllegalStateException)`. It has to be caught explicitly — done inline here, but I'm happy to widen the helper instead if you'd prefer that shape. # Test Plan I don't have access to either affected device, so I could not verify the fix on failing hardware — the data above comes from production crash reporting. I want to be upfront about that rather than imply a test I didn't run. What I can say about verifiability: - **This is not a flaky or low-probability bug.** `NoSuchMethodError` is a static linkage failure — the method is either present in `framework.jar` or it isn't, with no timing or race component — and the call site is reached from `View.onLayout`, so it fires on every layout pass. On an affected firmware build it reproduces **100% of the time**. (Strictly the unit is the firmware build, not the model — the fingerprint above is `A325FXXSCDXL2`, so a different build for the same model may well contain the method.) - **The change is a provable no-op on conformant devices.** `setAutoEnterEnabled` either resolves (behaviour identical to before) or it doesn't (currently a fatal crash). There is no third state, so there is no behavioural risk to devices that work today. - The failure path can be simulated on any device by temporarily replacing the call with `throw NoSuchMethodError()`: before the change the app crash-loops on any screen containing a `VideoView`; after it, the video renders and only auto-enter PiP is skipped. We are already shipping the equivalent change as a `yarn patch` in our own app, compiled from source (see below), and it builds and passes our release pipeline — so the change is at least known to compile and not to regress conformant devices in a real app. Downstream context: we currently ship this exact change as a `yarn patch`. On Expo SDK 55 that alone isn't enough, because `expo-video` is linked as a precompiled AAR, so patching the Kotlin source in `node_modules` has no effect. We also had to add: ```json "expo": { "autolinking": { "android": { "buildFromSource": ["expo-video"] } } } ``` which forces `expo-video` to compile from source and measurably increases Android build times on every build, including CI. An upstream fix lets us drop both workarounds. Affected versions: the relevant code block is byte-identical in `55.0.11` (where we observed the crashes), `55.0.18`, `55.0.19` (`sdk-55`), `57.0.2` (`latest`) and current `main`. # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
# Why Two recent merged PRs were missing the credit in changelog # How Add missing credits
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )