Remix upgraded to address React Router vulnerabilities
The webapp's underlying Remix framework has been bumped from 2.1.0 to 2.17.4, patching known security vulnerabilities in React Router and transitive dependencies like tar-fs.
Security vulnerabilities in React Router required an underlying framework update. The web application's Remix dependencies have been bumped from 2.1.0 to 2.17.4. This update patches the routing engine and forces secure versions of transitive dependencies like tar-fs. The upgrade secures the API and dashboard orchestration engine without requiring modifications to the application code. AI coding guidelines were also updated to ensure future development correctly targets the 2.17.4 API surface.
View Original GitHub Description
Summary
Upgrades all @remix-run/* packages in apps/webapp from 2.1.0 → 2.17.4 to address security vulnerabilities. Recreation of #2951 on a fresh checkout of main.
Updated packages (apps/webapp/package.json):
@remix-run/express,@remix-run/node,@remix-run/react,@remix-run/serve,@remix-run/server-runtime: 2.1.0 → 2.17.4@remix-run/router: ^1.15.3 → ^1.23.2@remix-run/dev,@remix-run/eslint-config,@remix-run/testing: 2.1.0 → 2.17.4
Root package.json overrides:
@remix-run/dev@2.17.4>tar-fs: 2.1.3 → 2.1.4testcontainers@10.28.0>tar-fs: 3.0.9 → 3.1.1
Documentation: Updated Remix version references in CLAUDE.md, apps/webapp/CLAUDE.md, and .cursor/rules/webapp.mdc.
Server changes: Added .server-changes/upgrade-remix-security.md for release tracking per CONTRIBUTING.md.
No application code changes — only package.json files, documentation, a server-changes entry, and the regenerated pnpm-lock.yaml.
Updates since last revision
Addressed all 3 Devin Review findings:
- Missing
.server-changes/file — added.server-changes/upgrade-remix-security.md(commit ce22a0bd4) - Sentry Remix patch (
@sentry/remix@9.46.0) — verified the patch atpatches/@sentry__remix@9.46.0.patchapplies cleanly against 2.17.4. The patch modifies Sentry's ownRemixInstrumentationwrapper (removingrequest.clone()and form data attributes), not Remix internals. The underlying Remix APIs it hooks into (callRouteAction,callRouteLoader) are stable across 2.1→2.17. remix-typedjson@0.3.1compatibility — peer deps declare@remix-run/react: ^1.16.0 || ^2.0, covering 2.17.4. Confirmed working at runtime across all 22 tested pages that use it (root.tsx, hooks, route loaders).
Verification performed during this session
- Runtime: Express+Remix integration, magic link login, client-side routing, MetaFunction rendering
- Operational: hello-world task triggered via API, runs list, run detail, tasks page
- Comprehensive UI: 22 pages, 11 filter types, environment/project switchers, interactive elements
- Docker: Production Dockerfile (
docker/webapp/Dockerfile) builds successfully - Changelog audit: All 16 minor versions reviewed — every breaking change is behind opt-in future flags the webapp doesn't enable
Review & Testing Checklist for Human
- Verify auth flows in staging —
remix-auth,remix-auth-email-link, andremix-auth-githubdeclare peer deps on@remix-run/server-runtime@^1.x, which is now 2.17.4. Login (magic link + OAuth) should be tested in a staging environment since local dev testing may not exercise all auth code paths. - Verify tar-fs override versions resolve the targeted security advisories (2.1.4 and 3.1.1)
- Review new transitive dependencies added by the upgrade:
turbo-stream@2.4.1,undici@6.25.0,valibot@1.3.1,ws@7.5.10
Recommended test plan: deploy to staging and exercise core webapp flows — login (email magic link + GitHub OAuth), dashboard navigation, task triggering/viewing, and API endpoints — to catch runtime regressions not covered by local testing.
Notes
- Peer dependency warnings for
remix-auth-*packages (expecting@remix-run/server-runtime@^1.x) were present in the original PR #2951 as well and appear to be pre-existing - The lockfile diff is large (~1200 lines) but mechanical — driven by the Remix version bump cascading through transitive dependencies
- CI failures (
audit,units/internal/1-of-8) are unrelated:auditis aclaude-code-actionbot permissions issue; the internal test failure is a ClickHouse testcontainersFailed to connect to Reaperflake
Link to Devin session: https://app.devin.ai/sessions/d9fa9953b9bf40e5a8d12b8f5ba5b86b Requested by: @ericallam