---
id: SCR-PFM-SEC-029
title: HQ staff list
route: /hq/staff
surface: console
product_area: platform
module: security
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
purpose: Browse staff and perform the status-dependent invite, resend and lifecycle actions.
supports:
- CAP-PFM-SEC-016
permission: hq.staff.read
entry_from:
- /hq
exits_to:
- /hq/staff/{userId}
- /hq/staff/roles
displays:
- field: Staff identity, HQ role, membership state and authentication time, with search and role filtering.
  source: listHqStaff
  provenance: observed
actions:
- label: Invite staff
  operation_id: inviteHqStaff
  permission: hq.staff.invite
  confirm: false
  provenance: observed
  source: react-console:components/console/hq/staff/staff-list.tsx
- label: Resend
  operation_id: resendHqStaffInvitation
  permission: hq.staff.invite
  confirm: false
  provenance: observed
  source: react-console:components/console/hq/staff/staff-list.tsx
- label: Suspend
  operation_id: suspendHqStaff
  permission: hq.staff.update
  confirm: false
  api_permission: hq.staff.disable
  provenance: observed
  source: react-console:components/console/hq/staff/staff-list.tsx
- label: Reinstate
  operation_id: reinstateHqStaff
  permission: hq.staff.update
  confirm: false
  api_permission: hq.staff.disable
  provenance: observed
  source: react-console:components/console/hq/staff/staff-list.tsx
- label: Revoke
  operation_id: revokeHqStaff
  permission: hq.staff.disable
  confirm: true
  provenance: observed
  source: react-console:components/console/hq/staff/staff-list.tsx
states:
- loading
- empty
- error
validation:
- BR-CAP-PFM-SEC-016-02
- BR-CAP-PFM-SEC-016-03
- BR-CAP-PFM-SEC-016-06
patterns:
- StaffOnly
- PageLayout
- PageHeader
- InviteStaffDialog
- Revoke AlertDialog
component: components/console/hq/staff/staff-list.tsx (StaffList)
evidence:
- 'react-console at baf6dae: components/console/hq/staff/staff-list.tsx; the page route file; lib/security/api.ts,
  lib/hq/platform-ops.ts, lib/hq/platform.ts, lib/auth/*'
- react-console:lib/hq/permissions.ts:staffActionPermissions; services-platform:modules/security/aws/api/hq-staff.routes.ts
examined_at: '2026-10-23'
examiner: codex
controls: [TC-AVL-001, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-003, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-002, TC-MON-003, TC-PI-001, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# HQ staff list

## What the Screen Is For

Browse staff and perform the status-dependent invite, resend and lifecycle actions.

## What It Shows and Lets People Do

Staff reading admits the list. Invite/resend use invite authority; the console gates suspend/reinstate with staff-update authority while both APIs require staff-disable authority. That mismatch is a finding.

## States and Errors

Suspend and reinstate run immediately. Revocation uses a confirmation dialog and the disable key. Status controls which actions appear, and successful UI notices do not prove provider synchronization.

The state rows describe observed loading, empty, refusal or inactive handling where present. Linked validation rules belong to the planning layer; client feedback and authoritative service checks have distinct responsibilities.

## Patterns It Must Respect

The pattern list names the built shared components and interaction patterns checked for this screen. This contract describes the existing screen; it supplies no replacement visual design.
