---
id: SCI-CRM-ENT-005
title: Organizations list
design: SCR-CRM-ENT-005
prompt: 'none: built by hand before the prompt kind existed'
product_area: crm
module: entities
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
implementation_state: implemented
conformance: not-verified
source_sha:
  rhythm-v2-docs: 7deec3d3d1bfde6660cc7ff1be66184644f0dfcb
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
route:
  pattern: '/console/{tenantId}/crm/organizations'
  parameters:
    - 'tenantId: workspace identity from the console shell'
  registration: >-
    react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
    react-console:lib/routes/definitions.ts (crm.organizations)
  parent_layout: Console workspace shell; Page content uses its existing responsive console padding.
  navigation: >-
    The CRM navigation opens the list; record links and recent results open the record where
    applicable.
  guards:
    - 'RequirePermission checks permissions.crm.organizations.view, mapped to crm.organizations.read'
    - 'useGrantedKeys evaluates create, edit, export and bulk actions'
  deep_links:
    - Registered list addresses can be opened directly
source:
  repository: react-console
  files:
    - 'app/(console)/console/[tenantId]/crm/organizations/page.tsx'
    - components/console/organizations/organizations-explorer.tsx
    - components/console/organizations/organizations-definition.tsx
    - components/console/organizations/organizations-actions.tsx
    - components/record-explorer/recipe-explorer.tsx
    - lib/routes/definitions.ts
  entry_component: OrganizationsExplorer
  modules:
    - lib/authz evaluated grants
    - lib/routes registered navigation
    - lib/record-explorer recipe/query composition
  pull_requests: []
  commits:
    - baf6dae382d6f41dce976c7f848667ccc37e076f
components: []
data:
  reads:
    - describe and execute the crm.organizations.with-types recipe
    - listOrganizationTypes resolves named Chapter or Affiliate Ask filters
    - read recently viewed and saved-view context through the explorer
  writes:
    - none to the organization aggregate; selection jobs and query exports are delegated
  binding: >-
    Recipe metadata determines field names and linked records. Named organization-type phrases
    resolve against this workspace’s type catalogue before they become record filters; an unresolved
    name prevents an invented partial answer.
  server_state: >-
    Query answers, recipe metadata, saved views and recent visits come through the shared explorer.
    Organization types are read when named Ask filters need resolving.
  local_state: >-
    The explorer owns search, filter, page, sort, columns, view and selection state. The
    organization-specific interpreter contributes a filter result rather than holding another record
    list.
  errors: >-
    Missing named types and unsupported Ask data have explanatory unavailable results. Query and
    recipe failures retain the shared explorer request-error experience.
  loading: RecordExplorerFallback covers page suspension; query loading belongs to RecipeExplorer.
  cache_invalidation: Query controls request fresh pages; there is no organization mutation on this page to reconcile.
  persistence: >-
    Platform owns saved-view and recent-visit persistence. The list keeps no unsaved organization
    draft.
actions:
  - design_label: Create Organization
    operation_id: createOrganization (through SCR-CRM-ENT-006)
    as_built: >-
      The permission-filtered primary action navigates to the type chooser; it does not create a
      record on the list.
    provenance: observed
    source: >-
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx
  - design_label: Bulk Actions on a selection
    operation_id: submitOrganizationDataJob (owned by MOD-CRM-DJB)
    as_built: >-
      The selection bar opens the shared data-job action flow with the selected record scope.
      Confirmation, dispatch and job progress belong to Data Jobs.
    provenance: observed
    source: >-
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx
  - design_label: Export
    operation_id: startQueryExport (Platform Queries)
    as_built: >-
      The export action opens the shared query-delivery flow over the current query/selection;
      export availability follows the evaluated export alias.
    provenance: observed
    source: >-
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx
  - design_label: 'Choose view, search, filters, columns and page'
    operation_id: 'none: local interaction'
    as_built: >-
      Shared explorer controls change the view/query and request resulting pages; saved-view
      persistence stays with Platform.
    provenance: observed
    source: >-
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx
authorization:
  frontend_guards:
    - 'RequirePermission checks permissions.crm.organizations.view, mapped to crm.organizations.read'
    - 'useGrantedKeys evaluates create, edit, export and bulk actions'
  backend:
    - The recipe declares crm.organizations.read; query execution depends on crm.organizations.query
    - >-
      listOrganizationTypes requires crm.organization-types.read; job and export requests enforce
      their owning permissions
