latidoflow/laravel
LatidoFlow for Laravel adds heartbeat and workflow monitoring to your app, making it easy to track scheduled tasks, queue workers, and service health. Lightweight config, Artisan commands, and simple status endpoints help you catch failures early.
Architecture fit. The package is a non-invasive observability layer over Laravel's queue and event subsystem. It instruments queued event listeners at dispatch, execution, retry and failure, and correlates a single run via UUID across dispatch → intentional delay → later execution. That is a good architectural fit for Laravel applications that express asynchronous work as queued listeners; less so for applications that primarily dispatch jobs directly rather than through the listener pipeline. The fail-open transport keeps the package out of the critical path, which is the right default for a monitoring component.
What v1.4.0 actually changes.
CallQueuedListener wrapper. This is a semantic change to what gets monitored, not just a feature. The prior behavior over-collected (allowlisting the wrapper opted every listener in); the new behavior under-collects by default unless each intended listener is configured explicitly. Upgrading without rebuilding the allowlist will silently reduce coverage — the single largest technical risk in this release.expect_recurring_runs. New opt-out (default true, backwards compatible) that suppresses periodic missing_run expectations for irregularly-triggered workloads while retaining queue-start and runtime deadlines. This is a noise-reduction control, not a correctness change, and is the right shape: deadlines remain enforced where they are meaningful.Technical risk.
Key questions.
missing_run evaluation idempotent and safe under multi-node schedulers?Stack fit. Targets Laravel 12 on PHP 8.2+ and Laravel 13 on PHP 8.5, with database-queue coverage validated. Confirm behavior on the drivers you actually run (Redis, SQS) and on Horizon before committing.
Migration path.
ShouldQueue listeners are either allowlisted or deliberately excluded, so the list cannot silently rot.expect_recurring_runs at its default, then set false for queues driven by irregular events once you have observed their arrival pattern.Compatibility. The change is configuration-additive — no application code changes are required to upgrade, which is also the trap: the upgrade succeeds while effective coverage drops. Pin the version and re-run the lowest-supported-dependency combination if you are on the floor of the matrix.
Sequencing. Use a two-phase cutover: ship the explicit allowlist while the legacy wrapper entry is still present, confirm no double-counting or gaps, then remove the wrapper entry. Because there is no backfill, deploy at low queue depth or accept and annotate the initial coverage gap; consider suppressing missing_run for the first window so pre-deploy runs do not generate an alert storm on day one.
Maintenance. Configuration surface is small, but the allowlist becomes a manually maintained artifact owned by someone. Without the CI check above, listener drift is the most likely long-term failure. Release engineering looks disciplined: 140 tests / 601 assertions, five CI matrix jobs including lowest-supported dependencies and clean consumer fixtures, and an explicit statement of what was not verified.
Support. Fail-open makes "no data" ambiguous. The runbook must distinguish collector outage from genuine absence of traffic, and must state plainly that a lost telemetry window cannot be replayed. The honest non-verification of hosted payment workloads should be carried into the support notes rather than buried in release history.
Scaling. Cost scales with run cardinality — one record per dispatch and per execution, correlated by UUID. High-fan-out listener patterns will dominate. Define retention and, if needed, sampling per queue tier before volume grows. Fail-open caps the blast radius on application throughput, but the per-dispatch and per-execution hook cost should be measured on your hottest queue.
Failure modes.
missing_run alerts if expect_recurring_runs is left true on irregular workloads.Ramp-up. Low for configuration, moderate for the listener inventory and alert tuning. Budget roughly one sprint for a mid-size application to inventory listeners, validate in staging, tune missing_run expectations, and write the outage runbook. The work needs someone comfortable with Laravel queue internals (CallQueuedListener, worker lifecycle) to confirm coverage is real rather than assumed.
Recommendation. Adopt for non-critical queues now — the release materially improves signal quality through precise listener attribution and deadline control. Gate payment and other deadline-critical workloads on a documented end-to-end verification and a stated mitigation for the no-durable-replay gap; without those, the monitoring will be least reliable exactly where missed runs cost the most.
How can I help you explore Laravel packages today?