diff --git a/resources/views/filament/infolists/entries/restore-preview.blade.php b/resources/views/filament/infolists/entries/restore-preview.blade.php
index 4fb8987..ca25216 100644
--- a/resources/views/filament/infolists/entries/restore-preview.blade.php
+++ b/resources/views/filament/infolists/entries/restore-preview.blade.php
@@ -88,6 +88,32 @@
{{ $item['compliance_action_warning'] }}
@endif
+
+ @if (! empty($item['compliance_action_summary']) && is_array($item['compliance_action_summary']))
+ @php
+ $summary = $item['compliance_action_summary'];
+ $missingTemplates = $item['compliance_action_missing_templates'] ?? [];
+ $total = (int) ($summary['total'] ?? 0);
+ $missing = (int) ($summary['missing'] ?? 0);
+ @endphp
+
+
+ Compliance notifications: {{ $total }} total • {{ $missing }} missing
+
+
+ @if (! empty($missingTemplates) && is_array($missingTemplates))
+
+ Missing notification templates
+
+ @foreach ($missingTemplates as $templateId)
+
+ {{ $templateId }}
+
+ @endforeach
+
+
+ @endif
+ @endif
@endforeach
diff --git a/resources/views/filament/infolists/entries/restore-results.blade.php b/resources/views/filament/infolists/entries/restore-results.blade.php
index 6d288b9..38a6ce4 100644
--- a/resources/views/filament/infolists/entries/restore-results.blade.php
+++ b/resources/views/filament/infolists/entries/restore-results.blade.php
@@ -192,10 +192,10 @@
@if (! empty($item['compliance_action_summary']) && is_array($item['compliance_action_summary']))
@php
$summary = $item['compliance_action_summary'];
- $complianceOutcomes = $item['compliance_action_outcomes'] ?? [];
- $complianceIssues = collect($complianceOutcomes)
- ->filter(fn ($outcome) => ($outcome['status'] ?? null) === 'skipped')
- ->values();
+ $complianceOutcomes = is_array($item['compliance_action_outcomes'] ?? null)
+ ? $item['compliance_action_outcomes']
+ : [];
+ $complianceEntries = collect($complianceOutcomes)->values();
@endphp
@@ -203,18 +203,26 @@
{{ (int) ($summary['skipped'] ?? 0) }} skipped
- @if ($complianceIssues->isNotEmpty())
+ @if ($complianceEntries->isNotEmpty())
Compliance notification details
- @foreach ($complianceIssues as $outcome)
+ @foreach ($complianceEntries as $outcome)
+ @php
+ $outcomeStatus = $outcome['status'] ?? 'unknown';
+ $outcomeColor = match ($outcomeStatus) {
+ 'mapped' => 'text-green-700 bg-green-100 border-green-200',
+ 'skipped' => 'text-amber-900 bg-amber-100 border-amber-200',
+ default => 'text-gray-700 bg-gray-100 border-gray-200',
+ };
+ @endphp
Template {{ $outcome['template_id'] ?? 'unknown' }}
-
- skipped
+
+ {{ $outcomeStatus }}
@if (! empty($outcome['rule_name']))
@@ -222,6 +230,11 @@
Rule: {{ $outcome['rule_name'] }}
@endif
+ @if (! empty($outcome['mapped_template_id']))
+
+ Mapped to: {{ $outcome['mapped_template_id'] }}
+
+ @endif
@if (! empty($outcome['reason']))
{{ $outcome['reason'] }}
diff --git a/specs/007-device-config-compliance/tasks.md b/specs/007-device-config-compliance/tasks.md
index 36113d0..a9f3c35 100644
--- a/specs/007-device-config-compliance/tasks.md
+++ b/specs/007-device-config-compliance/tasks.md
@@ -54,8 +54,8 @@ ## Phase 4: Admin UX
**Purpose**: Surface restore and compliance details clearly in the UI.
-- [ ] T013 Update `resources/views/filament/infolists/entries/restore-preview.blade.php` to surface compliance action/template warnings.
-- [ ] T014 Update `resources/views/filament/infolists/entries/restore-results.blade.php` to show compliance action mapping outcomes and skip reasons.
+- [x] T013 Update `resources/views/filament/infolists/entries/restore-preview.blade.php` to surface compliance action/template warnings.
+- [x] T014 Update `resources/views/filament/infolists/entries/restore-results.blade.php` to show compliance action mapping outcomes and skip reasons.
**Checkpoint**: Admins can see compliance related mapping results in preview and results.
diff --git a/tests/Feature/Filament/RestorePreviewTest.php b/tests/Feature/Filament/RestorePreviewTest.php
index fc441dc..a4ccb0a 100644
--- a/tests/Feature/Filament/RestorePreviewTest.php
+++ b/tests/Feature/Filament/RestorePreviewTest.php
@@ -188,4 +188,5 @@ public function request(string $method, string $path, array $options = []): Grap
expect($policyPreview['compliance_action_warning'] ?? null)->not->toBeNull();
expect(($policyPreview['compliance_action_summary']['missing'] ?? 0))->toBe(1);
+ expect($policyPreview['compliance_action_missing_templates'] ?? [])->toContain('template-1');
});