observability:
  logs: >-
    No dedicated screen logging is established in the listed components; shared request and service
    logging remains outside this screen’s telemetry claim.
  metrics: No screen-specific metric emission is established by the inspected source.
  events: >-
    Navigation and request state drive the screen. Record creation uses service-owned change
    capture; no separate screen domain-event emitter is established.
  errors: >-
    Missing named types and unsupported Ask data have explanatory unavailable results. Query and
    recipe failures retain the shared explorer request-error experience.
fidelity: []
verification:
  component_tests: []
  screen_acceptance:
    - TST-PLAYWRIGHT-CRM-ENT-775
    - TST-PLAYWRIGHT-CRM-ENT-784
  integration:
    - TST-E2E-CRM-ENT-786
    - TST-INTEGRATION-CRM-ENT-789
  feature_acceptance:
    - FAS-CRM-ENT-02
  accessibility: >-
    not-verified; observed labels, focus helpers and semantic controls do not establish a complete
    keyboard/screen-reader audit (FND-CRM-ENT-079)
  deployment: >-
    No deployment of the pinned commit is verified by this authoring job; documented captures are
    fixtures and the live suites retain not-run.
evidence:
  - 'react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx'
  - 'react-console:components/console/organizations/organizations-explorer.tsx'
  - 'react-console:components/console/organizations/organizations-definition.tsx'
  - 'react-console:components/console/organizations/organizations-actions.tsx'
  - 'react-console:components/record-explorer/recipe-explorer.tsx'
  - 'react-console:lib/routes/definitions.ts'
  - 'services-crm:modules/entities/aws/api/organizations.routes.ts'
  - FND-CRM-ENT-142
  - 'rhythm-v2-docs:specs/crm/AUTHORIZATION.md'
  - 'rhythm-v2-docs:specs/crm/entities/design/screens/SCR-CRM-ENT-005-organizations-list.md'
narrative_sources:
  - section: What Was Built
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Routing
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Source
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Components
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Data Integration
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Actions as Implemented
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Authorization
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Observability
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Design Fidelity
    provenance: observed
    source: >-
      react-console:app/(console)/console/[tenantId]/crm/organizations/page.tsx;
      react-console:components/console/organizations/organizations-explorer.tsx;
      react-console:components/console/organizations/organizations-definition.tsx;
      react-console:components/console/organizations/organizations-actions.tsx;
      react-console:components/record-explorer/recipe-explorer.tsx;
      react-console:lib/routes/definitions.ts
  - section: Verification
    provenance: test
    source: TST-PLAYWRIGHT-CRM-ENT-775; TST-PLAYWRIGHT-CRM-ENT-784; TST-E2E-CRM-ENT-786; TST-INTEGRATION-CRM-ENT-789
  - section: Design Fidelity
    provenance: documented
    source: FND-CRM-ENT-145
    note: >-
      The missing design fields and Screen Acceptance Specification are documented gaps; matching an
      observed action does not approve its product intent.
screenshots:
  - state: list desktop
    viewport: 1440 × 1000 pixels (image dimensions; the browser viewport)
    path: SCI-CRM-ENT-005/list-desktop.png
    sha256: 18464a3c9ddeb2e0b81a8b5fe3e43fe0dae77b7312b85bea3bc5a30471ec818c
    captured_at: '2026-10-23T16:04:43-04:00'
    captured_from: >-
      react-console at e87bab22d40650aaea83aea728f465e36d61c933, mock mode (`node scripts/dev.mjs`, MSW fixtures, workspace pnwcul.org),
      captured with Playwright at 1440 × 1000 on 2026-10-23; a documented fixture capture, not a verified live screen
---

# Organizations list

## What Was Built

Organizations list presents saved organizations through the shared recipe explorer, including their type, parent context and business status. Recently Viewed is its listed built-in view. Supported Ask phrases become filters; a phrase requiring membership, account owner or subscription information produces an explicit unavailable answer. New Organization opens the type-first creation route.

## Routing

The registered CRM list page renders the explorer inside PageLayout and Suspense. Its domain wrapper applies read permission before displaying RecipeExplorer. The list’s create action leads to a separate static new route; record cells open the registered record view. Navigation and breadcrumbs use the shared route registry.

## Source

OrganizationsExplorer owns the coordination described here. The source manifest identifies its page, presentation collaborators and request adapters at the pinned console commit. Service route evidence identifies the authoritative operation names and permission declarations. No pull-request attribution or earlier implementation date is inferred from the current checkout.

## Components

RecipeExplorer renders the table and query controls. OrganizationNameCell and OrganizationStatusCell supply domain presentation, while the joined parent supplies its own record link. NewOrganizationAction opens creation. ExplorerDataJobActions and query export operate on the selected result through their separate modules; no Entities collection editor appears on the list.

