durable-workflow/waterline
Waterline brings durable workflow execution to Laravel. Define multi-step workflows as PHP classes, run them reliably with retries and delays, and inspect progress from a database-backed store. Ideal for long-running background processes that must survive failures.
Positioning. Waterline remains a companion operator console for the Durable Workflow runtime, not a workflow engine. Release 2.11.2 is a patch: two accessibility fixes (translated accessible names on schedule-status and saved-view selectors; label/control association for backfill date and overlap policy), rebuilt frontend assets, and explicitly unchanged form values, filtering, and backfill handlers. Nothing here changes the adoption calculus, but it does confirm several previously open integration facts and slightly widens the visible UI surface. Treat it as an early-stage tactical add-on with a fork-and-own fallback (MIT), not a platform bet.
Architecture fit. Standard Laravel package shape, now confirmed in part: auto-discovery plus a custom publish command (php artisan waterline:publish) rather than a bare vendor:publish --tag=..., and prebuilt frontend assets shipped in the release artifact. The UI surface is broader than health/history/queues/retries/repair — it includes schedule status, saved views, and a backfill form. Backfill is a write path with real blast radius (it can replay a date range across workflows), so the privileged-mutation concern now covers three distinct areas: repair, schedule control, and backfill. The coupling contract to runtime internals (public API vs. table schema) is still the single biggest unknown and is untouched by this release.
Integration feasibility. Still low-to-moderate: composer require, discovery, config publish, asset publish, route gating. The new detail is that asset publication is an explicit step on every upgrade, not just first install — so it belongs in the deploy checklist, not the onboarding doc. Feasible within a sprint if the runtime is already in production and a staff auth boundary exists.
Technical risk.
waterline:publish not run) or stale browser cache can leave the UI calling handlers that no longer match — silent, confusing failures during incidents.Key questions.
waterline:publish idempotent/re-runnable in CI?Stack fit. Natural for a Laravel app already operating the Durable Workflow runtime. Confirm Laravel major (10/11/12), PHP version, and whether the package assumes Horizon/Redis, a specific DB driver, or a specific runtime persistence schema. The publish step is package-specific (php artisan waterline:publish), so verify in CI whether it overwrites locally modified assets and whether it must run on every deploy or only on version change.
Migration path. No data migration expected for a console layer; re-verify no package-owned tables exist. Install 2.11.2 pinned in staging against a non-production runtime and reconcile displayed health/queue/history against direct SQL and runtime logs. Treat 2.11.2 as the baseline to validate — do not assume earlier patch-level behavior.
Compatibility. Pin runtime and Waterline to exact versions (now 2.11.* style semver rather than the earlier date-based assumption), and pin the corresponding service image tag if containerized. Validate DB-driver parity, route prefix/middleware collisions with existing admin tooling, and whether the UI lives on the main domain or a separate internal hostname.
Sequencing.
waterline:publish and bake it into the deploy pipeline with cache-busting; verify assets match the package version.Maintenance. Small maintainer base and near-zero dependents keep bus factor dominant. Pin versions, run a quarterly upgrade review, and track runtime upgrades as the trigger for Waterline upgrades. Add two standing checklist items from this release: (a) publish assets after every package bump, (b) keep the service image tag in lockstep with the Composer version. Fork-ready posture (MIT, contained UI) still holds.
Support. Community/GitHub-only, no commercial SLA. The a11y fixes show responsive maintenance on polish issues — a positive signal — but responsiveness on accessibility tickets says nothing about incident-time support. Not appropriate for 24/7-critical operations without an internal owner and a documented fallback to direct SQL/CLI.
Scaling. Console queries hit runtime persistence; history and queue views remain the hot paths. Plan pagination, time-window filters, read replicas or indexed projections as volume grows. Saved views are convenient but may encode expensive filters — review them as query patterns. Backfill and bulk retries can produce burst worker load: rate-limit and cap selection size.
Failure modes to design against.
Ramp-up. Operators need the workflow mental model — states, retry semantics, idempotency keys — not just UI clicks; one to two training sessions. Write runbooks for the top four actions (retry, requeue, cancel, backfill) with explicit blast-radius notes, and shadow on-call through one incident cycle before granting production write rights.
How can I help you explore Laravel packages today?