laravel-persona/core
Core package for Laravel Persona, providing foundational APIs to define, resolve, and manage personas in Laravel applications. It offers a lightweight, extensible base for building persona-driven profiles, contexts, and behavior across your app.
Architecture fit
The package plugs into Laravel's standard package conventions (service provider, publishable config, artisan install command) and now claims a slot in the application's scheduler. That is a meaningful architectural shift: an auto-registered scheduled task is no longer a passive library — it becomes a runtime actor in every environment where the install command runs, including staging and CI-provisioned apps. For a Laravel shop already using schedule:run via cron or schedule:work, the fit is natural. For shops that treat the scheduler as a hand-curated, centrally reviewed surface (common in regulated or multi-tenant deployments), auto-registration reduces the visibility of what runs in production.
Integration feasibility
Low-to-moderate effort. Typical path is composer require, run the install/publish command, review the published config, and confirm registration via php artisan schedule:list. The v1.1.2 change removes one step (manually adding the sweeper to the console kernel / routes/console.php / bootstrap/app.php), which should reduce misconfiguration. The caveat is that existing consumers who already scheduled the command manually will now get a duplicate registration unless they remove their own entry — a silent double-sweep is a real possibility.
Technical risk
composer update can alter production scheduling without a deliberate minor-version review. Treat the next update as requiring a changelog read, not just a green CI run.withoutOverlapping, onOneServer) and lock store behavior need verification before rollout.Key questions
enabled, cron expression, queue vs. sync) and does it ship enabled or disabled by default?withoutOverlapping() and onOneServer()? What lock store does it assume?RefreshDatabase apps), and does it add runtime to CI?withSchedule / routes/console.php) as well as the legacy kernel path?Stack fit
Requires a Laravel application with a functioning scheduler (system cron invoking schedule:run, or a long-running schedule:work process). PHP and framework version constraints should be confirmed against composer.json rather than inferred. Where the host app runs multiple app servers, the scheduler should be a single designated node or the task must carry onOneServer() with a shared cache backend (Redis/Database) — otherwise every node sweeps.
Migration path
php artisan schedule:list to confirm exactly one entry, the intended cadence, and the intended queue/connection.config:cache enabled — a common failure point for packages that read config at boot.Compatibility Additive scheduling should be backward compatible at the API level, but it is not behavior-neutral. Two compatibility surfaces to check: (a) Laravel scheduler API differences across 10/11/12, and (b) the organization's own deployment tooling referencing the removed script. Also confirm queue driver assumptions — if the sweeper is queued, environments without a worker will silently accumulate jobs.
Sequencing Land the version bump in a branch with scheduling explicitly disabled (assuming a config toggle exists); enable in staging against a production-shaped dataset for at least one full cadence cycle; observe query duration, rows affected, and lock contention; then enable in production behind the same config flag. Keep the flag as a kill switch rather than removing it after rollout.
Maintenance The package now owns a row in the production schedule, which means it belongs in the runbook alongside other periodic jobs: owner, cadence, expected duration, log location, and disable procedure. Config publish diffs on upgrade need review, since new keys (scheduling toggle, cron expression) will appear. The raw-delete documentation creates a cross-team obligation: whoever runs manual SQL against these tables must coordinate with sweeper timing and expectations.
Support Removal of the deployment script shifts a small amount of tooling ownership to us; if anything depended on it, that support burden arrives with the upgrade rather than later. First-line support needs to know where sweeper output lands (log channel, exit codes, failure notifications) before the first production incident, not during it.
Scaling Sweep cost is proportional to orphan volume, not to application traffic, which makes it deceptive: it may be invisible for months and then become the heaviest query in the system after a data-integrity incident. Confirm batching and per-run row caps so a single execution cannot lock a large table. On multi-node deployments, the difference between one sweep and N concurrent sweeps is a database availability concern, not a performance tuning detail.
Failure modes
config:cache staleness after upgrade → scheduling toggle ignored, task runs against intent.Ramp-up Low for a Laravel-fluent engineer: roughly half a day to install, verify registration, and read the sweep implementation; add a day for staging validation at realistic data volume. The nontrivial ramp-up is organizational, not technical — teaching operators the raw-delete procedure and getting the scheduled task into the on-call runbook.
How can I help you explore Laravel packages today?