5.9 KiB
5.9 KiB
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(notbootstrap/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 (especiallypath('')).- Source: https://filamentphp.com/docs/5.x/panel-configuration — “Changing the path”
- Cluster usage is correctly configured (discovery +
$clusterassignments).- 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
$recordTitleAttributeis 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:modelwithout 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-jswhere 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:assetsis included in the deployment process when using registered assets.- Source: https://filamentphp.com/docs/5.x/advanced/assets — “The FilamentAsset facade”