Story-2250 - pramaan-admin - Firm Record

Members tab marks PRAMAAN staff as staff, not as a warning

The Members panel still uses the standardized DataTable with Member, Role, Status, and Joined columns. Internal-domain detection remains in place, but the presentation now matches the design: a compact gold StatusBadge reading Staff next to the member name.

Before

A PRAMAAN-domain firm member rendered like an incident: a header chip said Internal-domain row present, the member name carried an Internal domain warning label, and the row received an amber warning tint.

After

The row keeps the same member data and same internal-domain predicate, but only renders a small amber/gold Staff pill next to the name. Header chip and row tint are gone.

Design reference

HR-19: no Claude Design URL was provided in this turn, so the version-controlled design/v1/ fallback was used with the local attached export at /Users/am/Downloads/PRAMAAN Firm Record.html. The attached Members tab shows only the Staff row badge for PRAMAAN staff rows.

Members panel before and after

Before: warning chip, warning label, and amber row tint.

Members panel before Story-2250 with internal-domain warning treatment

After: only the Staff badge remains on the PRAMAAN-domain row.

Members panel after Story-2250 with Staff badge on internal-domain row

Panel states

The Members panel still renders its loading, error, and empty states through the same component path.

Loading skeleton.

Members panel loading skeleton

Error alert with table frame preserved.

Members panel error state

Empty first-run table state.

Members panel empty state

Sibling tabs unchanged

The masthead and tab bar still render in Storybook, and the sibling Overview, Support access, and Billing tab bodies are outside this change.

Overview tab: masthead, tab bar, stats, timeline, and activity.

Firm detail Overview tab unchanged after Story-2250

Support access tab: roster, active grants, and grant history.

Firm detail Support access tab unchanged after Story-2250

Billing tab: subscription, provisioning, and danger zone.

Firm detail Billing tab unchanged after Story-2250

Implementation notes

  • FirmMembersRosterPanel keeps using the generated members hook and DataTable.
  • The internal-domain predicate still calls isEmailOnInternalDomains with DEFAULT_INTERNAL_EMAIL_DOMAINS.
  • The Staff marker uses the existing StatusBadge with the amber tone and the existing text-[11px] size path.
  • No backend contracts, generated files, codegen, or tab switcher files changed.
  • pramaan-docs ADR-124 note: this is presentational rendering of already-fetched data. It adds no route, handler, mutation workflow, external call, queue, job, or state-changing boundary requiring a new manual span.

Verification