---
id: CAP-PFM-CSH-001
title: Use a consistent console frame
feature: FEAT-PFM-CSH-01
product_area: platform
module: console-shell
revision: 2
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes: []
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
intent_sources: []
purpose: Staff recognize their workspace and reach shared tools from a common frame around console pages.
outcomes:
  - Identity and workspace context accompany everyday work.
  - Startup problems provide a clear explanation and recovery path.
concepts:
  - CON-PFM-CSH-001
actors:
  - ACT-PFM-001
  - ACT-PFM-002
  - ACT-PFM-004
  - ACT-PFM-005
surfaces:
  - console
preconditions: []
postconditions: []
permissions:
  - key: platform.security-self.read
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-PFM-CSH-001-01
    statement: >-
      The header orders the Rhythm logo, menu toggle, workspace switcher or Rhythm HQ label, Quick
      Search, working business unit and currency, Recent Items, alerts and Ask Jazz AI.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: observed
    source: 'react-console:components/console/site-header.tsx:SiteHeader'
    origin: none
  - id: BR-CAP-PFM-CSH-001-02
    statement: >-
      Ask Jazz AI disappears on the dedicated assistant page and indicates its pressed state while
      the assistant panel is open.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: observed
    source: 'react-console:components/console/site-header.tsx:SiteHeader'
    origin: none
  - id: BR-CAP-PFM-CSH-001-03
    statement: >-
      Before the security context answers, startup occupies the full page without a header,
      navigation or workspace name.
    kind: invariant
    enforced_at:
      - console
    must_prove: true
    provenance: test
    source: >-
      react-console:e2e/dev/initialisation.dev.spec.ts#asks the Platform exactly one thing first,
      and shows nothing until it is answered
    origin: none
  - id: BR-CAP-PFM-CSH-001-04
    statement: >-
      No access identifies the signed-in address and offers sign-out, a load failure offers retry
      and sign-out, and missing configuration displays setup guidance and the missing settings.
    kind: policy
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:components/console/console-boot-screens.tsx:consoleBootScreens'
    origin: none
  - id: BR-CAP-PFM-CSH-001-05
    statement: >-
      An unexpected starting workspace is explained by a notice above the console that remains until
      dismissed.
    kind: lifecycle
    enforced_at:
      - console
    must_prove: true
    provenance: test
    source: >-
      react-console:e2e/controlled/tenant-unavailable.controlled.spec.ts#falls back to the default
      tenant, with a word of explanation, rather than refusing access
    origin: none
  - id: BR-CAP-PFM-CSH-001-06
    statement: Confirmation toasts sit at the lower right with clearance above an editor’s fixed action bar.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: observed
    source: 'react-console:components/console/console-shell.tsx:ConsoleShell'
    origin: none
  - id: BR-CAP-PFM-CSH-001-07
    statement: >-
      The sample-money helper uses five fixed currency choices and rates, rounds converted US-dollar
      base values to cents and formats them separately from the header’s working currency.
    kind: calculation
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:components/console/console-provider.tsx:useMoney'
    origin: none
    note: The linked finding records the evidence limitation or implementation gap.
  - id: BR-CAP-PFM-CSH-001-08
    statement: >-
      The frame hosts search, recent work, alerts, working context, the assistant and staff-access
      information, with each hosted function governed by its owning module.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: inferred
    source: 'react-console:components/console/console-shell.tsx:ConsoleShell; app/(console)/layout.tsx'
    origin: none
    note: >-
      The shell mounts these hosted functions without owning their decision logic; ownership follows
      the module boundary.
scenarios:
  - id: SC-CAP-PFM-CSH-001-01
    given: The remembered workspace is no longer operational.
    when: The person loads the console.
    then: The default workspace opens with a dismissible explanation.
    provenance: test
    source: >-
      react-console:e2e/controlled/tenant-unavailable.controlled.spec.ts#falls back to the default
      tenant, with a word of explanation, rather than refusing access
  - id: SC-CAP-PFM-CSH-001-02
    given: Platform fails to provide the person’s access context.
    when: The console initializes.
    then: The failure screen provides retry and sign-out without a working frame.
    provenance: observed
    source: 'react-console:components/console/console-boot-screens.tsx:consoleBootScreens'
edge_cases: []
constraints: []
depends_on: []
related:
  - CAP-PFM-CSH-006
  - CAP-PFM-CSH-011
  - CAP-PFM-CSH-013
journeys:
  - JNY-PFM-CSH-001
open_questions:
  - OQ-PFM-CSH-002
evidence:
  - >-
    react-console at baf6dae: app/(console)/layout.tsx,
    components/console/{console-shell,site-header,console-boot-screens,console-provider}.tsx,
    lib/auth/messages.ts, docs/migration/02-information-architecture.md §1.
  - >-
    services-platform at ad3f6a6: modules/security/aws/api/access.routes.ts (getMySecurityContext,
    getMySecurityContextInTenant: the answer the frame waits for; MOD-PFM-SEC).
controls: [TC-AVL-001, TC-AVL-004, 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-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-005, TC-MON-001, TC-MON-002, TC-MON-003, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---
# Use a consistent console frame

## Purpose

Staff recognize their workspace and reach shared tools from a common frame around console pages.

## How It Works

A person opens a console page and waits for their access context. Startup screens explain problems before any working page is mounted. Once access is known, the shared frame gives the page a recognizable setting. A notice makes an unexpected workspace choice visible during subsequent work. Hosted tools supply their own behavior within that setting. The product should retire the sample currency helper when the sample dashboard is replaced.

## Relationships

- Security supplies the identity and access context required at startup.
- Navigation and workspace entry determine the menu and workspace shown in the frame.
- Queries, Operations, Notifications, Accounting and the AI teammate supply the hosted tools.
