# Implementation Plan: Spec 332 - Product Process Flow System v1 - Branch: `332-product-process-flow-system-v1` - Date: 2026-05-25 - Spec: `specs/332-product-process-flow-system-v1/spec.md` ## Reconciliation Note Spec 332 was reconciled from the narrower `restore-run-preview-productization` path into the intended `product-process-flow-system-v1` scope. The previous path underrepresented the actual product/process-flow goal and caused restore safety state to drift too late into Preview. ## Summary Implement a reusable Product Process Flow pattern and apply it first to Restore Run Create: - Step 1 shows the full restore safety/product process flow, decision card, backup quality summary, restore proof aside, and collapsed diagnostics. - Step 2 and later keep step-specific content primary while exposing compact restore safety status. - Step 2 keeps dependency mapping in an explicit resolver mode with progress copy, shared guidance, and blocked progression until required mappings are resolved. - The Step 2 dependency-mapping picker uses task-specific cache-empty guidance instead of a generic directory-cache table empty state. - Preview stays decision-first. - Confirm stays high-friction before execution. ## Affected Surfaces / Files - Wizard logic: - `apps/platform/app/Filament/Resources/RestoreRunResource.php` - Restore safety copy: - `apps/platform/app/Support/RestoreSafety/RestoreSafetyCopy.php` - Product Process Flow views: - `apps/platform/resources/views/filament/forms/components/restore-run-checks.blade.php` - `apps/platform/resources/views/filament/forms/components/restore-run-preview.blade.php` - shared/new restore-run process-flow partials as needed - Group picker modal + component: - `apps/platform/resources/views/filament/modals/entra-group-cache-picker.blade.php` - `apps/platform/resources/views/livewire/entra-group-cache-picker-table.blade.php` - `apps/platform/app/Livewire/EntraGroupCachePickerTable.php` - Tests: - `apps/platform/tests/Feature/Filament/RestoreRunPreviewProductizationTest.php` - restore-run create wizard feature tests covering step 1 through confirm - `apps/platform/tests/Browser/Spec332RestoreRunWizardProductProcessFlowSmokeTest.php` ## Technical Approach 1. **Spec reconciliation** - Keep only `specs/332-product-process-flow-system-v1`. - Update spec/plan/tasks so Product Process Flow is the primary scope and Restore Preview productization is one slice of that scope. 2. **Shared Product Process Flow state** - Reuse existing `wizardSafetyState`, restore safety assessment, preview integrity, execution readiness, and backup quality summary helpers. - Add or extract presentation helpers/partials so Step 1 full flow and Step 2+ compact status read from the same underlying state. 3. **Step 1 contract** - Restore Safety decision card above the selector. - Backup set selector and backup quality summary. - Full vertical `Restore safety gates`. - Restore Proof aside with diagnostics collapsed. 4. **Later-step contract** - Keep step-specific content primary. - Render compact Restore Safety Status plus proof context where useful. - Productize Step 2 resolver mode around collapsed-by-default mapping details, progress copy, blocked progression, and cache-empty follow-up. - Preserve gate enforcement with `afterValidation()` and `Halt`. 5. **Preview and confirm** - Preview remains decision-first and truthfully reflects gate state. - Confirm preserves high-friction confirmation without implying completed recovery proof. 6. **Tests** - Feature tests for full Step 1, compact Step 2+, blocked validation, truthful preview copy, proof persistence, collapsed diagnostics, and no false recovery-proof claims. - Browser smoke through Steps 1-4. ## Validation Commands Narrow first: - `cd apps/platform && ./vendor/bin/sail artisan test tests/Feature/Filament --filter=Spec332 --compact` - `cd apps/platform && ./vendor/bin/sail artisan test tests/Feature/Filament/RestoreRun* --compact` Browser smoke: - `cd apps/platform && ./vendor/bin/sail php vendor/bin/pest tests/Browser/Spec332RestoreRunWizardProductProcessFlowSmokeTest.php --compact` Formatting: - `cd apps/platform && ./vendor/bin/sail pint --dirty` - `git diff --check` ## Dependencies - Existing restore safety / preview / backup quality resolvers remain the source of truth. - Spec 334 (nested Filament/Livewire context hardening) must remain present so browser smoke can run without tenantless Livewire context failures.