Empty / loading shells are client-side UI-NOW; permission-denied and write-denied use existing authz READ-P3; cell generation depends on job orchestration JOB-NEW; conflict / support-preview fallbacks are part of the 4A write & preview contracts API-NEW. Errors are inline and contextual — never a generic toast.
This matter has no review table.
Tells the user the next action, never just “no data”.
Review table created. Add the first question to generate cells.
e.g. “Governing law”, “Liability cap”.
Questions exist but generation hasn’t run for these documents.
Cells are created per document × question; rows fill in as jobs complete.
Skeleton rows match the grid shape — not a spinner.
Inspector opened; claim / supports / warnings are being fetched.
Actions stay disabled until the cell + its version load.
Optimistic concurrency: the write carried an old version; the server rejected it rather than overwrite another reviewer’s decision.
Unavailable actions are disabled with a clear tooltip, never hidden (addendum §7). Reviewer is read-only in 4A until review permissions are explicitly added.
Locator-only fallback never fabricates quoted text.
Not in 4A — never silently drop the authority requirement (4B UX).
Quiet top banner; work surfaces are disabled, not blanked.
You don’t have access to this matter.
No data is shown (ethical wall). Request access from the matter owner.
Accessibility. Every state announces itself to a screen reader; job transitions (“generating”, “generation complete”) use polite live regions; focus is never trapped in a drawer or modal. All status colour is always paired with a glyph, pattern or label.