# Quickstart: Feature 056 — Remove Legacy BulkOperationRun ## Prerequisites - Local dev via Laravel Sail - Database migrations up to date ## Common commands (Sail-first) - Boot: `./vendor/bin/sail up -d` - Run migrations: `./vendor/bin/sail artisan migrate` - Run targeted tests: `./vendor/bin/sail artisan test tests/Feature` - Format (required): `./vendor/bin/pint --dirty` ## What to build (high level) - Replace all legacy bulk-run usage with the canonical OperationRun run model. - Ensure all bulk actions are enqueue-only and visible in Monitoring → Operations. - Enforce per-target scope concurrency limit (config-driven, default=1). - Enforce bulk idempotency via deterministic fingerprinting. - Remove legacy BulkOperationRun stack (model/service/table/UI). - Add guardrails/tests to prevent reintroduction. ## Where to look first - Legacy stack: - `app/Models/BulkOperationRun.php` - `app/Services/BulkOperationService.php` - `database/migrations/*bulk_operation_runs*` - Canonical run stack: - `app/Models/OperationRun.php` - `app/Services/OperationRunService.php` - `app/Support/OperationCatalog.php` - `app/Support/OpsUx/OperationSummaryKeys.php` - Locking patterns to reuse: - `app/Services/Inventory/InventoryConcurrencyLimiter.php` - `app/Services/Inventory/InventorySyncService.php`