---
id: SCR-PFM-NOT-001
title: Notifications inbox
route: /console/{tenantId}/notifications
surface: console
product_area: platform
module: notifications
revision: 1
status: draft
design_intent: confirmed
origin: 'PLAT-M23 plan approved 2026-10-21 18:05 ET (the Notifications page: inbox, newest first, read
  and unread, archive, why did I get this, a link that opens the relevant thing; send me a test); D2 every
  built-in console role, services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#2. Scope'
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
purpose: Help staff read their notices, open the relevant work and organize their personal inbox.
supports:
- JNY-PFM-NOT-001
- JNY-PFM-NOT-002
- JNY-PFM-NOT-005
- CAP-PFM-NOT-009
- CAP-PFM-NOT-004
- CAP-PFM-NOT-005
- CAP-PFM-NOT-006
permission: platform.notifications.use
entry_from:
- Notifications in the personal menu
- The planned header shortcut to the full inbox
- A direct inbox address with view or category selection
exits_to:
- The linked workspace record in the current tab
- An external secure destination in another tab
- SCR-PFM-NOT-002
displays:
- field: Newest notices under day headings
  source: listMyNotifications (DOM-PFM-NOT-003 notice content, created instant)
- field: Notice title and body, emphasis for unread items, severity, record label and relative age
  source: listMyNotifications
- field: Muted notices with a label when they no longer apply
  source: DOM-PFM-NOT-003 notice status
- field: The count of additional folded occurrences
  source: DOM-PFM-NOT-003 collapsed count
- field: Organization-wide or named-resource responsibility scope
  source: listMyNotifications data scope, resource named by the console
- field: The unread total next to the unread view
  source: getMyNotificationSummary
actions:
- label: Open the notice and its destination
  operation_id: markMyNotificationRead
  permission: platform.notifications.use
  confirm: false
- label: Mark as read
  operation_id: markMyNotificationRead
  permission: platform.notifications.use
  confirm: false
- label: Mark as unread
  operation_id: markMyNotificationUnread
  permission: platform.notifications.use
  confirm: false
- label: Move to archive
  operation_id: archiveMyNotification
  permission: platform.notifications.use
  confirm: false
- label: Restore from archive
  operation_id: unarchiveMyNotification
  permission: platform.notifications.use
  confirm: false
- label: Explain why this notice arrived
  operation_id: getMyNotification (through SCR-PFM-NOT-002)
  permission: platform.notifications.use
  confirm: false
- label: Mark the selected inbox read
  operation_id: markAllMyNotificationsRead
  permission: platform.notifications.use
  confirm: false
- label: Request a personal test notice
  operation_id: sendMyTestNotification
  permission: platform.notifications.use
  confirm: false
- label: Fetch another page
  operation_id: listMyNotifications
  permission: platform.notifications.use
  confirm: false
states:
- loading
- empty
- error
- inactive
validation:
- BR-CAP-PFM-NOT-009-02
- BR-CAP-PFM-NOT-009-03
- BR-CAP-PFM-NOT-009-04
- BR-CAP-PFM-NOT-009-05
- BR-CAP-PFM-NOT-009-06
- BR-CAP-PFM-NOT-009-07
- BR-CAP-PFM-NOT-009-08
- BR-CAP-PFM-NOT-009-10
- BR-CAP-PFM-NOT-004-07
- BR-CAP-PFM-NOT-006-02
patterns:
- PageLayout with a full-width PageHeader
- Tabs retain inbox-view selection in the address
- FilterSelect chooses notification category
- DropdownMenu supplies row actions
- Badge presents severity and applicability
- EmptyState and LoadingIndicatorPanel cover absent or pending content; Alert offers retry
- Toast reports mutation results
- RequirePermission protects page entry
component: components/notifications/notifications-screen.tsx (NotificationsScreen), notification-row.tsx,
  send-test-button.tsx
evidence:
- 'react-console at baf6dae3: app/(console)/console/[tenantId]/notifications/page.tsx; components/notifications/{notifications-screen,notification-row,send-test-button,notice-scope}.tsx;
  lib/notifications/{use-notifications,model}.ts; lib/api/notifications.ts; components/console/nav-config.ts.'
controls: [TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-002, TC-LOG-003, TC-LOG-005, TC-MON-001, TC-MON-002, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---
# Notifications inbox

## What the Screen Is For

Help staff read their notices, open the relevant work and organize their personal inbox.

## What It Shows and Lets People Do

Opening a destination also records reading. Personal actions act on the authenticated person’s notices. View and category changes select the list rather than changing stored notice content.

## States and Errors

Loading and failed reads are presented within the screen or sheet. Personal action results are reported where the implementation provides feedback; the underlying notice remains the source of its read and archive state.

## Patterns It Must Respect

PageLayout with a full-width PageHeader. Tabs retain inbox-view selection in the address. FilterSelect chooses notification category. DropdownMenu supplies row actions. Badge presents severity and applicability. EmptyState and LoadingIndicatorPanel cover absent or pending content; Alert offers retry. Toast reports mutation results. RequirePermission protects page entry.
