Skip to content

CAP-PFM-CSH-011Continue in another workspace without reusing a record

Markdown

CAP-PFM-CSH-011

Continue in another workspace without reusing a record

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleConsole Shell and NavigationRevision2

Read atreact-console baf6dae3services-platform ad3f6a65

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Workspace choices come from the current reach list.The destination list belongs to the newly entered workspace.
Surfaces
console
Intent sources
react-console:docs/url-architecture.md#6. Tenant from the URL (decided by Andrew 2026-10-14; final acceptance 2026-10-15)

Controls

24 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-AZ-006 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-IAM-003 TC-LOG-001 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.security-self.readapitenant

Business Rules

8 rules, 6 to be proved before approval. A rule's product intent is derived from its origin: 0 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
The switcher uses only the reachable workspaces listed by the security context.
origin: react-console:docs/url-architecture.md#6. Tenant from the URL (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
permissionconsoleobserved
02must prove
Proposed
A workspace switch keeps the corresponding area and list, strips record identities and queries, and retains a planned page’s path.
origin: react-console:docs/url-architecture.md#6. Tenant from the URL (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
calculationconsoletest
react-console:lib/routes/__tests__/routes.test.ts#keeps the workspace and resource list and drops record ids and queries
03must prove
Proposed
Choosing the already selected workspace initiates no navigation.
validationconsoleobserved
04
Proposed
The switcher presents the current workspace and customer with copy controls for their identifiers.
policyconsoleobserved
05must prove
Proposed
Alternative workspace choices appear when more than one is reachable, and name-or-identifier search appears above six choices with an empty-result message.
calculationconsoleobserved
06
Proposed
Entry in progress disables choices and shows progress, but the switcher reports the chosen workspace immediately before its entry is confirmed.
lifecycleconsoleobserved
07must prove
Proposed
URL entry reads the destination context, clears cached data after a successful answer but before installing it, remounts workspace stores and keeps destination content gated while pending.
invariantconsoleobserved
08must prove
Proposed
Successful workspace entry is remembered per person for customer landing and legacy links, while bare-address staff landing still targets HQ.
no proof recorded yet
lifecycleconsoleobserved

Scenarios

IdGivenWhenThenProvenance
01The person is viewing a contact in the first workspace.They choose another workspace.Navigation targets the contacts list in the chosen workspace without the contact identifier.test
react-console:e2e/mock/url-architecture.mock.spec.ts#switching tenant opens the same list under the other tenant's id, record ids dropped
02The chosen destination cannot be reached anymore.Its gate refuses entry.The person receives a refusal with a route back to a reachable workspace.observed
react-console:components/console/tenant-id-gate.tsx:TenantIdGate, deniedReturnTenant

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.