## Data Integration

Recipe metadata determines field names and linked records. Named organization-type phrases resolve against this workspace’s type catalogue before they become record filters; an unresolved name prevents an invented partial answer.

Query answers, recipe metadata, saved views and recent visits come through the shared explorer. Organization types are read when named Ask filters need resolving. The explorer owns search, filter, page, sort, columns, view and selection state. The organization-specific interpreter contributes a filter result rather than holding another record list.

RecordExplorerFallback covers page suspension; query loading belongs to RecipeExplorer. Missing named types and unsupported Ask data have explanatory unavailable results. Query and recipe failures retain the shared explorer request-error experience.

Query controls request fresh pages; there is no organization mutation on this page to reconcile. Platform owns saved-view and recent-visit persistence. The list keeps no unsaved organization draft.

## Actions as Implemented

The inventory below follows every action of the protected design. These designs have no permanent action ids; the exact design label identifies each comparison until the design retrofit allocates them. Draft interactions are distinguished from requests that persist a record.

| Design action | Operation or boundary | Built behavior | Provenance | Source |
|---|---|---|---|---|
| Create Organization | createOrganization (through SCR-CRM-ENT-006) | The permission-filtered primary action navigates to the type chooser; it does not create a record on the list. | observed | react-console:components/console/organizations/organizations-explorer.tsx; react-console:components/console/organizations/organizations-definition.tsx |
| Bulk Actions on a selection | submitOrganizationDataJob (owned by MOD-CRM-DJB) | The selection bar opens the shared data-job action flow with the selected record scope. Confirmation, dispatch and job progress belong to Data Jobs. | observed | react-console:components/console/organizations/organizations-explorer.tsx; react-console:components/console/organizations/organizations-definition.tsx |
| Export | startQueryExport (Platform Queries) | The export action opens the shared query-delivery flow over the current query/selection; export availability follows the evaluated export alias. | observed | react-console:components/console/organizations/organizations-explorer.tsx; react-console:components/console/organizations/organizations-definition.tsx |
| Choose view, search, filters, columns and page | none: local interaction | Shared explorer controls change the view/query and request resulting pages; saved-view persistence stays with Platform. | observed | react-console:components/console/organizations/organizations-explorer.tsx; react-console:components/console/organizations/organizations-definition.tsx |

## Authorization

RequirePermission checks permissions.crm.organizations.view, mapped to crm.organizations.read. useGrantedKeys evaluates create, edit, export and bulk actions. The recipe declares crm.organizations.read; query execution depends on crm.organizations.query. listOrganizationTypes requires crm.organization-types.read; job and export requests enforce their owning permissions.

The authorization inventory in frontmatter records the actual service requirements. Browser filtering is presentation; the service is authoritative for scope, version and record restrictions. Nothing in this source review makes a business role an authorization role or certifies shell identity and application access beyond the recorded dependency.

## Observability

Navigation and request state drive the screen. Record creation uses service-owned change capture; no separate screen domain-event emitter is established. No dedicated screen logging is established in the listed components; shared request and service logging remains outside this screen’s telemetry claim. No screen-specific metric emission is established by the inspected source.

Missing named types and unsupported Ask data have explanatory unavailable results. Query and recipe failures retain the shared explorer request-error experience. These visible failure surfaces are evidence of feedback, not evidence that every request reached a deployed service or every wider audit integration completed.

## Design Fidelity

The inspected action and state inventory has no additional implementation departure established by this pass. Unavailable fields and inert actions already identified by the design remain explicitly unavailable; describing them does not turn them into completed features.

All twelve designs still require their standard retrofit: feature, user goals, scope, navigation, layout mode, dependency list, field details, action ids, registered components, acceptance criteria and open questions are incomplete. A Screen Acceptance Specification is also absent for this screen. The implementation preserves those gaps as findings and does not manufacture acceptance ids or change the protected design.

## Verification

Organization acceptance supplies adjacent record creation and discovery assertions; deployed console checks supplement record links and presentation. Neither establishes every saved-view, export or bulk lifecycle on this list.

The frontmatter names the relevant existing registers and feature suite; none is reported as executed here. API and aggregate integration prove their declared service boundaries, not assembled-screen accessibility. No dedicated registered component-test group or complete screen acceptance document exists for this screen. Accessibility and deployment remain not-verified.

A development-console capture is owed for this screen; the dedicated missing-capture finding records the obligation. No image is generated or substituted.
