Fix failAfterMinutes() when a cache store refuses to unserialize date objects.
What changed
- Cache first-failure timestamps as ISO strings with microsecond precision, preserving exact grace deadlines and timezone-independent comparisons.
- Reset unreadable legacy cached objects once instead of crashing. Existing readable Carbon, immutable date, and string timers keep their original deadlines; recovery still clears the timer.
- Add regression coverage for Horizon, Ping, and Queue checks using real serializing array/file stores and mutable/immutable application dates.
- Correct Redis connection typing for static analysis without changing runtime memory parsing or thresholds.
- Retire upstream-EOL Laravel 11 CI jobs while retaining all seven supported PHP/Laravel combinations. Composer PHP/Laravel requirements and Composer advisory blocking are unchanged.
Based on the contribution by @BenjaminSelectUp in #331, with maintainer corrections and validation. No breaking runtime API changes or deployment.
Validation
All eight pre-merge checks and all nine post-merge checks passed. Local full suite: 215 tests / 528 assertions on Laravel 12 and 13, including PHP 8.2 compatibility. Full PHPStan and Pint pass.
Full Changelog: 1.40.4...1.40.5