Goal
Catch up the Epic Stack template packages on dev (staging), then promote to main when ready. One package per PR into dev , not main.
Workflow
Branch from origin/dev (not main, not stale updater PR P/patn dev stack updater #21 ).
Implement one child issue; respect each issue's Files allowed / Do not lists.
PR into dev → staging deploy (patn-dev-stack-staging) → human smoke (homepage, login, notes, dashboard).
Close child issue after staging smoke passes.
Production: merge dev → main when ready (package 1 alone is OK for prod; packages 5–7 should stay on staging longer).
Keep list (do not bump in unrelated PRs)
vite, vitest, @vitejs/plugin-react, vite-tsconfig-paths
express, @sentry/*
@prisma/client, prisma, litefs-js
Routing migration (react-router v6 → v7) — separate epic, not these catch-up issues
Implementation order
Order
Issue
Title
Notes
1
#24
React Router 7.18+ CVE
Merged PR #31 → dev. Staging was blocked until #33 . Smoke after this dev deploy.
1b
#33
Cache Playwright browsers in CI
Merged PR #37 → dev. Cache + 1.51 collection shims (SVG stub, NODE_OPTIONS=--no-experimental-strip-types). Remove shims when Playwright is bumped in #29 .
2
#25
Sentry hidden maps + event filters
Next after staging smoke of #24 +#33
3
#26
Small bugfix batch
4
#27
LiteFS 2 + multi-region cache + asset fallthrough
5
#28
Server index.ts / drop server-build / Express 5
6
#29
Vite 7 + Vitest 4 + remaining majors
Includes Playwright 1.51 → 1.58; delete #33 collection shims
7
#30
react-router-auto-routes + dashboard+ rename
Separate from package bumps
Non-blocking: #34 — research/improve catch-up skill. Skill PR #35 still open — merge when convenient.
Already done in #24 (do not redo)
Loader test args: url + pattern where required
Info typegen removal → Route.ComponentProps loader/action data
Do not restore build.external: ['**/*.svg'] (that caused Unknown file extension ".svg")
Already done in #33 (do not redo)
Versioned Playwright browser cache in .github/workflows/deploy.yml
15-minute install timeout on cache miss; install-deps chromium on hit
tests/svg-import-stub.cjs + PW_TEST_SOURCE_TRANSFORM on the test step (Playwright 1.51)
NODE_OPTIONS=--no-experimental-strip-types on the test step (Node 22.18 vs Playwright 1.51)
Agent resources
Rules for agents
Goal
Catch up the Epic Stack template packages on
dev(staging), then promote tomainwhen ready. One package per PR intodev, notmain.Workflow
origin/dev(notmain, not stale updater PR P/patn dev stack updater #21).dev→ staging deploy (patn-dev-stack-staging) → human smoke (homepage, login, notes, dashboard).dev→mainwhen ready (package 1 alone is OK for prod; packages 5–7 should stay on staging longer).Keep list (do not bump in unrelated PRs)
vite,vitest,@vitejs/plugin-react,vite-tsconfig-pathsexpress,@sentry/*@prisma/client,prisma,litefs-jsreact-routerv6 → v7) — separate epic, not these catch-up issuesImplementation order
dev. Staging was blocked until #33. Smoke after thisdevdeploy.dev. Cache + 1.51 collection shims (SVG stub,NODE_OPTIONS=--no-experimental-strip-types). Remove shims when Playwright is bumped in #29.Non-blocking: #34 — research/improve catch-up skill. Skill PR #35 still open — merge when convenient.
Already done in #24 (do not redo)
url+patternwhere requiredInfotypegen removal →Route.ComponentPropsloader/action databuild.external: ['**/*.svg'](that causedUnknown file extension ".svg")Already done in #33 (do not redo)
.github/workflows/deploy.ymlinstall-deps chromiumon hittests/svg-import-stub.cjs+PW_TEST_SOURCE_TRANSFORMon the test step (Playwright 1.51)NODE_OPTIONS=--no-experimental-strip-typeson the test step (Node 22.18 vs Playwright 1.51)Agent resources
.cursor/skills/epic-stack-catch-up/SKILL.md(merge when convenient).cursor/rules/epic-stack-catch-up.mdc(always-on pointer)Rules for agents
dev(RR CVE + Playwright CI) passes.package.json/ lockfile — do not assume template versions from memory.