States — contract, not decoration
Every state the directory must render is frozen here for RED Playwright specs.
Loading members…
aria-busy="true" row skeletons while the directory page is in flight.
Just you, for now
A freshly-seeded install has exactly one member: you. Empty is a real state — the directory renders one row, never an error.
No members match “zzxq”
No-results is distinct from empty — the directory has members, the query matched none. Offer to clear the search.
Couldn't load the directory
A non-2xx from the directory endpoint. Show retry; keep the search box populated.
Last page
Prev disabled on page 1, Next disabled on the last page. Page count derives from total / pageSize.
You don't have access to the member directory
The directory is an admin/owner
(or Employee/ReBAC) capability. A non-privileged caller gets 403 FORBIDDEN rendered
in place with zero member data — never a sign-in redirect; only a 401 re-authenticates.