Audit item #11. The job was a one-line Artisan::call wrapper around fuel:poll --full. Routing through Artisan adds output buffering and swallows typed exceptions before they reach the queue's failed-job handler. Now injects FuelPriceService and replicates the --full path (refreshStations + pollPrices + PricesUpdatedEvent) directly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>