Skip to content

CAP-PFM-CSH-009Open console work through a durable address

Markdown

CAP-PFM-CSH-009

Open console work through a durable address

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
Bookmarks and shared links identify their workspace and page.Route construction and page placement share a maintained catalogue.
Surfaces
console
Intent sources
react-console:docs/url-architecture.md#1. Rules (decided by Andrew 2026-10-14; final acceptance 2026-10-15)react-console:docs/url-architecture.md#6. Tenant from the URL (decided by Andrew 2026-10-14; final acceptance 2026-10-15)

Controls

32 controls apply, from the corpus control catalogue.

TC-AVL-001 TC-AVL-004 TC-AVL-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-CRY-004 TC-DAT-001 TC-DAT-003 TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-LOG-002 TC-LOG-003 TC-LOG-005 TC-PI-001 TC-PI-002 TC-PI-004 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
console.accessconsoletenant
platform.security-self.readapitenant

Business Rules

10 rules, 7 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
Console work uses HQ or workspace console roots, while route guards separately allow authentication, previews, portals, public payments, print pages and temporary legacy entry points.
no proof recorded yet
invariantconsoletest
react-console:lib/routes/__tests__/guards.test.ts#places every page.tsx on a route node or an allowed page that is not a tenant's
02
Proposed
Workspace addresses place the product area before its resource and optional record, nest child records under parents and organize Configuration separately by module.
origin: react-console:docs/url-architecture.md#1. Rules, rules 2 and 4 (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
invariantconsoledocumented
03must prove
Proposed
Console-defined path words are lowercase or camelCase without hyphens or underscores, while data identifiers may include hyphens.
origin: react-console:docs/url-architecture.md#1. Rules, rule 3 (Andrew, 2026-10-14) (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
no proof recorded yet
validationconsoletest
react-console:lib/routes/__tests__/guards.test.ts#names every folder under app/ with a lowercase word or camelCase
04must prove
Proposed
Shared builders construct console links and source guards check literal paths and page inventory with declared non-console and redirect exceptions.
origin: react-console:docs/url-architecture.md#1. Rules, rule 6 (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
no proof recorded yet
invariantconsoletest
react-console:lib/routes/__tests__/guards.test.ts#finds no literal console path outside lib/routes
05must prove
Proposed
A Configuration module key cannot also name a cross-module Configuration area.
origin: react-console:docs/url-architecture.md#1. Rules, rule 4 (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
no proof recorded yet
validationconsoletest
react-console:lib/routes/__tests__/routes.test.ts#never shares a word between a configuration module and a cross-module area
06must prove
Proposed
Record links survive reload in their workspace, and browser history moves between console pages.
origin: react-console:docs/url-architecture.md#8. Tests (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
no proof recorded yet
invariantconsoletest
react-console:e2e/mock/url-architecture.mock.spec.ts#a record deep link survives a reload
07must prove
Proposed
Sign-in after a signed-out deep link returns to its requested page and query.
origin: react-console:docs/url-architecture.md#6. Tenant from the URL (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
no proof recorded yet
lifecycleconsoletest
react-console:e2e/dev/url-architecture.dev.spec.ts#a signed-out deep link goes through sign-in and comes back to the same page and query
08must prove
Proposed
A registered planned destination renders a named, permission- and application-guarded placeholder, while an unregistered destination returns not found.
origin: react-console:docs/url-architecture.md#3. Workspaces (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
no proof recorded yet
policyconsoleobserved
09
Proposed
Builders accept queries and legacy redirects retain them, while switching workspaces intentionally removes the query.
origin: react-console:docs/url-architecture.md#5. lib/routes (decided by Andrew 2026-10-14; final acceptance 2026-10-15)
invariantconsoleobserved
react-console:lib/routes/build.ts:queryString; lib/routes/legacy.ts:legacyTenantPath; lib/routes/match.ts:switchTenantPath
10
Proposed
Former Eligibility addresses permanently redirect to the corresponding Configuration rule screen within the same workspace.
lifecycleconsoletest

Scenarios

IdGivenWhenThenProvenance
01A permitted user reloads a contact bookmark.The page initializes again.The same workspace and contact remain selected.test
react-console:e2e/mock/url-architecture.mock.spec.ts#a record deep link survives a reload
02A shared console link is opened without a session.The person completes sign-in.The requested destination and query are preserved.test
react-console:e2e/dev/url-architecture.dev.spec.ts#a signed-out deep link goes through sign-in and comes back to the same page and query
03The typed address is neither a page nor a registered planned destination.The console resolves it.The destination is not found.observed

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.