reliqarts/laravel-scavenger
Laravel Scavenger is a utility package that helps you find and clean up orphaned or stale data in your Laravel app. It scavenges leftover records and files so your database and storage stay tidy, with simple configuration and Artisan-friendly workflows.
Assessment status: First assessment, based on v4.0.0 release notes only. No source review, changelog history, or test-coverage evidence was provided, so all findings below are derived from the stated behavior changes and should be treated as pre-vetting rather than a verdict.
Release disposition: v4.0.0 is a major, breaking release. It combines a platform floor bump, an HTTP transport swap, a changed default, and a fix that alters credential-handling semantics. It warrants a full assessment and a scoped upgrade spike before adoption.
Architecture fit
App\Models\User as the default daemon model assumes a conventional app layout. It is a sane default for greenfield Laravel apps but a poor fit for multi-tenant or domain-oriented codebases where the authenticatable model lives elsewhere.Symfony\Component\BrowserKit\HttpBrowser directly. Goutte has been unmaintained since 2023 and was itself a thin wrapper over HttpBrowser, so this is the correct direction and removes a dead dependency. It is also the source of the primary behavioral risk.Integration feasibility
Technical risk
guzzle_settings.timeout now governs both the idle timeout and the total request duration. Previously it constrained idleness only. Any workflow that streams, paginates, or downloads a large payload over a slow link will begin failing at the timeout boundary even though the connection is actively progressing. This is silent until production traffic hits it.App\Models\User as the default means applications that relied on the previous default will resolve a different model without an explicit config change. In multi-auth or multi-guard setups this can produce authenticated-but-wrong-identity behavior rather than a clean error.hashed cast is a correctness fix, but it is a behavior change on the security boundary. Two failure paths need confirmation: (a) credentials already persisted as double-hashes will now fail authentication and require re-hashing; (b) a daemon model without the cast — the package's inferred intent is that the package still hashes — must be verified, because if the fallback is removed, plaintext passwords get written to the database.Key questions for the maintainer
guzzle_settings.timeout semantics the only transport change, or do redirect, cookie-jar, and user-agent defaults also differ from Goutte? Which behaviors are now configurable to restore prior semantics (e.g. a separate connect timeout or total-duration key)?hashed cast, does the package still hash the password? What is the documented contract?Stack fit
Migration path
config/ and any published package config for the daemon model setting. Pin it explicitly to the intended authenticatable class rather than relying on the new App\Models\User default.hashed cast presence and record the answer — this determines whether the package's own hashing path is active.Compatibility
Goutte\Client signature.Sequencing
Maintenance
Support
Scaling
hashed cast fix removes a per-authentication hash computation on a hot path — a small, real throughput win for daemons that re-authenticate frequently.Failure modes
Ramp-up
guzzle_settings.timeout is now a total-duration ceiling, not an idle threshold, with the list of known long-running calls and their expected durations.How can I help you explore Laravel packages today?