79 lines
5.9 KiB
Markdown
79 lines
5.9 KiB
Markdown
# 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” |