---
id: ATS-PFM-CSH-010
scope: CAP-PFM-CSH-010
product_area: platform
module: console-shell
revision: 2
status: proposed
approved_by: null
approved_at: null
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
scenarios:
  - id: ATS-PFM-CSH-010-01
    title: Workspace entry waits for the requested context
    level: browser
    proves:
      - BR-CAP-PFM-CSH-010-01
    preconditions: The person can reach two workspaces.
    steps: Open a page in the second workspace while the first context is established.
    expected: >-
      Loading precedes the second workspace page; the first workspace page is not rendered as that
      destination.
    negative: false
    data_needs: Two mock workspaces and a delayed answer.
    bound_to: []
    provenance: proposed
    source: 'react-console:components/console/tenant-id-gate.tsx:TenantIdGate'
  - id: ATS-PFM-CSH-010-02
    title: Unknown workspace identity produces not found
    level: browser
    proves:
      - BR-CAP-PFM-CSH-010-02
      - AS-JNY-PFM-CSH-003-03
    preconditions: The requested workspace identity is absent.
    steps: Open a destination in that workspace.
    expected: The workspace gate presents not found.
    negative: true
    data_needs: Unknown identities in mock and development contexts.
    bound_to:
      - 'react-console:e2e/mock/url-architecture.mock.spec.ts#an id no tenant has shows not found'
      - 'react-console:e2e/dev/url-architecture.dev.spec.ts#an id no tenant has shows not found'
    provenance: test
    source: 'react-console:e2e/mock/url-architecture.mock.spec.ts#an id no tenant has shows not found'
  - id: ATS-PFM-CSH-010-03
    title: Refused entry chooses a valid return context
    level: unit
    proves:
      - BR-CAP-PFM-CSH-010-03
      - BR-CAP-PFM-CSH-010-04
      - AS-JNY-PFM-CSH-004-02
    preconditions: >-
      Entry is refused with an established workspace, another reachable workspace or no reachable
      workspace.
    steps: Evaluate the refusal and return destination.
    expected: >-
      The refusal returns to the established workspace where possible, then a reachable alternative,
      otherwise offers no invalid workspace return.
    negative: true
    data_needs: Contexts covering the return choices.
    bound_to: []
    provenance: proposed
    source: 'react-console:components/console/tenant-id-gate.tsx:TenantIdGate, deniedReturnTenant'
  - id: ATS-PFM-CSH-010-04
    title: Out-of-service entry explains availability
    level: unit
    proves:
      - BR-CAP-PFM-CSH-010-05
    preconditions: A disabled workspace is requested by customer staff and Rhythm staff.
    steps: Render the gate for each session.
    expected: >-
      The explanation is unavailability; staff can return to HQ and customer staff can use a
      reachable alternative.
    negative: true
    data_needs: Refused-entry contexts for both actor types.
    bound_to: []
    provenance: proposed
    source: 'react-console:components/console/tenant-id-gate.tsx:TenantIdGate'
  - id: ATS-PFM-CSH-010-05
    title: Fresh direct entry requests the named workspace first
    level: browser
    proves:
      - BR-CAP-PFM-CSH-010-09
    preconditions: The browser has a signed-in session.
    steps: Load a workspace destination and reload it.
    expected: The initial access request names the workspace and the working page waits for that answer.
    negative: false
    data_needs: A development account and observed request log.
    bound_to: []
    provenance: proposed
    source: 'react-console:lib/security-context/provider.tsx:openTenantId'
evidence:
  - >-
    react-console at baf6dae: components/console/tenant-id-gate.tsx,
    components/console/__tests__/tenant-id-gate.test.tsx,
    lib/security-context/{tenant-id,left-tenant,boot}.ts, docs/url-architecture.md §2.2, §6, §11,
    e2e/mock/url-architecture.mock.spec.ts, e2e/dev/{url-architecture,initialisation}.dev.spec.ts.
  - >-
    services-platform at ad3f6a6: modules/security/aws/api/access.routes.ts (getMySecurityContext
    with tenant_id and preferred_tenant_id, getMySecurityContextInTenant; MOD-PFM-SEC).
---

# Enter the workspace named by a link — acceptance

## Coverage

The table separates scenarios with test bindings from proposed proof. A binding records a static examination of the test; it does not record a passing product test run.

| Rule | Acceptance scenario |
|---|---|
| `BR-CAP-PFM-CSH-010-01` | `ATS-PFM-CSH-010-01` (proposed) |
| `BR-CAP-PFM-CSH-010-02` | `ATS-PFM-CSH-010-02` (bound) |
| `BR-CAP-PFM-CSH-010-03` | `ATS-PFM-CSH-010-03` (proposed) |
| `BR-CAP-PFM-CSH-010-04` | `ATS-PFM-CSH-010-03` (proposed) |
| `BR-CAP-PFM-CSH-010-05` | `ATS-PFM-CSH-010-04` (proposed) |
| `BR-CAP-PFM-CSH-010-08` | no scenario: `FND-PFM-CSH-021` |
| `BR-CAP-PFM-CSH-010-09` | `ATS-PFM-CSH-010-05` (proposed) |
| `BR-CAP-PFM-CSH-010-10` | no scenario: `FND-PFM-CSH-021` |
