# SECTION C — AI REVIEW CHECKLIST (STRICT CHECKBOXES) ## Version Safety - [ ] Filament v5 explicitly targets Livewire v4.0+ (no Livewire v3 references anywhere). - Source: https://filamentphp.com/docs/5.x/upgrade-guide — “Upgrading Livewire” - [ ] All references are Filament `/docs/5.x/` only (no v3/v4 docs, no legacy APIs). - [ ] Upgrade assumptions match the v5 upgrade guide requirements and steps. - Source: https://filamentphp.com/docs/5.x/upgrade-guide — “New requirements” ## Panel & Navigation - [ ] Laravel 11+: panel providers are registered in `bootstrap/providers.php` (not `bootstrap/app.php`). - Source: https://filamentphp.com/docs/5.x/panel-configuration — “Creating a new panel” - [ ] Panel `path()` choices are intentional and do not conflict with existing routes (especially `path('')`). - Source: https://filamentphp.com/docs/5.x/panel-configuration — “Changing the path” - [ ] Cluster usage is correctly configured (discovery + `$cluster` assignments). - Source: https://filamentphp.com/docs/5.x/navigation/clusters — “Creating a cluster” - [ ] Cluster semantics (sub-navigation + grouped navigation behavior) are understood and verified against the clusters docs. - Source: https://filamentphp.com/docs/5.x/navigation/clusters — “Introduction” - [ ] Cluster directory structure is treated as recommended, not mandatory. - Source: https://filamentphp.com/docs/5.x/navigation/clusters — “Code structure recommendations for panels using clusters” - [ ] User menu items are registered via `userMenuItems()` and permission-gated where needed. - Source: https://filamentphp.com/docs/5.x/navigation/user-menu — “Introduction” ## Resource Structure - [ ] `$recordTitleAttribute` is set for any resource intended for global search. - Source: https://filamentphp.com/docs/5.x/resources/overview — “Record titles” - [ ] Hard rule enforced: every globally searchable resource has an Edit or View page; otherwise global search is disabled for it. - Source: https://filamentphp.com/docs/5.x/resources/global-search — “Setting global search result titles” - [ ] Relationship-backed global search details are eager-loaded via the global search query override. - Source: https://filamentphp.com/docs/5.x/resources/global-search — “Adding extra details to global search results” ## Infolists & Relations - [ ] Each relationship uses the correct tool (RelationManager vs Select/CheckboxList vs Repeater) based on required interaction. - Source: https://filamentphp.com/docs/5.x/resources/managing-relationships — “Choosing the right tool for the job” - [ ] RelationManagers remain lazy-loaded by default unless there’s an explicit UX justification. - Source: https://filamentphp.com/docs/5.x/resources/managing-relationships — “Disabling lazy loading” ## Forms - [ ] Server-driven reactivity is minimal; chatty inputs do not trigger network requests unnecessarily. - Source: https://filamentphp.com/docs/5.x/forms/overview — “Reactive fields on blur” - [ ] Custom field views obey state binding modifiers (no hardcoded `wire:model` without modifiers). - Source: https://filamentphp.com/docs/5.x/forms/custom-fields — “Obeying state binding modifiers” ## Tables & Actions - [ ] Tables define a meaningful empty state (and empty-state actions where appropriate). - Source: https://filamentphp.com/docs/5.x/tables/empty-state — “Adding empty state actions” - [ ] All destructive actions execute via `->action(...)` and include `->requiresConfirmation()`. - Source: https://filamentphp.com/docs/5.x/actions/modals — “Confirmation modals” - [ ] No checklist rule assumes confirmation/modals for `->url(...)` actions unless verified in docs (UNVERIFIED behavior must not be asserted as fact). - Source: https://filamentphp.com/docs/5.x/actions/modals — “Confirmation modals” ## Authorization & Security - [ ] Panel access is enforced for non-local environments as documented. - Source: https://filamentphp.com/docs/5.x/users/overview — “Authorizing access to the panel” - [ ] UI visibility is not treated as authorization; policies/access checks still enforce boundaries. - [ ] Bulk operations intentionally choose between “Any” policy methods vs per-record authorization where required. - Source: https://filamentphp.com/docs/5.x/resources/deleting-records — “Authorization” ## UX & Notifications - [ ] User-triggered mutations provide explicit success/error notifications when outcomes aren’t instantly obvious. - Source: https://filamentphp.com/docs/5.x/notifications/overview — “Introduction” - [ ] Polling (widgets/notifications) is configured intentionally (interval set or disabled) to control load. - Source: https://filamentphp.com/docs/5.x/widgets/stats-overview — “Live updating stats (polling)” ## Performance - [ ] Heavy frontend assets are loaded on-demand using `loadedOnRequest()` + `x-load-css` / `x-load-js` where appropriate. - Source: https://filamentphp.com/docs/5.x/advanced/assets — “Lazy loading CSS” / “Lazy loading JavaScript” - [ ] Styling overrides use CSS hook classes discovered via DevTools (no brittle selectors by default). - Source: https://filamentphp.com/docs/5.x/styling/css-hooks — “Discovering hook classes” ## Testing - [ ] Livewire tests mount Filament pages/relation managers/widgets (Livewire components), not static resource classes. - Source: https://filamentphp.com/docs/5.x/testing/overview — “What is a Livewire component when using Filament?” - [ ] Actions that mutate data are covered using Filament’s action testing guidance. - Source: https://filamentphp.com/docs/5.x/testing/testing-actions — “Testing actions” ## Deployment / Ops - [ ] `php artisan filament:assets` is included in the deployment process when using registered assets. - Source: https://filamentphp.com/docs/5.x/advanced/assets — “The FilamentAsset facade”