---
id: SCR-PFM-CSH-003
title: Main navigation menu
route: (the side menu of every console page outside a settings area)
surface: console
product_area: platform
module: console-shell
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
purpose: The main menu helps people locate work available in their current context.
supports:
  - JNY-PFM-CSH-001
  - JNY-PFM-CSH-003
  - JNY-PFM-CSH-005
  - CAP-PFM-CSH-006
  - CAP-PFM-CSH-008
  - CAP-PFM-CSH-013
  - CAP-PFM-CSH-014
  - CAP-PFM-CSH-016
permission: >-
  none: shell mode selects HQ links; workspace entries use their own or section
  permissions
entry_from:
  - Console frame
exits_to:
  - Any destination the menu lists
  - Settings area menu (through the user menu)
inference: []
displays:
  - field: >-
      Application sections in pinned order, with planned Accounting adjacency
      still unimplemented
    source: >-
      DOM-PFM-CSH-002 application sections, filtered by DOM-PFM-CSH-004 opened
      for the person
  - field: 'Shared task, query, report and website links'
    source: DOM-PFM-CSH-002 tools and application links
  - field: Customer placements and custom apps
    source: getCustomObjectsNavigation (fallback listCustomObjects and listCustomApps)
  - field: Staff HQ destinations
    source: DOM-PFM-CSH-002 Rhythm HQ links
  - field: Highlighted destination and section
    source: 'DOM-PFM-CSH-002 active place, from DOM-PFM-CSH-003'
  - field: Filter input and empty-match explanation
    source: DOM-PFM-CSH-002 filter text
actions:
  - label: Open a section
    operation_id: 'none: console only'
    permission: console.access
    confirm: false
  - label: Choose an entry
    operation_id: 'none: console navigation'
    permission: the entry's permission
    confirm: false
  - label: Filter the menu (Escape or Clear resets it)
    operation_id: 'none: console only'
    permission: console.access
    confirm: false
  - label: Choose a section on the collapsed rail
    operation_id: 'none: console only'
    permission: console.access
    confirm: false
states:
  - expanded
  - desktop icon rail
  - filtering
  - no matching destination
  - initial placements pending
  - staff HQ mode
validation:
  - BR-CAP-PFM-CSH-006-01
  - BR-CAP-PFM-CSH-006-02
  - BR-CAP-PFM-CSH-006-03
  - BR-CAP-PFM-CSH-006-04
  - BR-CAP-PFM-CSH-006-05
  - BR-CAP-PFM-CSH-006-06
  - BR-CAP-PFM-CSH-006-07
  - BR-CAP-PFM-CSH-006-08
  - BR-CAP-PFM-CSH-006-09
  - BR-CAP-PFM-CSH-006-10
  - BR-CAP-PFM-CSH-006-11
  - BR-CAP-PFM-CSH-006-13
  - BR-CAP-PFM-CSH-008-01
  - BR-CAP-PFM-CSH-008-02
  - BR-CAP-PFM-CSH-008-03
  - BR-CAP-PFM-CSH-008-05
  - BR-CAP-PFM-CSH-008-07
  - BR-CAP-PFM-CSH-013-02
  - BR-CAP-PFM-CSH-013-03
  - BR-CAP-PFM-CSH-014-01
patterns:
  - Design-system Sidebar (collapsible icon rail)
  - One-open accordion sections
  - Sidebar filter with highlighted match
component: >-
  components/console/app-sidebar.tsx (MainNavigation, NavSectionItem,
  SidebarFilter); components/console/nav-config.ts
evidence:
  - >-
    react-console at baf6dae:
    components/console/{app-sidebar.tsx,nav-config.ts};
    lib/console/{domains.ts,use-visible-nav.ts};
    lib/custom-objects/use-custom-navigation.ts.
  - 'rhythm-v2-docs:specs/platform/console-shell/FINDINGS.md:FND-PFM-CSH-042'
controls: [TC-AVL-001, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, 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-003, TC-IAM-004, TC-IAM-005, 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-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---
# Main navigation menu

## What the Screen Is For

The main menu helps people locate work available in their current context. Workspace mode combines application destinations, customer placements and tools; staff HQ mode presents HQ links.

## What It Shows and Lets People Do

Application sections follow the pinned registry order. Accounting currently follows Marketing; the planning delta requires it after CRM. Placements follow built-in entries or create custom-app sections. The filter ignores case, opens matching sections and highlights matching text. Without a filter, one section is open. Choosing a collapsed section expands the sidebar.

## States and Errors

The sidebar supports expanded, collapsed, filtered and no-match presentations. Placement reads do not delay built-in entries. Initial placement failure adds nothing; cached placements can remain after revalidation fails. Updated application entitlements recompute visible sections.

## Patterns It Must Respect

The built sidebar and its icon rail define the component pattern. Workspace entries use application and permission filtering. HQ mode renders its link list directly, with destination guards responsible for each page.
