Root cause
CanPaginate viene analizzato sia nel consumer reale ListLogActivities, dove Livewire HandlesPagination::getPage() non dichiara un tipo di ritorno, sia nel test Pest anonimo, dove ritorna int. La guardia is_numeric() risultava quindi necessaria in un contesto ma sempre vera nell'altro; il ritorno diretto lasciava invece mixed nel consumer reale.
Correzione
Normalizzazione con filter_var FILTER_VALIDATE_INT e min_range 1, con fallback semantico a pagina 1, senza cast, assert, suppressioni o widening. Generics di Builder/Paginator e value type delle opzioni restano espliciti nel contratto reale.
Evidenze
- php -l CanPaginate.php: OK
- PHPStan scoped su trait, ListLogActivities e Pest: zero errori
- PHPMD standalone: exit 0, report build/phpmd/activity-can-paginate.txt
- Pest coverage: 5 pass e 1 failure infrastrutturale, tabella activity_log assente nello SQLite di test
- PHPStan modulo: solo stale unmatched ignore globale; phpstan.neon non modificato
Issue lasciata aperta finché Pest pertinente non è interamente verde.
Root cause
CanPaginate viene analizzato sia nel consumer reale ListLogActivities, dove Livewire HandlesPagination::getPage() non dichiara un tipo di ritorno, sia nel test Pest anonimo, dove ritorna int. La guardia is_numeric() risultava quindi necessaria in un contesto ma sempre vera nell'altro; il ritorno diretto lasciava invece mixed nel consumer reale.
Correzione
Normalizzazione con filter_var FILTER_VALIDATE_INT e min_range 1, con fallback semantico a pagina 1, senza cast, assert, suppressioni o widening. Generics di Builder/Paginator e value type delle opzioni restano espliciti nel contratto reale.
Evidenze
Issue lasciata aperta finché Pest pertinente non è interamente verde.