Laravel 13 + PHP 8.4 + Pest 5 baseline.
- Requires PHP ^8.4 and Laravel ^13.0 (illuminate/contracts, database, support)
- Requires ozankurt/laravel-modules-core ^2.0 and ozankurt/laravel-modules-interactions ^2.0
- spatie/laravel-package-tools ^1.93, cviebrock/eloquent-sluggable ^12.0 || ^13.0
- Test toolchain on Pest 5 and Orchestra Testbench 11
- Filament 3, 4 and 5 all still supported
- CI matrix: PHP 8.4 x Laravel 13 x Filament 3/4/5
Laravel 13 narrows DB::raw() and orderByRaw() to literal-string, so three spots that spliced runtime values into SQL were rewritten: ThreadObserver::deleted()/restored() now use decrement()/incrementEach() instead of concatenating the post count, created() uses increment() for consistency, and Thread::scopeSearch() drops the getTable() qualifier from its ranking CASE (unambiguous, since the scope never joins). Counter semantics are unchanged and ThreadDeletionDriftTest still asserts board.post_count matches recountBoard across soft delete and restore.
Suite is green at 145 passed / 461 assertions with PHPStan level 8 clean. Board and thread read caching is untouched; ACL/policy reads remain deliberately uncached.
BREAKING: drops Laravel 12 and PHP 8.3.