Skip to content

[13.x] Cloud enhancements - #61360

Merged
taylorotwell merged 8 commits into
laravel:13.xfrom
timacdonald:cloud-enhancements
Aug 28, 2026
Merged

taylorotwell merged 8 commits into
laravel:13.xfrom
timacdonald:cloud-enhancements

Conversation

@timacdonald

Copy link
Copy Markdown
Member

Some minor improvements to the Cloud plumbing.

return;
}

$app->singleton(Events::class, fn () => new Events(CloudBootstrapper::socket()));

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is now registered earlier in the booting process

}

$this->events->emit([
return $this->events->emit([

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This now returns whether retrying a job was successful or not

@timacdonald timacdonald changed the title Cloud enhancements [13.x] Cloud enhancements Aug 28, 2026
@taylorotwell
taylorotwell merged commit cb7494d into laravel:13.x Aug 28, 2026
54 checks passed
timacdonald added a commit to timacdonald/framework that referenced this pull request Oct 9, 2026
* Improve testing story

* Return if event writing was successful

* Return whether job was successfully forgotten or not

* Register cloud events earlier

* Make Stan happy

* Update tests

* Improve doc blocks

* Update CloudBootstrapper.php

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit cb7494d)
timacdonald added a commit to timacdonald/framework that referenced this pull request Oct 9, 2026
* Improve testing story

* Return if event writing was successful

* Return whether job was successfully forgotten or not

* Register cloud events earlier

* Make Stan happy

* Update tests

* Improve doc blocks

* Update CloudBootstrapper.php

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit cb7494d)
(cherry picked from commit 1498177)
timacdonald added a commit to timacdonald/framework that referenced this pull request Oct 19, 2026
* Improve testing story

* Return if event writing was successful

* Return whether job was successfully forgotten or not

* Register cloud events earlier

* Make Stan happy

* Update tests

* Improve doc blocks

* Update CloudBootstrapper.php

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit cb7494d)
timacdonald added a commit to timacdonald/framework that referenced this pull request Oct 19, 2026
* Improve testing story

* Return if event writing was successful

* Return whether job was successfully forgotten or not

* Register cloud events earlier

* Make Stan happy

* Update tests

* Improve doc blocks

* Update CloudBootstrapper.php

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit cb7494d)
(cherry picked from commit 1498177)
taylorotwell added a commit that referenced this pull request Oct 21, 2026
* [13.x] Introduce a Cloud facade (#61275)

Backported as the rename only, without the facade and CloudManager.

* cloud facade

Update CloudManager.php

dont need this import after alll

Rename Cloud foundation to bootstrapper

holy pr feedback

facade bits

test

clean method names

* Update CloudBootstrapperTest.php

* cs

(cherry picked from commit 5fbd12d)
(cherry picked from commit 4029930)

* [13.x] Cloud enhancements (#61360)

* Improve testing story

* Return if event writing was successful

* Return whether job was successfully forgotten or not

* Register cloud events earlier

* Make Stan happy

* Update tests

* Improve doc blocks

* Update CloudBootstrapper.php

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit cb7494d)
(cherry picked from commit 1498177)

* Allow retrieving command by name without resolving all commands (#61361)

(cherry picked from commit ca0e114)
(cherry picked from commit 2a41a03)

* rename to find command

(cherry picked from commit 2795df5)
(cherry picked from commit 027b3db)

* [13.x] Expose methods (#61362)

* Expose methods publicly

* formatting

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit 48ac5b8)
(cherry picked from commit 8ab250f)

* [13.x] Cloud exceptions (#61704)

On 11.x, GuardHelpers::id() retrieves the user before reading its identifier, so the user-retrieval count expected by testItCapturesTheUserResolvedByLaravelsExceptionContext is one higher than on 12.x.

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Extract Cloud command UUID for use as exception trace

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Improve test names

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* formatting

* tweak user handling for octaned

* Propagate the request trace ID to jobs dispatched from requests

Jobs are meant to be reported under the trace of the execution that
dispatched them. The trace is carried to the job in hidden Context,
written by the ContextDehydrating listener when the job's payload is
created.

That listener was only registered for console processes, so jobs
dispatched from HTTP requests never carried a trace. Their exceptions
were reported with a null trace_id. Worse, when one of those jobs
dispatched another job, the worker filled the gap with its own
process-wide command trace, grouping every such child job handled by
the worker under a single, unrelated trace.

The listener is now registered for requests as well. When the Context
does not already hold a trace, it falls back to the Cloud-Request-ID
header in requests (the same value the request's own exception reports
use) and to the command trace in the console.

This mirrors what Nightwatch does on Laravel Cloud, where the request
trace is also the Cloud-Request-ID and is propagated to jobs through
hidden Context. Unlike Nightwatch, the trace is written lazily when a
job is dispatched rather than when the execution starts, since only
job payloads need it and the framework has no hook before middleware.
Requests without a Cloud-Request-ID continue to report no trace, and
their jobs now match them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: jradtilbrook <jarryd@tilbrooktech.com>
Co-authored-by: Taylor Otwell <taylor@laravel.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit fee86a4)
(cherry picked from commit 1df0544)

* Add mime type to the files reportable details (#61772)

(cherry picked from commit 1003c6e)
(cherry picked from commit 342e070)

* Update facade docblocks

* Improve exception reporting

* Exception enhancements (#61791)

* Collapses into single listener

* Additional tests

* Capture correct execution time for Octane

* Introduce dehydration hook

* use class directly

(cherry picked from commit f6bcad9)

---------

Co-authored-by: Jack Bayliss <jjbayliss@icloud.com>
Co-authored-by: Taylor Otwell <taylor@laravel.com>
Co-authored-by: jradtilbrook <jarryd@tilbrooktech.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Sabrina Bourouis <bourouis.sabrina@laposte.net>
taylorotwell added a commit that referenced this pull request Oct 24, 2026
* [13.x] Introduce a Cloud facade (#61275)

Backported as the rename only, without the facade and CloudManager.

* cloud facade

Update CloudManager.php

dont need this import after alll

Rename Cloud foundation to bootstrapper

holy pr feedback

facade bits

test

clean method names

* Update CloudBootstrapperTest.php

* cs

(cherry picked from commit 5fbd12d)

* [13.x] Cloud enhancements (#61360)

* Improve testing story

* Return if event writing was successful

* Return whether job was successfully forgotten or not

* Register cloud events earlier

* Make Stan happy

* Update tests

* Improve doc blocks

* Update CloudBootstrapper.php

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit cb7494d)

* Allow retrieving command by name without resolving all commands (#61361)

(cherry picked from commit ca0e114)

* rename to find command

(cherry picked from commit 2795df5)

* [13.x] Expose methods (#61362)

* Expose methods publicly

* formatting

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
(cherry picked from commit 48ac5b8)

* [13.x] Cloud exceptions (#61704)

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Extract Cloud command UUID for use as exception trace

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Improve test names

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* formatting

* tweak user handling for octaned

* Propagate the request trace ID to jobs dispatched from requests

Jobs are meant to be reported under the trace of the execution that
dispatched them. The trace is carried to the job in hidden Context,
written by the ContextDehydrating listener when the job's payload is
created.

That listener was only registered for console processes, so jobs
dispatched from HTTP requests never carried a trace. Their exceptions
were reported with a null trace_id. Worse, when one of those jobs
dispatched another job, the worker filled the gap with its own
process-wide command trace, grouping every such child job handled by
the worker under a single, unrelated trace.

The listener is now registered for requests as well. When the Context
does not already hold a trace, it falls back to the Cloud-Request-ID
header in requests (the same value the request's own exception reports
use) and to the command trace in the console.

This mirrors what Nightwatch does on Laravel Cloud, where the request
trace is also the Cloud-Request-ID and is propagated to jobs through
hidden Context. Unlike Nightwatch, the trace is written lazily when a
job is dispatched rather than when the execution starts, since only
job payloads need it and the framework has no hook before middleware.
Requests without a Cloud-Request-ID continue to report no trace, and
their jobs now match them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: jradtilbrook <jarryd@tilbrooktech.com>
Co-authored-by: Taylor Otwell <taylor@laravel.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit fee86a4)

* Add mime type to the files reportable details (#61772)

(cherry picked from commit 1003c6e)

* Update facade docblocks

* Improve exception reporting

* Exception enhancements (#61791)

* Collapses into single listener

* Additional tests

* Capture correct execution time for Octane

* Introduce dehydration hook

* use class directly

(cherry picked from commit f6bcad9)

* Resolve the Blade mapper for each reported view exception.

(cherry picked from commit 5ccdd3b)

* Match the registration spacing of 13.x.

* Add missing @throws \JsonException annotations (#60514)

(cherry picked from commit a6ce2a7)

* Foundation\Cloud\Events: remove an unused import and fix docblock (#60378)

(cherry picked from commit 7433202)

* Resolve the Blade mapper through a resolver closure.

(cherry picked from commit 058631e)

---------

Co-authored-by: Jack Bayliss <jjbayliss@icloud.com>
Co-authored-by: Taylor Otwell <taylor@laravel.com>
Co-authored-by: jradtilbrook <jarryd@tilbrooktech.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Sabrina Bourouis <bourouis.sabrina@laposte.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants