---
id: JNY-PFM-CSH-004
title: Move record work into another workspace
feature: FEAT-PFM-CSH-03
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
actor: ACT-PFM-001
goal: >-
  Inspect the corresponding list in a sandbox without carrying the original workspace’s record into
  it.
capabilities:
  - CAP-PFM-CSH-011
  - CAP-PFM-CSH-010
  - CAP-PFM-CSH-014
  - CAP-PFM-CSH-004
screens:
  - '/console/{tenantId}/crm/contacts/{contactId}'
  - '/console/{otherTenantId}/crm/contacts'
steps:
  - 'n': 1
    surface: '/console/{tenantId}/crm/contacts/{contactId}'
    action: Opens the workspace selector while viewing a contact.
    capability: CAP-PFM-CSH-011
    expected: The selector shows the current workspace and reachable alternatives.
    provenance: observed
    source: 'react-console:components/console/tenant-switcher.tsx:TenantSwitcher'
  - 'n': 2
    surface: '/console/{otherTenantId}/crm/contacts'
    action: Selects the sandbox.
    capability: CAP-PFM-CSH-011
    expected: >-
      The destination becomes the sandbox contacts list; an immediate confirmation appears before
      access is established.
    provenance: observed
    source: 'react-console:components/console/tenant-switcher.tsx:choose'
  - 'n': 3
    surface: getMySecurityContext
    action: Waits for the sandbox access answer.
    capability: CAP-PFM-CSH-010
    expected: The sandbox working page appears only after its context is established.
    provenance: documented
    source: 'react-console:docs/url-architecture.md#6. Tenant from the URL'
  - 'n': 4
    surface: '/console/{otherTenantId}/crm/contacts'
    action: Inspects the sandbox navigation.
    capability: CAP-PFM-CSH-014
    expected: The menu reflects the sandbox application answer and the person’s authority there.
    provenance: observed
    source: >-
      react-console:lib/security-context/provider.tsx:openTenantId;
      lib/security-context/entitlements.ts:entitlementsFromSecurityContext
  - 'n': 5
    surface: /
    action: Starts a later customer session at Rhythm’s starting address.
    capability: CAP-PFM-CSH-004
    expected: The sandbox home is selected because the successful entry was remembered.
    provenance: observed
    source: >-
      react-console:lib/security-context/provider.tsx:openTenantId;
      lib/auth/session.ts:rememberTenantFor
alternates:
  - from_step: 2
    condition: The current destination is a planned screen.
    path: The equivalent planned destination is requested in the sandbox.
    outcome: The workspace changes while the planned destination is retained.
    provenance: observed
    source: 'react-console:lib/routes/match.ts:switchTenantPath'
failures:
  - from_step: 3
    condition: The selected sandbox has been removed from service.
    path: Entry explains its unavailability and offers another working context.
    outcome: The sandbox working page does not open.
    provenance: observed
    source: 'react-console:components/console/tenant-id-gate.tsx:TenantIdGate, deniedReturnTenant'
  - from_step: 3
    condition: The person has lost access to the sandbox.
    path: Entry explains the refusal and offers the still-established workspace.
    outcome: The person can return to production.
    provenance: observed
    source: 'react-console:components/console/tenant-id-gate.tsx:TenantIdGate, deniedReturnTenant'
rules_in_play:
  - BR-CAP-PFM-CSH-011-01
  - BR-CAP-PFM-CSH-011-02
  - BR-CAP-PFM-CSH-011-07
  - BR-CAP-PFM-CSH-010-01
  - BR-CAP-PFM-CSH-010-04
  - BR-CAP-PFM-CSH-010-05
  - BR-CAP-PFM-CSH-014-01
  - BR-CAP-PFM-CSH-004-04
assertions:
  - id: AS-JNY-PFM-CSH-004-01
    statement: Switching from a record requests the corresponding list in the destination workspace.
    provenance: test
    source: >-
      react-console:e2e/mock/url-architecture.mock.spec.ts#switching tenant opens the same list
      under the other tenant's id, record ids dropped
  - id: AS-JNY-PFM-CSH-004-02
    statement: A refused switch uses the established workspace as its return context.
    provenance: observed
    source: 'react-console:components/console/tenant-id-gate.tsx:deniedReturnTenant'
  - id: AS-JNY-PFM-CSH-004-03
    statement: A successful customer workspace entry becomes the remembered starting context.
    provenance: observed
    source: >-
      react-console:lib/security-context/provider.tsx:openTenantId;
      lib/auth/session.ts:rememberTenantFor
e2e_policy: required
e2e_reason: >-
  The existing mock browser test proves the record-to-list switch. Browser coverage is still needed
  for cache clearing, fresh authority and refused-transition recovery across the whole journey.
evidence:
  - >-
    react-console at baf6dae: components/console/{tenant-switcher,tenant-id-gate}.tsx,
    lib/routes/match.ts, components/console/__tests__/tenant-id-gate.test.tsx,
    e2e/mock/url-architecture.mock.spec.ts, docs/url-architecture.md §6.
  - >-
    services-platform at ad3f6a6: modules/security/aws/api/access.routes.ts
    (getMySecurityContextInTenant; MOD-PFM-SEC).
---

# Move record work into another workspace

## Story

Alex views a contact in production and selects the sandbox. The destination is the sandbox contacts list, without the production record identity. Once access is established, the menu represents sandbox work. A later customer session starts at the sandbox home because that entry was remembered.
