Complete scheduler, cache and framework test parity updates - #586
Conversation
Port the remaining clock captures, expiry checks and cookie/request-duration cases from Laravel's test cleanup history. Retain cumulative advances when dates are immutable, and rely on the existing global clock reset instead of duplicating cleanup in individual tests. Cookie expiry comparisons use the equivalent isPast/isFuture methods with their existing zero-expiry guards. Keep caller-owned timezone restoration in Testbench and the validation cases; forcing UTC globally would change the environment of consuming packages. Freeze DateTime duration tests before registering their deadline so crossing a real second boundary cannot change the intended threshold. Make the storage-cache touch test reach the original expiry boundary, preserve the distinct explicit-TTL expired-lock case, and remove both tables owned by the MySQL and MariaDB cast tests during teardown. Upstream: laravel/framework#60761 laravel/framework#60793 laravel/framework#61199 Porting source: 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. Validation: full composer fix, immediate affected-file checks, dedicated MySQL/MariaDB cast tests and SQLite/MySQL/MariaDB/PostgreSQL session tests. The final deterministic-clock adjustment passes its complete file and the formatter. Existing Hypervel-specific coverage remains intact.
When a group seeds pending event attributes, apply that pending copy once and return. Applying the group again duplicated lifecycle callbacks and macros. Use the current Laravel merge order, remove unreachable dependency guards, and retain Hypervel's coroutine execution and event observation boundaries. Restore the complete applicable grouping, callback, quarterly-frequency and run-command tests. Use a shared stateless event mutex fixture and join the task coroutine owned by each background-command test before asserting its outcome. Preserve mutable dates in the repeat-start test so it protects the copy guard. Correct the reversed elapsed-time comparison that kept the sub-minute maintenance test from ever entering maintenance mode. Remove the ineffective scheduled-task user API and its pending attributes, generated facade annotation and Telescope metadata/UI. Tasks share the scheduler's OS user; document running the scheduler under the required user or using an explicit system command. Keep the long-running schedule:run replacement for schedule:work and document the --once cron adaptation. Complete the linked maintenance-view deployment guidance alongside these porting-guide changes. Upstream scheduler history: laravel/framework#58926 laravel/framework#60133 laravel/framework#60144 laravel/framework#60148 laravel/framework#60190 laravel/framework#60197 laravel/framework#60255 laravel/framework#60712 laravel/framework#60311 laravel/framework#60469 laravel/framework#55624 laravel/framework#57621 laravel/framework#59331 Related complete test and documentation reconciliation: laravel/framework#60761 laravel/framework#60793 laravel/framework#61199 laravel/framework#60595 laravel/framework#61117 Porting source: 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. Validation: full composer fix, both complete scheduler suites after review corrections, immediate test-file checks, facade regeneration and Telescope frontend build. The repeat-start assertion fails when copy() is removed; the maintenance-state assertion fails before correcting the elapsed-time comparison. Formatting and diff checks pass.
…liation Document that Hypervel serves rendered maintenance views through its running workers instead of Laravel's pre-bootstrap maintenance.php stub. Record the intentional omission at the source and matching test location, and point deployments that need a page while Hypervel is unavailable to their reverse proxy or load balancer. The shared porting guide contains the same deployment action and links to the existing feature documentation. The middleware and existing tests already cover the JSON redirect/template guards from Laravel. Preserve those cases, remove the duplicate final clock reset owned by the test subscriber, and complete native test-method typing. No maintenance runtime behavior changes. Upstream: laravel/framework#60595 laravel/framework#60761 laravel/framework#61199 Porting source: 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. Validation: complete MaintenanceModeTest, full composer fix and diff checks.
Use real event dispatchers where the tests need normal dispatch behavior and apply the current facade spy, swap and expectation forms. Preserve exact event counts, the owning container bindings, command execution boundaries, and Hypervel's atomic environment-file replacement coverage. Keep Blade's initialized compiler behind its proxy mock: a constructor-free partial mock lacks filesystem state when the real compile method runs. Preserve the real session exception handler, which executes the deferred session save, rather than replacing that behavior with a no-op spy. Port the original view-clear test alongside the existing Hypervel filesystem cases. It checks deletion of both compiled files and parallel-test directories with successful native bool returns. Restore missing channel-list assertions, retain the queue worker's fractional memory-limit contract, and update the two upstream memory-test values without changing worker source behavior. Upstream: laravel/framework#61199 laravel/framework#61117 laravel/framework#59068 laravel/framework#59049 laravel/framework#60761 Porting source: 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. This completes the encountered cleanup slice; the wider 270-file #61117 port remains in progress. Existing Hypervel-specific tests are preserved. Validation: each changed test file, the real session/view-clear baseline, the database queue worker tests, and full composer fix all pass.
Bring in the merged scheduler and WebSocket lifecycle fixes from PR #584, along with the intervening coroutine and HTTP client changes already on 0.4. Resolve the Laravel porting-guide conflict by retaining the scheduling command and user guidance, the process-isolation guidance, and the maintenance-mode section. The other files merge automatically. Preserve all unfinished porting changes outside the merge commit. Updated the independent local Algolia installation to the merged dependency floor. The merged scheduler and HTTP client test files, configured formatting, full source and type-fixture analysis, and diff checks pass.
Reconcile the applicable CacheRateLimiterTest cases from Laravel PR #61117 against Hypervel’s policy-based rate limiter. Preserve every callback result, including false, empty arrays and strings, and distinct integer and float zero values. Make the existing admission test observe that capacity is consumed before callback execution and that denied callbacks remain uncalled. Use the real worker-array store without restoring Laravel’s replaced primitive counter API. Complete the existing omission comments and inline helper method titles. Validated the changed test file, the rate-limiter suite, repository formatting and full source and type-fixture analysis. Upstream: laravel/framework#61117 Source revision: 01d008c9b5f32cb7c5e50a9a22273113d810b2a2
PHP converts numeric-string array keys to integers. Batched cache reads passed those integer result keys to strictly typed hit and miss event constructors, causing a TypeError whenever the corresponding listeners were registered. Normalize the two event arguments to strings inside their existing listener guards. Returned maps and reads without listeners remain unchanged. Restore the original numeric-key regression from Laravel PR #48423, which had been changed to alphabetic keys and no longer tested numeric-position defaults. Add a focused real-store test for numeric hit and miss event keys. Existing cached-null coverage remains unchanged. Both constructor failures were reproduced before the correction. The repository tests, Cache suite, configured formatter and full source/type analysis pass. Upstream: laravel/framework#48423 Encountered during: laravel/framework#61117 Source revision: 01d008c9b5f32cb7c5e50a9a22273113d810b2a2
Require an explicit TTL and dispatch positive lifetimes directly to the store. Remove an item through forget() when its computed lifetime is zero or negative. The previous read-before-touch path could make an expired item permanent in array stores and left Redis items alive after their requested expiration. Apply the same expiration boundary to all-mode tagged Redis caches, retain enum-key normalization, and align the contract, any-mode override and generated Cache facade. Removing the preliminary read also avoids an unnecessary storage round trip and value deserialization. Cached-null sentinels remain untouched by finite lifetime updates. Reconcile the complete touch history against Laravel 13.x at 01d008c9b5f32cb7c5e50a9a22273113d810b2a2, including existing store implementations and established unsupported-driver exclusions. Preserve the pinned repository cases with immutable dates and Hypervel enum naming, and retain real Redis sentinel and missing-key coverage. Remove obsolete null-TTL rewrite tests and document removal for nonpositive lifetimes. Validation: affected test files, Cache ParaTest, isolated Redis TTL integration tests, generated-facade tests, configured formatting and full source/type PHPStan checks pass. Existing environment-dependent skips remain in the Cache suite. Laravel PRs: laravel/framework#55954 laravel/framework#59121 laravel/framework#59864 laravel/framework#60878
Restore the current upstream tests for transported exceptions, falsey constructor arguments, failed child processes, keyed results, result order, string-backed driver enums and integer timeouts. Keep the existing coroutine, direct sync-driver and CarbonInterval coverage alongside these cases. Select the process driver explicitly because Hypervel defaults to coroutines. Extract the exception fixtures into separate PSR-4 files so fresh children can autoload them. Terminate the failed-child fixture through Swoole's process API: exit() inside its command coroutine throws a task exception and does not produce the failed process result this test must exercise. Check the stable exit-code message without depending on shell error-output wording. Complete the modified test file's native typing and replace deprecated substring assertions without changing their matching semantics. Add the missing ProcessDriver::run throws annotation; runtime source is unchanged. Ported from Laravel 13.x at 01d008c9b5f32cb7c5e50a9a22273113d810b2a2: laravel/framework#54705 laravel/framework#60822 laravel/framework#53135 laravel/framework#53712 laravel/framework#55161 laravel/framework#59801 laravel/framework#60105 laravel/framework#59602 laravel/framework#54732 This completes the Concurrency assertion changes encountered in laravel/framework#61049; the rest of that PR remains under reconciliation. Validation: changed-file PHPUnit and Concurrency ParaTest pass, scoped formatting is clean, full source and type-fixture PHPStan passes, and facade generation lint plus FacadeDocblocksTest pass.
Bring the merged PR 585 corrections into the continuation branch. Retain the continuation scheduling and maintenance porting guidance while deduplicating the shared scheduler process-isolation paragraph. Preserve all uncommitted continuation work. Verified every previously modified file retained its exact contents and ran the automatically merged notification locale test successfully.
Reconcile the provider, password broker, token guard, verification listener and authorization middleware tests against the pinned Laravel 13.x tests. Use exact Mockery expectations for required calls while retaining default stubs, native fixture types and the existing coroutine-aware request and provider behavior. Restore string-backed broker-name and non-string token coverage alongside the existing integer-zero and request-isolation cases. Capture password reset arguments locally, remove the unreachable throttled-notification stub, and leave global container cleanup with the PHPUnit subscriber. No authentication source behavior changes. This completes these test files within the ongoing port of laravel/framework#61117, using source pin 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. The token input cases also reconcile the complete direct upstream commit laravel/framework@9b21ce0a9b. Validation: immediate tests for every edited file, full composer fix for the checkpoint, and focused token-guard tests plus configured formatting after the final fixture-name correction.
Reconcile the Ably, Pusher, Redis and queued broadcast event tests against the pinned Laravel 13.x surface. Restore exact event payload checks and the explicit false missing-model deletion case while preserving Hypervel queue attributes, connection routing and channel authorization behavior. Exercise the real Pusher SDK local authentication signer against the known upstream signature instead of returning the expected signature from a mock. Required signing and publishing calls use exact expectations; request lookup stubs remain loose where their call count is not the contract. Complete native callback and fixture types without changing production code. Upstream: laravel/framework#61117 and the complete source/test reconciliation of laravel/framework#61074. Porting source: 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. The broader Mockery port remains in progress. Validation: each changed test file passed immediately, full composer fix passed for the checkpoint, and both broadcaster files plus configured formatting passed after restoring the final request stubs.
Reconcile the five bus test files against Laravel 13.x, including the missing true Conditionable delay case. Preserve routing, guarded batch events, batch failure callbacks, deferred dispatch and unique-lock ownership assertions. Required calls now use exact Mockery expectations and fixture callbacks carry their actual native types. Keep stored and returned batch mocks distinct, construct valid Batchable jobs before testing failed-add cleanup, and match native database batch result types. Preserve the two queue lookups and three connection lookups made by the bulk dispatch scenario. Remove only container cleanup already owned by the PHPUnit subscriber; retain explicit destruction and lock-release checks. Upstream: laravel/framework#61117, source pin 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. This is one complete test-file group in the ongoing broader port, with no runtime source or public API changes. Validation: immediate per-file PHPUnit runs, the complete Bus ParaTest suite, configured formatting, and full composer fix for the accumulated checkpoint.
Restore pinned Laravel batched read and putMany event checks and verify store names on ordinary and tagged cache events. Preserve Hypervel listener guards, failure and cancellation coverage, and tagged-cache payload behavior. Counted dispatch expectations replace redundant literal-true assertions. Complete the manager fixture types, missing unbound-dispatcher assertion, strict default-driver assertion and required resolver expectations. Preserve custom repositories, explicit event disabling and coroutine-local memoized stores. No cache runtime behavior changes. Upstream: laravel/framework#61117, using current source pin 01d008c9b5f32cb7c5e50a9a22273113d810b2a2. These two files are reconciled within the ongoing broader test port. Validation: immediate PHPUnit runs for both files, configured formatting, and full composer fix across the accumulated checkpoint.
Normalize the remaining Mockery imports and calls in the SSR health-command and response tests to the framework-wide m alias. Assertions, test bodies and production behavior remain unchanged. These local convention outliers were found while reconciling laravel/framework#61117. Hypervel retains its established alias rather than adopting a conflicting upstream spelling; this does not introduce an Inertia upstream catch-up. Validation: both affected test files passed immediately and the full checkpoint passed composer fix.
Normalize the remaining Mockery imports and calls in the Sentry integration and meta-tag tests to the framework-wide m alias. Keep their existing span, route and output assertions unchanged. These local convention outliers were found during laravel/framework#61117 reconciliation. The change follows the established Hypervel alias and introduces no Sentry runtime changes or additional upstream port. Validation: both affected test files passed immediately and full composer fix passed for the checkpoint.
|
@coderabbitai review |
|
Warning Review limit reachedNext included review available in 10 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (10)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (98)
💤 Files with no reviewable changes (4)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe change updates cache TTL behavior, coroutine scheduling and maintenance handling, concurrency error coverage, and extensive test typing and mock expectations. Documentation and Telescope scheduling metadata now match the updated runtime behavior. ChangesFramework behavior and validation
Priority: ➖ Normal Estimated code review effort: 5 (Critical) | ~90 minutes Merge Risk: ⚪ Minimal · up to The updated cache, scheduler, maintenance, concurrency, and test behavior has no identified merge-blocking risk. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 24.96% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 585 functions across 50 files. (44 skipped: 6 unsupported, 38 over the file limit.) ✨ Finishing Touches 💡 2📝 Generate docstrings 💡
🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
✅ Action performedReview finished.
|
PR Summary by QodoFix scheduler groups and cache expiry with framework test parity
AI Description
Diagram
High-Level Assessment
Files changed (99)
|
Code Review by Qodo
1. Tagged cache cleanup scans deleted keys
|
Greptile SummaryThis PR expands framework test parity and adjusts scheduler grouping, cache expiration, scheduler API differences, generated facades, Telescope output, collection type declarations, and time-dependent test coverage.
Confidence Score: 4/5The PR is not yet safe to merge because non-positive touch operations on all-mode Redis tagged entries can still leave stale tag memberships behind. The previous cache finding remains outstanding: Files Needing Attention: src/cache/src/Redis/AllTaggedCache.php
|
| Filename | Overview |
|---|---|
| src/cache/src/Redis/AllTaggedCache.php | Changes touch to delete items for non-positive TTLs, but the existing unresolved review finding remains because inherited forget still does not remove all-mode tag memberships. |
| src/cache/src/Repository.php | Delegates positive touch lifetimes directly to stores, deletes for non-positive lifetimes, and string-normalizes numeric keys only at event construction. |
| src/console/src/Scheduling/Schedule.php | Avoids applying scheduler group attributes twice when pending attributes already contain the inherited configuration. |
| src/console/src/Scheduling/ManagesAttributes.php | Removes the ineffective scheduled-task OS-user property and fluent method. |
| src/testing/src/TestResponse.php | Uses Carbon’s isPast and isFuture checks for cookie-expiration assertions. |
| src/collections/src/Collection.php | Updates pad key annotations and adds targeted PHPStan suppressions for generic ArrayAccess assignments. |
| src/collections/src/LazyCollection.php | Models pad results as containing preserved source keys and generated integer keys. |
| composer.json | Raises the development PHPStan constraint without requiring a lockfile under repository policy. |
Reviews (2): Last reviewed commit: "Correct collection key analysis for PHPS..." | Re-trigger Greptile
| if ($seconds <= 0) { | ||
| return $this->forget($key); |
There was a problem hiding this comment.
Tagged memberships remain orphaned
When an all-mode Redis cache item is touched with a zero, negative, or past expiration, this branch calls the inherited forget(). That deletes only the namespaced value and leaves its tag ZSET memberships behind. Finite memberships remain stale until their original expiration, while forever memberships use a score of -1 and remain until a global orphan-pruning pass. This can accumulate stale tag entries and retain Redis memory, so this path must remove both the value and its all-mode memberships.
There was a problem hiding this comment.
This follows the existing all-mode deletion contract. A nonpositive touch() delegates to forget(), just as nonpositive put() and putMany() do. The value is deleted immediately; tag memberships are cleaned up later.
The retained metadata does consume space until a tag flush or pruning pass. cache:prune-stale-tags checks for missing values regardless of their expiration score, so it also removes orphaned memberships from forever entries. The cache documentation explains this behavior and recommends scheduling pruning.
We’re keeping that shared cleanup model. Adding eager cleanup only to touch() would make it inconsistent with the other deletion paths and require additional handling for concurrent writes across Redis Cluster slots.
There was a problem hiding this comment.
That’s fair. Since touch() intentionally follows the same nonpositive-expiration path as put() and putMany(), eager membership cleanup here would be inconsistent with the existing all-mode deletion contract. The scheduled prune path checks cache-key existence independently of the sorted-set score, so it does remove orphaned forever memberships as described. I’m withdrawing this finding.
Collection::pad() preserves string keys while adding integer keys. Reflect that behavior in the eager, lazy, Enumerable and Eloquent return annotations and cover each boundary with a keyed type assertion. Keep existing list assertions and all runtime implementations unchanged. Require PHPStan 2.2.14 in the root and database development manifests. Older versions incorrectly collapse the int|TKey union, so they cannot validate these corrected return types. The new analyzer also falsely rejects generic ArrayAccess keys at four existing collection assignments. A standalone comparison with 2.2.13 confirms the regression, including when local generic types are explicit. Ignore only that diagnostic at those four lines, explaining the limitation without changing collection algorithms or adding runtime work. Validated with full source and type-fixture analysis on installed PHPStan 2.2.14, formatting, each changed type fixture, Composer manifest consistency and the existing eager, lazy and Eloquent collection suites under ParaTest.
|
@coderabbitai @greptile-apps @qodo-free-for-open-source-projects Fixed the collection analysis failure in 3ad6b7c. We retained the existing all-mode tag cleanup behavior. Nonpositive Full source and type-fixture analysis, formatting, manifest consistency checks and the affected collection suites pass locally. CodeRabbit found no additional code issues. The updated commit is now running through CI and the next review pass. |
|
✏️ Learnings added
|
|
Thanks for the clarification. The |
Thanks for the detailed update. The collection-analysis fixes, scoped suppressions, PHPStan requirement, and retained tag-cleanup behavior are noted. Since there are no active Qodo findings on this PR, no further action is needed from me; the next step is to review the CI results. |
|
Thanks for the update. The scoped collection-analysis fixes, PHPStan requirement, retained tag cleanup behavior, and validation results are noted. With no active findings remaining, I have no further action; CI results are the next checkpoint. |
|
@coderabbitai @greptile-apps @cubic-dev-ai @qodo-free-for-open-source-projects The second review pass is complete. All CI tests and analysis checks pass on 3ad6b7c. No additional code changes were needed. Qodo and Greptile withdrew the tag-cleanup findings after reviewing the existing deletion and pruning contract. Both inline threads have replies explaining the behavior. CodeRabbit's first review had no actionable findings; its second review was rate-limited, and Cubic was trial-limited. The collection correction is committed and pushed. It fixes the |
|
Tip For best results, initiate chat on the files or code changes.
The reported validation on 🧠 Learnings usedYou are interacting with an AI system. |
|
Thanks for the update. With CI and analysis passing on |
Thanks for the update. With CI and analysis checks passing on |
|
Thanks for the update. With CI and analysis checks passing on |
Summary
This continues the Laravel test updates and fixes the behavior they exposed in scheduler groups and cache expiration. It restores missing authentication, broadcasting, batching, process-concurrency and duration coverage while preserving Hypervel's coroutine execution and test isolation.
This is the next checkpoint in #61117. It includes the completed groups below; the remaining test cleanup continues separately. Source and tests were compared with Laravel 13.x at
01d008c9b5f32cb7c5e50a9a22273113d810b2a2.Changes
Scheduler groups and task configuration
Apply inherited group attributes once. When a task has pending attributes, those attributes already contain the group's callbacks. Applying the group again duplicated lifecycle callbacks and macros. Use the pending attributes directly, following #60255.
Restore the applicable group, callback, macro, filter, frequency and run-command tests. This includes the scheduler history in #58926, #60133, #60144, #60148, #60190, #60197, #60712, #60311, #60469, #55624, #57621 and #59331. Background tests wait for their task coroutine before checking its outcome.
Remove the ineffective scheduled-task
user()setting, its generated facade entry and the corresponding Telescope field. Coroutine tasks share the scheduler's OS user. Run the scheduler as the required user, or useexec()with an explicit command for an individual task. Document that adaptation and theschedule:run --oncerequirement for cron; Hypervel's long-runningschedule:runreplacesschedule:work.Correct two tests that did not protect their intended behavior: the repeat-start test now uses a mutable clock so it checks the copy boundary, and the sub-minute maintenance test uses the correct elapsed-time direction and verifies that maintenance mode was entered.
Cache expiration and events
Make
Cache::touch()require an explicit expiration and delegate positive lifetimes directly to the store. Remove the unnecessary read before changing the TTL. A zero or negative lifetime removes the item, including through all-mode Redis tags, rather than accidentally keeping it. Update the contract, generated facade, tests and documentation together. This completes the applicable history in #55954, #59121, #59864 and #60878.Preserve numeric cache keys when emitting batch-read hit and miss events. PHP converts numeric-string array keys to integers; event constructors require strings. Normalize only at event construction, leaving returned keys and the path without listeners unchanged. Restore the original numeric-key regression from #48423.
Restore batched read and write event assertions and verify the store name on ordinary and tagged events. Complete manager resolution assertions while retaining custom repositories, explicitly disabled events and coroutine-local memoized stores. Restore applicable rate-limiter callback-result tests against Hypervel's native typed-policy implementation.
Authentication, broadcasting and batching tests
Complete required Mockery expectations and native fixture types across authentication providers, password brokers, token guards, broadcast drivers and the bus. Preserve optional lookup stubs and Hypervel's existing request isolation, guarded events, queue routing and dispatch-lock assertions.
Restore string-backed password-broker names alongside integer-zero cases, non-string token rejection, exact broadcast payloads and explicit missing-model deletion behavior from #61074. The Pusher authentication test now checks the real SDK's local signature against the known expected value instead of returning that value from a mock.
Keep stored and returned batch fixtures distinct and ensure the failed-add test reaches batch deletion. Restore the missing conditional delay case. Remove duplicate container resets where the test subscriber already owns cleanup, while retaining explicit job destruction and lock-release checks. Normalize the remaining Inertia and Sentry test imports to the established Mockery alias.
Process concurrency and time-dependent coverage
Restore real-process exception-constructor tests, including falsey arguments, from #54705 and #60822. Complete process and synchronous result ordering from #53135 and #55161, failed-child coverage from #53712, enum driver selection from #59801, and integer timeout coverage from #60105. The failed-child test terminates the child process explicitly so it reaches process-failure handling under Swoole.
Complete the applicable cleanup and coverage from #61199, #60761 and #60793. Retain immutable clock advances and caller-owned timezone restoration. Restore cookie-expiration and request-duration cases, freeze duration-test clocks before registering deadlines, and clean up both tables owned by the MySQL and MariaDB cast tests.
Restore the original view-clear command test alongside Hypervel's existing filesystem tests. Keep the initialized Blade compiler proxy and the real session exception handler where their state and deferred persistence are needed. Record the maintenance-view difference associated with #60595: running workers serve prepared maintenance responses; a reverse proxy or load balancer must serve a static page when Hypervel itself is unavailable.
Collection type analysis
Correct
pad()return annotations to include preserved string keys across eager, lazy and Eloquent collections and the shared contract. Add focused type assertions and require PHPStan 2.2.14, which handles these key unions correctly. Suppress its verified generic-key false positives only at the four affected assignments; collection runtime behavior is unchanged.Verification
The checkpoint was checked with
composer fix: formatting, full source and type-fixture analysis, the full parallel suite, Testbench contracts and package installation tests. Each changed test file was also run during implementation. The collection annotation correction additionally passed full analysis on PHPStan 2.2.14, the affected collection suites, each changed type fixture, manifest consistency checks and formatting.Dedicated validation covered Redis expiration behavior, MySQL and MariaDB casts, supported database session tests, scheduler outcomes, generated facades and the Telescope frontend build. Service-dependent cases retain their normal skips when no service is configured. CI runs the framework suite and supported service matrix.
Summary by CodeRabbit
Breaking Changes
touchnow requires an expiration value; null is no longer accepted.Scheduling
schedule:runnow runs continuously by default; useschedule:run --oncefor single executions.Maintenance Mode
Documentation