Apply Dependabot updates and fix bundler-audit failure on main - #151
Merged
Conversation
main is currently red: bundler-audit flags sqlite3 2.9.5 for GHSA-mwm8-39rw-8826 (use-after-free in SQLite aggregate arguments). The sqlite3 bump below clears it. This rolls up the open Dependabot PRs that are actually installable together. Every CI job was run locally against this tree. Bundler (all 5 PRs applied): brakeman 8.0.5 -> 8.0.6 image_processing 2.0.2 -> 2.0.3 selenium-webdriver 4.46.0 -> 4.47.0 (pulls rubyzip 3.5.0) sqlite3 2.9.5 -> 2.9.6 (security fix) thruster 0.1.23 -> 0.1.25 npm / mobile (applied): @rn-primitives/portal 1.5.2 -> 1.5.3 lucide-react-native 1.28.0 -> 1.33.0 jest-expo 57.0.3 -> 57.0.4 @expo/ui 57.0.8 -> 57.0.11 expo 57.0.9 -> 57.0.14 expo-image 57.0.1 -> 57.0.3 expo-linking 57.0.4 -> 57.0.6 expo-router 57.0.9 -> 57.0.13 expo-splash-screen 57.0.5 -> 57.0.6 react-native-gesture-handler 3.1.0 -> 3.2.1 react-native-safe-area-context 5.8.0 -> 5.9.0 react-native-screens 4.26.0 -> 4.27.0 react-native-svg 15.15.4 -> 15.15.5 Held back, with reasons - these four Dependabot PRs cannot be merged as proposed and should be closed rather than retried: react-native 0.86.2 -> 0.87.0 (part of the expo group PR) Expo SDK 57 pins react-native 0.86.2, and the newest published react-native-reanimated (4.5.3) peers react-native "0.83 - 0.86". No reanimated release supports 0.87 yet, so the group PR's own lockfile is peer-invalid. react-native-worklets 0.10.3 -> 0.11.4 (part of the same group PR) expo-modules-core peers react-native-worklets at "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0". 0.11.4 falls outside it, so npm stops hoisting expo-modules-core and nests it under node_modules/expo/. jest-expo's preset resolves it from the tree root, so the whole mobile suite dies with "Cannot find module 'expo-modules-core'". eslint 9.39.5 -> 10.8.1 eslint-config-expo vendors eslint-plugin-react 7.37.5, which calls context.getFilename() - removed in eslint 10. `expo lint` crashes with "contextOrFilename.getFilename is not a function". 7.37.5 is the latest release and peers eslint "^3 || ... || ^9.7", so there is no version to override to. jest 29.7.0 -> 30.4.2 (+ @types/jest 30) jest-expo 57.0.4 depends on the jest 29 internals (babel-jest, @jest/globals, jest-snapshot, jest-environment-jsdom all ^29.2.1). Mixing in jest 30 gives "this._moduleMocker.clearMocksOnScope is not a function" from jest-runtime. Needs a jest-30 jest-expo. tailwindcss 3.4.19 -> 4.3.3 nativewind 4.2.6 depends on react-native-css-interop, which peers tailwindcss "~3". Under v4 npm nests it and every component test fails on "Cannot find module 'react-native-css-interop'". The tailwind-v4 line is nativewind 5.0.0-preview.4 - a migration, not a bump. Worth noting CI would not have caught this on its own: jest maps CSS to a stub, so the breakage only shows up in a real Metro bundle. react-native-worklets and react-native-svg keep their exact pins rather than the caret ranges `npm install` writes, since a caret on worklets would let a later resolve pull 0.11.x and reintroduce the hoisting failure above. Verified locally against every CI job: brakeman, bundler-audit, importmap audit, rubocop - all clean rails test - 20 runs, 0 failures rails test:system - 0 runs (none defined) mobile: npm ci, lint, typecheck - clean mobile: jest - 28 tests, 4 suites pass expo export --platform web - bundles, NativeWind emits its 23KB stylesheet (covers the Tailwind path CI skips) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 20, 2026
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.
Rolls up the open Dependabot PRs that are actually installable together, and fixes the security scan that is currently failing on
main.Why
mainis red todaybin/bundler-auditfails on sqlite3 2.9.5 — GHSA-mwm8-39rw-8826, a use-after-free in SQLite aggregate arguments. The sqlite3 bump below clears it, which turns thescan_rubyjob green again.Applied — 8 of the 12 open Dependabot PRs
Bundler (all 5):
npm / mobile:
Held back — 4 PRs that cannot merge as proposed
Each of these was reproduced as a hard failure, not skipped out of caution. They should be closed rather than rebased, since retrying produces the same result.
react-native0.86.2 → 0.87.0 (part of the expo group PR)Expo SDK 57 pins
react-native0.86.2, and the newest publishedreact-native-reanimated(4.5.3) peersreact-native: "0.83 - 0.86". No reanimated release supports 0.87 yet, so the group PR's own lockfile is peer-invalid — a plainnpm installof those versions is rejected by npm outright.react-native-worklets0.10.3 → 0.11.4 (same PR)expo-modules-corepeers worklets at"^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0". 0.11.4 falls outside that, so npm stops hoistingexpo-modules-coreand nests it undernode_modules/expo/.jest-expo's preset resolves it from the tree root, so the entire mobile suite dies withCannot find module 'expo-modules-core'.eslint9.39.5 → 10.8.1eslint-config-expovendorseslint-plugin-react7.37.5, which callscontext.getFilename()— removed in ESLint 10.npm run lintcrashes withTypeError: contextOrFilename.getFilename is not a function. 7.37.5 is the latest release and peerseslint: "^3 || … || ^9.7", so there is no version to override to. Blocked until eslint-plugin-react ships ESLint 10 support.jest29.7.0 → 30.4.2 (+@types/jest30)jest-expo57.0.4 depends on jest 29 internals (babel-jest,@jest/globals,jest-snapshot,jest-environment-jsdom, all^29.2.1). Mixing in jest 30 givesTypeError: this._moduleMocker.clearMocksOnScope is not a functionfrom jest-runtime. Needs a jest-30 release of jest-expo.tailwindcss3.4.19 → 4.3.3nativewind4.2.6 depends onreact-native-css-interop, which peerstailwindcss: "~3". Under v4 npm nests it and every component test fails onCannot find module 'react-native-css-interop'. The Tailwind v4 line isnativewind@5.0.0-preview.4— a migration, not a version bump.One deliberate change beyond the bumps
npm installrewrote the exact pins onreact-native-workletsandreact-native-svginto caret ranges. I restored both to exact pins —^0.10.3on worklets would let a later resolve pull 0.11.x and silently reintroduce the hoisting failure described above.Verification
Every CI job was run locally against this exact tree (Node 22, Ruby 4.0.5):
bin/brakeman --no-pagerbin/bundler-auditbin/importmap auditbin/rubocopbin/rails db:test:prepare testbin/rails db:test:prepare test:systemmobile: npm cimobile: npm run lintmobile: npm run typecheckmobile: npm testmobile: expo export --platform webnpm audit --audit-level=highstill reports the pre-existing Expo toolchain advisories, unchanged by this PR — that step is alreadycontinue-on-errorinci.yml.🤖 Generated with Claude Code