TenantAtlas/specs/056-remove-legacy-bulkops/discovery.md
2026-01-19 18:50:11 +01:00

6.2 KiB

Discovery Report: Feature 056 — Remove Legacy BulkOperationRun

Purpose

This report records the repo-wide sweep of legacy BulkOperationRun usage and any bulk-like actions that must be classified and migrated to canonical OperationRun.

Legacy History Decision

  • Default path: legacy BulkOperationRun history is not migrated into OperationRun.
  • After cutover, legacy tables are removed; historical investigation relies on database backups/exports if needed.

Sweep Checklist

  • app/ (Models, Services, Jobs, Notifications, Support)
  • app/Filament/ (Resources, Pages, Actions)
  • database/ (migrations, factories, seeders)
  • resources/ (views)
  • routes/ (web, console)
  • tests/ (Feature, Unit)

Findings

A) Legacy artifacts (to remove)

Kind Path Notes
Model app/Models/BulkOperationRun.php Legacy run model; referenced across jobs and UI.
Service app/Services/BulkOperationService.php Legacy run lifecycle + failure recording; widely referenced.
Filament Resource app/Filament/Resources/BulkOperationRunResource.php Legacy Monitoring surface; must be removed (Monitoring uses OperationRun).
Filament Pages app/Filament/Resources/BulkOperationRunResource/Pages/ListBulkOperationRuns.php Legacy list page.
Filament Pages app/Filament/Resources/BulkOperationRunResource/Pages/ViewBulkOperationRun.php Legacy detail page.
Policy app/Policies/BulkOperationRunPolicy.php Legacy authorization policy.
Policy Registration app/Providers/AppServiceProvider.php Registers BulkOperationRun policy/gate mapping.
Helper app/Support/RunIdempotency.php findActiveBulkOperationRun(...) helper for legacy dedupe.
Command app/Console/Commands/TenantpilotPurgeNonPersistentData.php Still references BulkOperationRun and legacy table counts.
DB Migrations database/migrations/bulk_operation_runs Legacy table creation + follow-up schema changes.
Factory database/factories/BulkOperationRunFactory.php Test factory to remove after cutover.
Seeder database/seeders/BulkOperationsTestSeeder.php Test seed data to remove after cutover.
Table bulk_operation_runs Legacy DB table; drop via forward migration after cutover.

B) Bulk-like start surfaces (to migrate)

Surface Path Operation type Target scope? Notes
Policy bulk delete app/Filament/Resources/PolicyResource.php policy.delete Yes (tenant + directory scope) Migrates to OperationRun-backed enqueue + orchestrator/worker.
Backup set bulk delete app/Filament/Resources/BackupSetResource.php backup_set.delete Yes Migrates to OperationRun-backed enqueue + orchestrator/worker.
Policy version prune app/Filament/Resources/PolicyVersionResource.php policy_version.prune Yes Migrates to OperationRun-backed enqueue + orchestrator/worker.
Policy version force delete app/Filament/Resources/PolicyVersionResource.php policy_version.force_delete Yes Migrates to OperationRun-backed enqueue + orchestrator/worker.
Restore run bulk delete app/Filament/Resources/RestoreRunResource.php restore_run.delete Yes Migrates to OperationRun-backed enqueue + orchestrator/worker.
Tenant bulk sync app/Filament/Resources/TenantResource.php tenant.sync Yes Migrates to OperationRun-backed enqueue + orchestrator/worker.
Policy snapshot capture app/Filament/Resources/PolicyResource/Pages/ViewPolicy.php policy.capture_snapshot Yes Migrates to OperationRun-backed enqueue + orchestrator/worker.
Drift generation app/Filament/Pages/DriftLanding.php drift.generate Yes Mixed legacy + OperationRun today; needs full canonicalization.
Backup set add policies (picker) app/Livewire/BackupSetPolicyPickerTable.php backup_set.add_policies Yes Mixed legacy + OperationRun today; remove legacy dedupe + legacy links.

C) Bulk-like jobs/workers (to migrate)

Job Path Remote calls? Notes
Policy bulk delete app/Jobs/BulkPolicyDeleteJob.php Likely (Graph) Legacy bulk job; replaced by orchestrator/worker pattern.
Backup set bulk delete app/Jobs/BulkBackupSetDeleteJob.php Likely (Graph) Legacy bulk job; replaced by orchestrator/worker pattern.
Policy version prune app/Jobs/BulkPolicyVersionPruneJob.php Likely (Graph) Legacy bulk job; replaced by orchestrator/worker pattern.
Policy version force delete app/Jobs/BulkPolicyVersionForceDeleteJob.php Likely (Graph) Legacy bulk job; replaced by orchestrator/worker pattern.
Restore run bulk delete app/Jobs/BulkRestoreRunDeleteJob.php Likely (Graph) Legacy bulk job; replaced by orchestrator/worker pattern.
Tenant bulk sync app/Jobs/BulkTenantSyncJob.php Likely (Graph) Legacy bulk job; replaced by orchestrator/worker pattern.
Policy snapshot capture app/Jobs/CapturePolicySnapshotJob.php Likely (Graph) Legacy-ish job; migrate to orchestrator/worker and canonical run updates.
Drift generator app/Jobs/GenerateDriftFindingsJob.php Likely (Graph) Already carries OperationRun; remove remaining legacy coupling.
Backup set add policies app/Jobs/AddPoliciesToBackupSetJob.php Likely (Graph) Contains a legacy “fallback link” to BulkOperationRunResource; canonicalize.
Policy bulk sync (legacy) app/Jobs/BulkPolicySyncJob.php Likely (Graph) Legacy bulk job; migrate/remove as part of full cutover.
Location Path Current link target Fix
Run-status notification app/Notifications/RunStatusChangedNotification.php BulkOperationRunResource::getUrl('view', ...) Route via OperationRunLinks::view(...) (OperationRun is canonical).
Add policies job notification links app/Jobs/AddPoliciesToBackupSetJob.php Conditional: OperationRun OR legacy BulkOperationRunResource view Remove legacy fallback; always use OperationRun-backed links.
Legacy resource itself app/Filament/Resources/BulkOperationRunResource.php Legacy list/detail routes exist Remove resource; rely on Monitoring → Operations.