laravel-cloud-readylisted
Install: claude install-skill bravros/bravros
# laravel-cloud-ready
INTENT: close the three gaps that break a Laravel app the first time it runs on Laravel Cloud —
FIFO queues, edge caching, and Horizon — before the deploy finds them.
Verified against **Laravel 13.25.0**. The mailable/notification asymmetry in § FIFO is
framework-internal; re-read the vendor source before trusting it on a newer major.
## 1. SQS FIFO — three paths, three different hooks
Laravel Cloud's managed queue is a `.fifo` queue. Every queued object must carry a message group
or the push dies with:
```
MissingParameter (Sender): The request must contain the parameter MessageGroupId
```
`SqsQueue::getQueueableOptions()` inspects **the object actually pushed to the queue** — reading
`$job->messageGroup` (property) first, then `$job->messageGroup()` (method). Which object that is
differs per path, and that is the whole trap:
| Path | Object SQS inspects | Hook | `messageGroup()` on the class? |
|---|---|---|---|
| Job | the job itself | `messageGroup()` | ✅ read directly |
| **Mailable** | `SendQueuedMailable` wrapper | override `newQueuedJob()` → `->onGroup()` | ❌ **silently ignored** |
| Notification | `SendQueuedNotifications` wrapper | `messageGroup()` | ✅ `NotificationSender` forwards it |
**Jobs** — plain method:
```php
public function messageGroup(): string
{
return 'ebook-'.$this->ebookId;
}
```
**Mailables** — a `messageGroup()` on the mailable is never read. `SendQueuedMailable`'s
constructor copies `connection`, `queue`, `tries