chore: upgrade to Laravel 13#4
Conversation
- Bump laravel/framework ^12 -> ^13, laravel/tinker ^2 -> ^3, laravel/boost ^1 -> ^2; composer resolved Pulse, Sanctum, Nightwatch, Collision, Pest, etc. to L13-compatible versions automatically - Update the renamed CSRF middleware references to PreventRequestForgery (routes/web.php withoutMiddleware, config/sanctum.php) — the old VerifyCsrfToken/ValidateCsrfToken aliases still exist but are deprecated Verified: app boots on Laravel 13.12.0, 28/28 tests passing, Pint clean. No migrations, no env changes. cache/session prefixes already use the L13 hyphen format, and the app caches only arrays (serializable_classes guard is a no-op). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25851f6 to
f8995a6
Compare
Review — Laravel 13 upgradeReviewed as a senior Laravel engineer. This is a clean, low-risk, well-documented dependency bump. No blockers. The functional surface is tiny (a CSRF middleware rename in two files); the rest is What I verified independently
Minor notes (none blocking)a. PR description says "Livewire 3" but the lock pins Livewire b. Symfony 7.4 → 8.0 rides along transitively. The lock bumps the c. d. One transitive patch downgrade ( e. Couldn't run the suite here / "28/28" looks understated. The review environment has no StackingBody notes this is stacked on the modernize PR ("review/merge that one first"); the diff here is correctly isolated to the L13 changes (4 files), so it reviews cleanly in isolation. Land the base PR first as instructed. Nice, disciplined upgrade. Fix the description nits (a/b/e) and this is good to merge. |
Summary
Major framework upgrade: Laravel 12 → 13, Tinker 2 → 3, Boost 1 → 2. Stacked on top of #3 — review/merge that one first (this PR's base is the modernize branch, so the diff shows only the L13 changes).
What changed
laravel/framework^12→^13(13.12.0),laravel/tinker^2→^3,laravel/boost^1→^2.PreventRequestForgery(routes/web.phpwithoutMiddleware,config/sanctum.php). TheVerifyCsrfToken/ValidateCsrfTokenaliases still exist but are deprecated.Breaking-change audit (Laravel 13 upgrade guide)
Checked each item against this app:
upsertuniqueBy validation — app has noupsertcalls. ✅serializable_classescache guard — the only cached value (GlobalStats) returns pure arrays, never objects. No config needed. ✅boot()instance creation —Play::booted()only registers acreatinglistener; doesn't create instances. ✅Verification
Laravel Framework 13.12.0php artisan test→ 28/28 passingphp artisan config:clear/route:listcleanDeploy notes
php artisan streaks:backfillfrom chore: PHP 8.5 compat, repair test suite, migrate frontend to pnpm #3 still applies.🤖 Generated with Claude Code