Repository navigation
fix(FFESUPPORT-997): remediate September 2026 vulnerabilities - #122
Conversation
… transitives Raise the devDependency floors to the latest in-major releases. Re-resolve the flagged transitive packages in their declared ranges: - brace-expansion 1.1.14/2.1.1/5.0.6 -> 1.1.21/2.1.7/5.0.12 - js-yaml 3.15.0/4.3.0 -> 3.15.2/4.3.2 - browserslist 4.28.2 -> 4.29.1 - baseline-browser-mapping 2.10.32 -> 2.11.26 - shell-quote 1.8.4 -> 1.10.0 - metro 0.84.4 -> 0.84.6, which removes image-size 1.2.1 All are dev tooling. No runtime dependency moves. No resolutions. The built lib/ output does not change. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Set expo, expo-constants, expo-font, and expo-router to the versions that `expo install --check` expects for SDK 54. Raise the eslint floor. Raise the postcss resolution floor to the patched version. Re-resolve the flagged transitive packages in their declared ranges: - @xmldom/xmldom 0.8.13/0.9.10 -> 0.8.15/0.9.12 - brace-expansion 1.1.14/2.1.1/5.0.6 -> 1.1.21/2.1.7/5.0.12 - js-yaml 3.15.0/4.3.0 -> 3.15.2/4.3.2 - browserslist 4.28.2 -> 4.29.1 - baseline-browser-mapping 2.10.32 -> 2.11.26 - shell-quote 1.8.4 -> 1.10.0 - nanoid 3.3.12 -> 3.3.19 - postcss 8.5.15 -> 8.5.28 - tar 7.5.20 -> 7.5.22 - undici 6.27.0 -> 6.29.0 The example app is not published. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
Multiple dependency and lockfile changes, plus unvalidated native example builds and publishing workflow, warrant human review.
Review effort: Lite
Findings: None
What changed in this PR
Remediates September 2026 vulnerabilities across root tooling and the example app without changing runtime SDK code.
Changes:
- Updates root development dependencies and lockfile resolutions.
- Updates Expo example dependencies and security resolutions.
- Removes the vulnerable root
image-sizedependency. - Corrects the claim that published package metadata is unchanged.
| File | Summary |
|---|---|
package.json |
Updates root development dependencies and publish metadata. |
yarn.lock |
Resolves patched root tooling and transitive dependencies. |
example/package.json |
Updates Expo tooling and security resolutions. |
example/yarn.lock |
Resolves updated example-app dependencies and vulnerabilities. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
🤖 Response from codex: Codex (read-only) checked the PR description against the diff, both lockfiles, the CI workflows, and the executed evidence. It ran after the pre-push review and took three rounds. Pre-push review: no blocking issues found. Per advisory: every root and example row is CLOSED, except the two deferred example rows (image-size 1.2.1 and decode-uri-component 0.2.2). Fact-check, round 1: FIX FIRST. Corrections made in the description:
Round 2: FIX FIRST. All 14 round-1 objections FIXED. New finding: Round 3: POST AS IS. No claim is contradicted by the source or the evidence. |
The v4.0.0 GitHub release and tag exist, but the publish run failed at job setup, so npm latest is still 3.8.0. A new version avoids moving or deleting the v4.0.0 tag. The SDK reads sdkVersion from package.json, so it reports 4.0.1. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
4209c3d to
0ead2e9
Compare
🤖 Generated from Claude
Jira: FFESUPPORT-997
This PR closes the Dependabot and
yarn auditfindings that have a fix inside the current major versions. It changes both lockfiles. The published code does not change: the runtime dependency closure is identical, and the builtlib/JavaScript and type files are identical. The SDK reports version 4.0.1, because it readspackage.jsonat run time. Only theversion(4.0.1) and the devDependency ranges in the packedpackage.json(and its copy inlib/) change.Advisories
"Ships?" asks if the code is in the published npm package. None of these packages is in the SDK runtime dependency closure. The example app is
privateand is not published.What changed
Root (
package.json,yarn.lock): SDK dev tooling@types/react,@typescript-eslint/*,eslint-plugin-prettier,jest,prettier,testdouble,@babel/core,typescript.ob1) move 0.84.4 → 0.84.6. metro 0.84.6 does not depend on image-size.test-exclude7.0.2 next to 6.0.0 (two majors, two requesters) and@parcel/watcher(ajest-haste-mapdependency with optional per-platform native binaries).resolutions. No change todependencies.Example app (
example/package.json,example/yarn.lock)expo~54.0.37,expo-constants~18.0.14,expo-font~14.0.12, andexpo-router~6.0.24.expo install --checkasks for these versions on SDK 54. Raise theeslintfloor to ^9.39.5.postcssresolution from ^8.5.10 to ^8.5.23, the first patched version. The resolution stays because@expo/metro-configasks for postcss ~8.4.32.react-native0.81.5, and@react-navigation/native7.2.5 do not change.@expo/cli54.0.27 addsagent-cli-detector0.1.7 (Expo package, no install script).Version bump to 4.0.1 (its own commit). Version 4.0.0 is not on npm: its publish run failed at job setup when the
release-kit/semveraction download failed. npmlatestis still 3.8.0. Thev4.0.0GitHub release and tag exist. A new version avoids moving or deleting that tag. The SDK readssdkVersionfrompackage.json, so the reported SDK version becomes 4.0.1.How the tests and CI protect this change
ci.yml) runs lint, typecheck,make test, andyarn prepackfor the root on Node 20. The cache key hashes both lockfiles, so this PR's first run installs from the new lockfile. All three CI jobs pass on this branch.yarn install --frozen-lockfile,yarn lint,yarn typecheck,make test(38 of 38 tests), andyarn prepackpass. The same steps pass in anode:20Linux container (arm64).lib/built before and after is identical, except the copiedpackage.json.yarn audit: root reports 0 vulnerabilities. Example reports only the 3 deferred advisories. An OSV scan of both lockfiles gives the same result.yarn install --frozen-lockfilepasses, with the same unmet@expo/metro-runtimepeer warning that expo-router 6.0.23 also declares.expo install --checkpasses (it fails onmain).expo export --platform allbundles iOS, Android, and web. Module counts matchmainwithin one (iOS 1094 vs 1095).tscandexpo linteach report the same single error as onmain. Thepostcssresolution already overrode Expo's ~8.4.32 range onmain.Not validated before merge
publish.yaml. It runs only on a release. It runsyarn install,yarn test, andyarn prepack. CI runs the samejestsuite (throughmake test) and the sameyarn prepack.Deferred
@expo/metro54.2.0 pins metro 0.83.3 exactly. React Native 0.81.5 pulls metro 0.83.7. metro 0.83.8 drops image-size. The first Expo release that uses it is@expo/metro55.1.2 (Expo SDK 55). An Expo major needs native builds that CI does not run. metro calls image-size to read the size of image assets that it bundles.expo-routerof each SDK line (6.0.24, 55.0.18, 56.2.21, 57.0.23) needs query-string ^7.1.3, which needs decode-uri-component ^0.2.2. The fix (0.5.0) is ESM only with a default export. query-string 7.1.3 callsrequire('decode-uri-component')as a function, so a resolution to 0.5.0 would break it.eslint10: the root config is in eslintrc format (eslintConfiginpackage.json). ESLint 9 and later use flat config.typescript6+: TS 6 rejects thebaseUrlandmoduleResolution: nodeoptions intsconfig.json. TypeScript emits the shipped.d.tsfiles.@babel/core8:@react-native/babel-preset0.85.3 depends on@babel/core^7.25.2.react-nativeand@react-native/*0.87: React Native minor releases can break. The root pins 0.85.3 exactly.react-native-builder-bob0.43: it builds the shippedlib/.@evilmartians/lefthook2: CI does not run the git hooks.@react-native-async-storage/async-storage3.x: runtime major, no advisory.@eppo/js-client-sdk-commonbump: tracked in FFESUPPORT-691.Dependabot PRs
All 12 open Dependabot PRs (#81 to #117) target versions that
mainalready resolves or passes. This PR moves tar (#106), undici (#108), and @xmldom/xmldom (#116) further. This PR does not close them.🤖 Generated with Claude Code