Skip to content

feat(deps): react-router v8 migration (fix GHSA-qwww-vcr4-c8h2) - #125

Merged
WolfTasks merged 4 commits into
mainfrom
worktree-react-router-v8
Sep 6, 2026
Merged

feat(deps): react-router v8 migration (fix GHSA-qwww-vcr4-c8h2)#125
WolfTasks merged 4 commits into
mainfrom
worktree-react-router-v8

Conversation

@WolfTasks

Copy link
Copy Markdown
Owner

Warum

GHSA-qwww-vcr4-c8h2 (CSRF, CWE-352, CVSS 7.1) war seit dem 2026-07-29 per .trivyignore + audit-gate.mjs-ALLOWLIST unterdrückt. Die Begründung war korrekt — das CVE betrifft ausschließlich den unstable RSC-Modus, und TaskWolf ist eine reine Client-SPA — aber ein Fix gab es nur in react-router 8.3.0, und das ist ein Major, in dem react-router-dom aufgelöst wurde.

Dieser PR behebt das CVE echt und entfernt die Unterdrückungen wieder. Umgesetzt nach Plan docs/superpowers/plans/2026-07-29-react-router-v8-migration-impl.md (PR 1 von 2).

Was

CommitInhalt
14f1939react-router-dom@^7.18.1react-router@^8.3.1; react-router-dom komplett raus (auch aus dem Lockfile)
cd4c82642 Dateien von from 'react-router-dom' auf from 'react-router'; RouterProvider in main.tsx aus react-router/dom (Sonderfall in v8)
a26ae2dCI setup-node 20 → 22 (react-router v8 verlangt Node ≥ 22.22 zur Build-Zeit)
532e59e.trivyignore-Block und audit-gate.mjs-ALLOWLIST entfernt → beide Gates laufen wieder ohne Ausnahme

Bewusst kein Umbau auf Loader/Actions/Data-Router — die Routen bleiben element-basiert (element: <Page/>), wir bleiben im Library-Mode mit createBrowserRouter + RouterProvider. Reine Security-Migration, minimaler Blast-Radius.

Verifikation

  • Baseline vor der Änderung grün (npm ci && npx tsc --noEmit)
  • Nach dem Paket-Swap gezielt der rote Zustand bestätigt: exakt 42× Cannot find module 'react-router-dom' — belegt, dass die Import-Umstellung vollständig sein muss
  • Nach der Umstellung: npx tsc --noEmitundnpm run build grün; grep -rn "react-router-dom" src/ ohne Treffer
  • Lockfile: grep -c "node_modules/react-router-dom" = 0
  • npm audit --audit-level=highexit=0, also keine HIGH/CRITICAL mehr
  • Gate scharf ohne Ausnahme: node ../.github/scripts/audit-gate.mjs → ✅, und die Zeile „Aktive begründete Ausnahmen" ist verschwunden

Offen

  • Manueller DE/EN-Browser-Smoke (Plan A5 Schritt 3) — Merge-Gate, das ich nicht abdecken kann: Login → Sidebar (useMatch) → Board → Issue-Dialog via ?issue= (useSearchParams) → Settings-Tabs (Outlet) → Deep-Link /p/:key/issues/:issueKey (useParams).
  • Dependabot-PR build(deps): bump react-router and react-router-dom in /frontend #108 (bumpt react-router/react-router-dom innerhalb v7) wird hierdurch gegenstandslos → als superseded schließen.
  • PR 2 (Lazy-Code-Splitting) setzt hierauf auf.

🤖 Generated with Claude Code

Wolfgang Kozianand others added 4 commits September 6, 2026 03:51
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…grade
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@WolfTasks
WolfTasks merged commit c3d472b into mainSep 6, 2026
11 checks passed
@WolfTasks
WolfTasks deleted the worktree-react-router-v8 branch September 6, 2026 02:15
WolfTasks pushed a commit that referenced this pull request Sep 6, 2026
Ships the react-router v8 migration:
- react-router-dom 7.18.1 -> react-router 8.3.1 (#125), which genuinely
fixes GHSA-qwww-vcr4-c8h2 (CSRF, CVSS 7.1) instead of suppressing it.
The .trivyignore entry and the audit-gate ALLOWLIST are removed again;
both gates now run without any exception.
- Route-based code-splitting via React.lazy (#126): initial bundle drops
from 1,692.35 kB (gzip 501.25) to 832.55 kB (gzip 260.60).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@WolfTasks