# Quickstart: Structured Snapshot Rendering & Type-Agnostic Item Browser

**Feature**: 130-structured-snapshot-rendering | **Date**: 2026-03-09

## Scope

This feature upgrades the workspace-scoped baseline snapshot detail view by:

- replacing raw JSON as the primary snapshot detail UX,
- introducing a normalized summary-first presentation model,
- rendering all captured policy types through a grouped item browser,
- keeping groups collapsed by default,
- preserving richer RBAC detail as an enrichment layer,
- adding initial structured rendering for `deviceCompliancePolicy`,
- keeping raw technical payload secondary and collapsed.

## Implementation order

1. Create the normalized snapshot rendering primitives under `app/Services/Baselines/SnapshotRendering`.
2. Implement the page-level presenter and type-renderer registry with fallback resolution.
3. Extract current `intuneRoleDefinition` mapping into a dedicated renderer.
4. Add initial `deviceCompliancePolicy` structured rendering.
5. Introduce centralized fidelity and gap badge semantics.
6. Rebuild the `BaselineSnapshotResource` detail infolist around metadata, summary, groups, and technical disclosure.
7. Update existing snapshot visibility tests to the new layout and add focused presenter and fallback coverage.
8. Run focused Sail-based tests.
9. Run Pint on dirty files.

## Reference files

- [app/Filament/Resources/BaselineSnapshotResource.php](../../../app/Filament/Resources/BaselineSnapshotResource.php)
- [app/Filament/Resources/BaselineSnapshotResource/Pages/ViewBaselineSnapshot.php](../../../app/Filament/Resources/BaselineSnapshotResource/Pages/ViewBaselineSnapshot.php)
- [app/Models/BaselineSnapshot.php](../../../app/Models/BaselineSnapshot.php)
- [app/Models/BaselineSnapshotItem.php](../../../app/Models/BaselineSnapshotItem.php)
- [app/Support/Badges/BadgeCatalog.php](../../../app/Support/Badges/BadgeCatalog.php)
- [app/Support/Badges/BadgeRenderer.php](../../../app/Support/Badges/BadgeRenderer.php)
- [resources/views/filament/infolists/entries/snapshot-json.blade.php](../../../resources/views/filament/infolists/entries/snapshot-json.blade.php)
- [resources/views/filament/infolists/entries/settings-catalog-grouped.blade.php](../../../resources/views/filament/infolists/entries/settings-catalog-grouped.blade.php)
- [resources/views/filament/infolists/entries/restore-results.blade.php](../../../resources/views/filament/infolists/entries/restore-results.blade.php)
- [tests/Feature/Filament/BaselineSnapshotFidelityVisibilityTest.php](../../../tests/Feature/Filament/BaselineSnapshotFidelityVisibilityTest.php)
- [tests/Feature/Guards/FilamentTableStandardsGuardTest.php](../../../tests/Feature/Guards/FilamentTableStandardsGuardTest.php)

## Suggested validation commands

```bash
vendor/bin/sail artisan test --compact tests/Feature/Filament/BaselineSnapshotFidelityVisibilityTest.php
vendor/bin/sail artisan test --compact tests/Feature/Filament/BaselineSnapshotStructuredRenderingTest.php
vendor/bin/sail artisan test --compact tests/Feature/Filament/BaselineSnapshotFallbackRenderingTest.php
vendor/bin/sail artisan test --compact tests/Feature/Filament/BaselineSnapshotAuthorizationTest.php
vendor/bin/sail artisan test --compact tests/Feature/Filament/BaselineSnapshotDegradedStateTest.php
vendor/bin/sail artisan test --compact tests/Unit/Baselines/SnapshotRendering
vendor/bin/sail bin pint --dirty --format agent
```

## Expected outcome

- Snapshot detail opens with a structured summary instead of raw JSON.
- Every captured policy type is visible in both the summary and grouped browser.
- Unsupported or newly added types render through the fallback contract instead of disappearing.
- `intuneRoleDefinition` remains rich but is no longer the only first-class inspectable type.
- `deviceCompliancePolicy` appears as a first-class structured group.
- Fidelity and gap states are explicit and centralized.
