76 lines
3.3 KiB
Markdown
76 lines
3.3 KiB
Markdown
# Implementation Plan: Restore Run Wizard (011)
|
|
|
|
**Branch**: `feat/011-restore-run-wizard` | **Date**: 2025-12-30
|
|
**Input**: Feature specification in `specs/011-restore-run-wizard/spec.md`
|
|
|
|
## Summary
|
|
Refactor Restore Run creation into a **Filament Wizard** that enforces **Safety First**:
|
|
source → scope → safety checks → preview → confirm + execute.
|
|
|
|
Leverage existing restore primitives (`RestoreService::preview()` / `RestoreService::execute()`) and incrementally introduce:
|
|
- structured **risk checks**
|
|
- **diff preview** artifacts/summaries
|
|
- stronger **execution gating** + audit fields
|
|
|
|
## Technical Context (current code)
|
|
- Filament Resource: `app/Filament/Resources/RestoreRunResource.php` (single form today)
|
|
- Restore engine: `app/Services/Intune/RestoreService.php` (preview + execute)
|
|
- Diff tools: `app/Services/Intune/PolicyNormalizer.php` + `app/Services/Intune/VersionDiff.php`
|
|
- Data model: `restore_runs` already stores `preview`, `results`, `metadata`, `requested_items`
|
|
|
|
## Phase 1 — Data + State Model (Wizard-ready)
|
|
- Define restore run lifecycle statuses (string enum values).
|
|
- Decide what is stored as dedicated columns vs `restore_runs.metadata` JSON.
|
|
- Add minimal persistence for wizard state:
|
|
- `scope_mode`, `check_summary`, `check_results`, `preview_summary`, `confirmed_at/by`, `environment`, `highlander_label`.
|
|
|
|
**Checkpoint**: RestoreRun can represent wizard progression and persist computations.
|
|
|
|
## Phase 2 — Filament Wizard UI (Create Restore Run)
|
|
- Replace the single Create form with a 5-step wizard UI.
|
|
- Implement step-level validation and state resets (changing backup set resets downstream).
|
|
- Keep dry-run default ON, and make execution UI unavailable until the wizard rules are satisfied.
|
|
|
|
**Checkpoint**: Wizard is usable end-to-end in dry-run.
|
|
|
|
## Phase 3 — Restore Scope Builder (Selection UX)
|
|
- Build grouped selection UI for BackupItems (type/platform), with search and “select all”.
|
|
- Clearly mark:
|
|
- foundations vs policies
|
|
- preview-only types
|
|
- items missing policy_version linkage / snapshot completeness hints (optional)
|
|
|
|
**Checkpoint**: Scoping is explicit, scalable, and safe.
|
|
|
|
## Phase 4 — Safety & Conflict Checks (RestoreRiskChecker)
|
|
- Implement server-side checks for the chosen scope.
|
|
- Persist results on the RestoreRun and display with severity badges.
|
|
- Block execution if blockers exist.
|
|
|
|
**Checkpoint**: Defensive layer in place; blockers stop execution.
|
|
|
|
## Phase 5 — Preview (RestoreDiffGenerator)
|
|
- Generate a diff summary (minimum) comparing backup snapshot vs current target state.
|
|
- Persist preview summary (and optionally per-item diffs with limits).
|
|
- Require preview completion before allowing execute.
|
|
|
|
**Checkpoint**: Preview step is a hard gate for execute and is auditable.
|
|
|
|
## Phase 6 — Confirm & Execute
|
|
- Add explicit confirmations:
|
|
- “I reviewed the impact”
|
|
- tenant hard-confirm (Highlander)
|
|
- environment badge (frozen at run creation)
|
|
- Execute restore via queue job (preferred) or synchronous execution (only if queue is out of scope for MVP).
|
|
- Update run statuses and persist outcomes.
|
|
|
|
**Checkpoint**: Execution is safe, gated, and traceable.
|
|
|
|
## Phase 7 — Tests + QA
|
|
- Pest feature tests for:
|
|
- wizard gating rules (execute disabled until conditions satisfied)
|
|
- safety checks persistence and blocking behavior
|
|
- preview summary generation
|
|
- Run targeted tests and Pint.
|
|
|