- Modules\Shared\Bnfexpress\BnfexpressAdminClient: HMAC-signed HTTP client for bnfexpress's admin API (EV FAQs, agent instructions, chat history), with a bnfexpress:smoke-test command and full unit coverage. - New ai-agent module: Filament pages to manage EV FAQs, publish/roll back agent instruction versions, and browse EV chat history + transcripts. - New manage_ai_agent permission (super_admin/admin). - Recorded .ai/rules for the client's auth scheme and non-Resource Filament page/table testing gotchas.
1.4 KiB
paths
| paths | |
|---|---|
|
Pages
Non-Resource Filament pages need an explicit table-rendering view + deferLoading-aware tests
A Filament\Pages\Page implements HasTable (not a Resource) does NOT render its table automatically — it must set protected string $view = '<module>::filament.pages.<slug>'; pointing at a Blade file containing <x-filament-panels::page>{{ $this->table }}</x-filament-panels::page> (see ManageFaqs/ViewEvChatHistory/BookingsRevenueReport). Omitting this silently renders an empty page — no error, just a blank fi-page-content.
Filament v4 tables default to deferred loading. In Pest/Livewire tests, call ->loadTable() before any assertSee()/assertCanSeeTableRecords() on a freshly-mounted component, or the table body won't be in the rendered HTML yet.
For custom-data (->records()-backed, non-Eloquent) tables: use ->callTableAction($name, $record, data: [...]) / ->mountTableAction(...) (not the generic ->callAction(), which targets page-level actions and misses table header/record actions), and use ->assertMountedActionModalSee(...) to check ->modalContent() output — modal content is lazily rendered and won't appear in a plain ->html()/->assertSee() snapshot even after mounting the action. See [[project_internachi_modular]]-style module layout in app-modules/ai-agent.