Repository navigation
Resolve 39 of 40 Dependabot alerts on Expo SDK 57 and rewrite the README - #36
Merged
Merged
Conversation
`expo install --check` (part of `npm run verify`) now fails on main because Expo has shipped newer SDK 57 patch releases than the ones pinned here. Every single-package Dependabot PR that ran Verify since mid-August failed on this step rather than on its own change. Run `npx expo install --fix` to move expo 57.0.27, expo-router 57.0.25, react-native 0.86.3, reanimated 4.5.1, worklets 0.10.1 and the other expo-* modules to the SDK 57 versions Expo expects. This stays on SDK 57 with no major version changes. The newer @expo/cli also brings in patched transitive releases: - nanoid 3.3.16 -> 3.3.20 (GHSA-2v37-7h3g-55p8) - compression 1.8.1 -> 1.8.2 (GHSA-vc2v-76pw-4v95) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run `npm update` within the existing semver ranges and raise the sharp and vitest floors to their patched releases so a fresh resolve cannot fall back to a vulnerable version. No major versions change. Patched releases picked up: - @xmldom/xmldom 0.8.13 -> 0.8.15 and 0.9.10 -> 0.9.12 (23 alerts) - brace-expansion 5.0.7 -> 5.0.12 and 1.1.16 -> 1.1.21 - browserslist 4.28.5 -> 4.29.3 - baseline-browser-mapping 2.10.42 -> 2.11.27 - js-yaml 4.3.0 -> 4.3.2 - postcss 8.5.22 -> 8.5.29, source-map-js 1.2.1 -> 1.2.2 - sharp 0.35.3 -> 0.35.5 (libheif and librsvg advisories) - vitest and @vitest/mocker 4.1.10 -> 4.1.11 - shell-quote 1.9.0 -> 1.12.0 (critical in npm audit) - image-size leaves the tree: metro 0.84.5 no longer depends on it npm audit across both commits: 36 (1 critical, 28 high, 7 moderate) -> 21 (18 high, 3 moderate). Nothing left has a patched release that is compatible with SDK 57; the pull request lists each one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vitest 4.1.11 already carries the @vitest/mocker path traversal fix, but Dependabot keeps proposing the 5.x line (#35). The suite is plain Node unit tests with no config file, and it passes unchanged on vitest 5.0.3 along with typecheck and lint. vitest 5 requires Node ^22.12 or >=24, which matches the Node 22 used in CI. The change is confined to the dev-only test toolchain; nothing in the app bundle depends on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The grouped production PR (#32) bundles expo-router 58, @expo/ui 58, react-native 0.87, gesture-handler 3, async-storage 3 and worklets 0.13 onto an SDK 57 app. Those versions fail `expo install --check`, and the CHANGELOG records an earlier automated upgrade that crashed the app at launch. Expo's guidance is to move SDK-managed packages together with `npx expo install`. Ignore major (and, for React Native packages, minor) version updates for the SDK-managed set so the weekly group only carries changes the SDK accepts. Dependabot alerts are unaffected; patch-level updates still arrive; SDK upgrades stay a deliberate, tested change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The old README described Mend as free with no advertising, which the app itself stopped promising in 46b3d0e (tests/positioning.test.ts now forbids that wording). It also described "private local records" and "explicit shared-space sync", while the app backs up its whole local state to Supabase whenever any session exists, including the anonymous account created when someone skips sign-in. The new README covers who Mend is for, beta status (TestFlight only, not on the App Store), features, and a privacy model taken from the code: what is stored on device, the anonymous background account, exactly what the backup and shared space send to Supabase, that data is not end-to-end encrypted, the grant and RPC boundaries in the migrations, and account deletion. It also documents the Expo Router structure, the Supabase tables, RPCs and Edge Functions (noting that mend-delete-account is deployed but its source is not in the repo), how to run the app, every step of `npm run verify`, and the CI and release workflows by their actual triggers. The repository has no app screenshots yet, so the README uses the app icon only rather than placeholder images. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the security updates, the vitest upgrade, the Dependabot ignore rules and the README rewrite under Unreleased so the next tagged beta lists them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 6, 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.
Problem
npm auditreporting 36 vulnerable packages (1 critical, 28 high, 7 moderate) from 37 distinct advisories.npm run verifyfails onmaintoday:expo install --checkreports SDK 57 patch drift (Expo has shipped newer SDK 57 patches). Every single-package Dependabot PR that ran Verify since mid-August failed on that step, not on its own change.Approach
Each commit is a separate, verifiable step and stays on Expo SDK 57:
npx expo install --fixmoves expo 57.0.27, expo-router 57.0.25, react-native 0.86.3, reanimated 4.5.1, worklets 0.10.1 and the otherexpo-*modules to the versions SDK 57 expects. This alone makesexpo install --checkpass again and pulls patched nanoid and compression through the newer@expo/cli.npm updatewithin existing semver ranges refreshes the lockfile, and thesharpandvitestfloors move to their patched releases. This clears @xmldom/xmldom (both 0.8 and 0.9 lines), brace-expansion (both lines), browserslist, baseline-browser-mapping, js-yaml, postcss, source-map-js, sharp, vitest/@vitest/mocker, shell-quote (critical), and drops image-size (metro 0.84.5 no longer uses it).npm audit fix(without--force) was tried afterwards and only reshuffles hoisting, so it is not applied. Nooverrideswere needed; none of the remaining advisories has an override that works (see below).expo,expo-*,@expo/*,eslint-config-expo: majors;react,react-dom,react-native,react-native-*, async-storage: majors and minors) are left tonpx expo install --fix. Alerts are unaffected.Audit: before → after
npm auditpackages (before)npm auditpackages (after)npm auditdistinct advisories (before)npm auditdistinct advisories (after)The 21 remaining
npm auditpackages are three root advisories plus the packages that depend on them:@expo/clirequire()s it, so an override would break URL parsing at runtime. Fixed by expo-router 58, which ships with SDK 58; SDK 58 is still on npm'snexttag, notlatest. This is the one Dependabot alert (#11) that stays open.npm audit flags expo, react-native, reanimated, and worklets themselves only because they sit above these three packages. Dependabot has not opened alerts for node-forge or braces yet; it may once it catches up, and neither has a fix to apply.
Dependabot PRs
Superseded by this branch; Dependabot should close them once this lands on
main:Not superseded:
eslint-config-expo57. Recommend closing it or testing it on its own branch.Validation
GitHub Actions is disabled for this repository, so this PR will show no CI checks. Everything below was run locally on the final commit.
mainrequires theverifycheck, so merging needs Actions re-enabled or an admin bypass.npm cithennpm run verify(exactly whatverify.ymlruns) on Node 22.23.3 with npm 10.9.9, matchingsetup-node@v7withnode-version: 22: lint ✓, typecheck ✓, 24/24 tests in 7 files ✓, content check ✓, backend contract ✓,expo install --check+expo config✓. The same run on Node 24 also passes.npx expo export --platform ios --platform android --platform webbundles all three platforms (iOS 5.9 MB and Android 6.1 MB Hermes bytecode, static web render of 31 HTML pages).npx expo-doctor: 21/21 checks pass.expo prebuild --platform ios,pod install, andxcodebuildDebug for the iOS Simulator with Xcode 27.0 end in** BUILD SUCCEEDED **(compile only; not launched).npm auditre-run on the final lockfile (table above).Risk and rollout
testflight.ymlonly has aworkflow_dispatchtrigger, so nothing here starts a build.verify.ymltriggers onpull_requestand pushes tomain.🤖 Generated with Claude Code