alt-three/retry
alt-three/retry is a Laravel package for automatically retrying failed operations and queued jobs with configurable attempts and delays. It helps PHP applications handle transient errors gracefully and integrate retry logic cleanly into Laravel workflows.
Architecture fit: Narrow and legacy-only. alt-three/retry targets Artisan console command retries in Laravel 5. It is not a general resilience library and does not align with modern Laravel retry primitives such as queue job tries/backoff, job middleware, Bus::retry, or scheduler-level retry behavior. The only credible fit is a Laravel 5.x application with a specific need to retry console commands and no existing queue/scheduler retry mechanism. Even then, the functionality is small enough that an in-house middleware may be safer than adopting an archived dependency.
Integration feasibility: Low for modern Laravel/PHP; moderate only on legacy Laravel 5. The package likely depends on old illuminate/console contracts and PHP 5.x/7.x-era constraints, so Composer conflicts with Laravel 8+ and PHP 8+ are expected. MIT licensing permits forking and vendoring, but integration would require pinning dependencies, validating middleware registration, and testing command lifecycle behavior. There is no upstream support path.
Technical risk: High lifecycle risk, moderate functional risk. The package is archived, last released in 2018, has zero dependents, and has no active security or compatibility maintenance. The code surface is likely small, so algorithmic risk is low, but ownership risk is high. Retrying console commands can duplicate side effects unless commands are idempotent, and the package may lack configurable backoff, jitter, max-attempt limits, or structured observability.
Key questions: Which Laravel and PHP versions are in scope? Which commands need retry, and are they idempotent? What retry policy is required: max attempts, backoff, jitter, failure classification? How will retries be logged, metered, and alerted? Can native queue or scheduler retries replace this package entirely? If a fork is required, who owns it and how will it be patched through future framework upgrades?
Stack fit: Do not integrate on Laravel 8+ or PHP 8+. For a legacy Laravel 5.x stack, evaluate only if console-command retry is a confirmed gap. For modern stacks, use native Laravel queue/job retry, scheduler retry, or a small custom console middleware instead. The package should be treated as a reference implementation, not a strategic dependency.
Migration path: Preferred path is no migration: replace the need with native framework primitives or a lightweight in-house middleware. If legacy adoption is unavoidable, fork the repository, update Composer constraints, vendor it privately, add tests around command side effects and retry limits, and document that upstream is abandoned. Avoid taking a direct dependency on the archived package in any new codebase.
Compatibility: Expect incompatibility with current illuminate/* packages, modern PHP versions, and current Laravel console middleware APIs. Validate command registration, container bindings, middleware ordering, and dependency constraints in a throwaway branch before committing to integration. Because there are zero dependents, there is little ecosystem evidence that the package works with any active Laravel release.
Sequencing: 1) Inventory commands and failure modes. 2) Spike the package against the exact Laravel/PHP target. 3) Decide native retry vs custom middleware vs private fork. 4) Implement with tests for idempotency, max attempts, backoff, and observability. 5) Canary on low-risk scheduled commands. 6) Monitor retry rates and duplicate side effects. 7) Record an exit plan to remove the package during the next framework upgrade.
Maintenance: High relative to value. An archived package becomes permanent internal ownership: dependency updates, security scanning, PHP/Laravel upgrade patches, and documentation all fall to the adopting team. The small codebase reduces patch effort, but it does not eliminate the lifecycle burden. Zero dependents signals orphan risk rather than stability.
Support: No upstream support. There is no maintainer response path, no CVE process, and no documentation refresh. MIT licensing allows a fork, but it does not provide operational support. On-call ownership and incident response must be assigned internally before adoption.
Scaling: Runtime overhead is likely negligible, but retries multiply command executions and downstream load. Without backoff and jitter, retries can amplify outages or create retry storms. For high-volume scheduled commands, queue-based retries with backoff and dead-letter handling are operationally safer. Retry behavior should be bounded and observable.
Failure modes: Duplicate side effects from non-idempotent commands; retry storms; masked persistent failures; unbounded retries if misconfigured; silent failures due to weak logging; middleware not invoked because of command registration differences; framework upgrade breakage. Mitigations include idempotency keys, max-attempt caps, backoff, structured logs, metrics, and alerts.
Ramp-up: Low code complexity but legacy-context heavy. Engineers need Laravel 5 console internals knowledge, middleware ordering awareness, and a clear map of command side effects. Modern team members may not have Laravel 5 experience, so ramp-up is moderate despite the small package size. Training and ownership costs are ongoing.
How can I help you explore Laravel packages today?