# Quickstart: Hard Filament Nativity Cleanup ## Goal Implement Spec 196 by replacing three pseudo-native UI contracts with native Filament or Livewire interaction models while preserving current scope, summaries, empty states, and drilldown behavior. ## Implementation Sequence ### 1. Prepare shared test and guard scaffolding Touch: - `apps/platform/tests/Feature/Filament/InventoryItemDependencyEdgesTableTest.php` - `apps/platform/tests/Feature/Filament/TenantRequiredPermissionsPageTest.php` - `apps/platform/tests/Feature/Guards/FilamentTableStandardsGuardTest.php` - `apps/platform/tests/Feature/Rbac/TenantRequiredPermissionsTrustedStateTest.php` - `apps/platform/tests/Feature/Evidence/EvidenceOverviewPageTest.php` Do: - create the new focused surface-test entry points before story implementation starts - add the shared guard expectations for new native page-table and faux-control regressions - add the shared mount-only query-seeding regression coverage that later story work depends on ### 2. Replace the inventory dependency GET form with an embedded `TableComponent` Touch: - `apps/platform/app/Filament/Resources/InventoryItemResource.php` - `apps/platform/app/Livewire/InventoryItemDependencyEdgesTable.php` - `apps/platform/resources/views/filament/components/dependency-edges.blade.php` Do: - extend the focused dependency tests before landing implementation changes - embed a native Filament `TableComponent` inside the existing inventory detail section - move direction and relationship state into the component - fetch dependency rows through current dependency services - keep missing-target rendering and target-link behavior intact Do not: - create a new standalone route for dependencies - convert the surface into a RelationManager - keep `request()` as the primary interaction-state source ### 3. Convert `TenantRequiredPermissions` to a native page-owned filter and table contract Touch: - `apps/platform/app/Filament/Pages/TenantRequiredPermissions.php` - `apps/platform/resources/views/filament/pages/tenant-required-permissions.blade.php` - `apps/platform/app/Services/Intune/TenantRequiredPermissionsViewModelBuilder.php` only if a small adapter is needed Do: - extend the focused required-permissions tests before landing implementation changes - add `HasTable` and `InteractsWithTable` - replace pseudo-native filter controls with native filters and native search - derive the summary, guidance, and copy payload blocks from the same normalized filter state that drives the table rows - keep the route tenant authoritative and allow query values only as initial seed state Do not: - let query values redefine tenant scope - split the page into a new resource or standalone workflow - introduce a wrapper abstraction that merely hides the old filter bar ### 4. Convert `EvidenceOverview` to a native page-owned table Touch: - `apps/platform/app/Filament/Pages/Monitoring/EvidenceOverview.php` - `apps/platform/resources/views/filament/pages/monitoring/evidence-overview.blade.php` Do: - extend the focused evidence overview tests before landing implementation changes - add `HasTable` and `InteractsWithTable` - move current row construction into a native table records callback - convert the current tenant query prefilter into a native filter seeded from entitled query input only - add native search across tenant-facing row labels - keep row inspect behavior pointed at the existing tenant evidence drilldown - keep empty-state behavior explicit and native Do not: - introduce a new read model or persistence layer - widen the workspace-context route into a tenant-context route - make remote calls during render ### 5. Run the final focused verification pack and formatting Touch: - `apps/platform/tests/Feature/InventoryItemDependenciesTest.php` - `apps/platform/tests/Feature/Rbac/TenantRequiredPermissionsTrustedStateTest.php` - `apps/platform/tests/Feature/Evidence/EvidenceOverviewPageTest.php` - `apps/platform/tests/Feature/Filament/EvidenceOverviewDerivedStateMemoizationTest.php` - `apps/platform/tests/Feature/Filament/InventoryItemDependencyEdgesTableTest.php` - `apps/platform/tests/Feature/Filament/TenantRequiredPermissionsPageTest.php` - `apps/platform/tests/Feature/Guards/FilamentTableStandardsGuardTest.php` if newly applicable Do: - preserve current scope and authorization assertions - replace GET-form assumptions with native Livewire or table-state assertions - keep DB-only and no-Graph render guarantees - keep unit tests for permission filtering and copy payload logic as domain-truth guards - run the full focused Sail pack and `pint` only after the three story slices are complete ### 6. Stop on scope boundaries If implementation touches any of the following, stop and defer instead of half-solving them here: - shared detail micro-UI contract work - monitoring page-state architecture - global context shell behavior - verification report viewer families - diff, settings, restore preview, or enterprise-detail layout families ### 7. Record the release close-out in this quickstart When implementation is complete, update this file with a short close-out note that records: - which surfaces were actually cleaned - whether any optional same-class extra hit was included or explicitly rejected - which related themes stayed out of scope and were deferred - which follow-up specs or artifacts were touched ## Suggested Test Pack Run the minimum targeted verification pack through Sail. ```bash export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/InventoryItemDependenciesTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/InventoryItemDependencyEdgesTableTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Rbac/TenantRequiredPermissionsTrustedStateTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/TenantRequiredPermissionsPageTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Evidence/EvidenceOverviewPageTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/EvidenceOverviewDerivedStateMemoizationTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Guards/FilamentTableStandardsGuardTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/TenantRequiredPermissionsFilteringTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/TenantRequiredPermissionsCopyPayloadTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/TenantRequiredPermissionsOverallStatusTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/TenantRequiredPermissionsFeatureImpactTest.php cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/TenantRequiredPermissionsFreshnessTest.php cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent ``` ## Manual Smoke Checklist 1. Open an inventory item detail page and confirm dependency direction and relationship changes happen without a foreign apply-and-reload workflow. 2. Open tenant required permissions and confirm the filter surface feels native, while summary counts, guidance, and copy flows remain correct. 3. Open evidence overview and confirm the table behaves like a native Filament report with clear empty state and row inspect behavior. 4. Confirm no cleaned surface leaks scope through query manipulation. 5. Confirm no implementation expanded into monitoring-state, shell, or shared micro-UI redesign work. ## Deployment Notes - No migration is expected. - No provider registration change is expected. - No new assets are expected. - Existing `cd apps/platform && php artisan filament:assets` deployment handling remains sufficient and unchanged.