Laravel 13.32, weekly updates and tip

Laravel 13.32

Moving right along this week to Laravel 13.32. Here are the highlights:

  • Add a Mercure broadcast driver in #61474
  • Add copyToDisk and moveToDisk to FilesystemAdapter in #61511
  • Allow enums in queue pause/resume methods in #61464
  • Add missing implementation for SessionHandlerInterface for PHP 9 in #61517
  • Add isManagedQueue to CloudManager in #61568
  • Add UnitEnum to Authorizable contract in #61589
  • Fix appendToPriorityList() when the referenced middleware is the first item in #61567
  • Decode job payload once in #61526

You may review the full branch diff on GitHub for a complete list of changes.

Weekly Journal

Last week I continued on the Shift MCP server. I have a good handle on what I want the initial release to have. So it's just a matter of getting Claude to finish writing it. I'll do some of that in tomorrow's livestream.

Last week I also received a support email from a Shifty Plan subscriber. Their plan repository meta data wasn't syncing. Come to find out, it was syncing, the UI was just not updating. Over the years, I've had a few reports of this. But have never been able to reproduce it myself. It's also heavily tested.

But a bug, nonetheless existed. It wasn't in the code. It was in the infrastructure. Specifically, the queue setup. I have an internal worker. This fetch process gets dispatched to the system queue on the internal worker. Guess what else gets dispatched to the internal worker, the events queue.

Since events has a lower priority than system, if that queue is backed up, events are significantly delayed. The solution was to break out the events queue to its own, independent worker (more nuance in this week's tip).

Otherwise, I worked on Double. Every few weeks, I stress-test it by converting the Laravel framework test suite. Last week I was able to fully convert it without issue. So, I'm getting close to a v1. What I'm really after now is adoption. If you have a test suite where you use Mockery directly (not through Facade fakes), please reach out. I'm glad to convert it for you to continue to test Double and increase adoption.

Weekly Tip

When I moved all my events to their own queue, I assumed there was a config setting to specify it. However, there was not.

I sent Claude digging. At first, it set the queue in every event class. Meh.

Next, it made a trait that set it. Same thing, just encapsulated.

After some "pushback", it found the following.

Queue::route(\Illuminate\Contracts\Broadcasting\ShouldBroadcast::class, 'events');

I kept asking it where the config setting was. I expected a broadcasting.queue or something. But it found nothing. I'm thinking about a PR, as the above took a bit to find.