---
id: ATS-PFM-CSH-012
scope: CAP-PFM-CSH-012
product_area: platform
module: console-shell
revision: 3
status: proposed
approved_by: null
approved_at: null
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  rhythm-v2-docs: 25e253cb434aac6603ee294e3ca197ab6c4bfd0b
scenarios:
  - id: ATS-PFM-CSH-012-01
    title: Older address examples preserve mapped values
    level: unit
    proves:
      - BR-CAP-PFM-CSH-012-01
      - BR-CAP-PFM-CSH-012-02
    preconditions: The compatibility table supplies examples with record values and queries.
    steps: Resolve the complete enumerated mapping fixtures.
    expected: >-
      Each mapped destination retains the values and query specified by its
      example.
    negative: false
    data_needs: Independent fixture inputs for the variants listed in this case.
    bound_to:
      - TST-PFM-CSH-028
    provenance: test
    source: 'react-console:lib/routes/__tests__/legacy.test.ts#${from} → ${to}'
    category: rule
    test_sources:
      - 'react-console:lib/routes/__tests__/legacy.test.ts#${from} → ${to}'
    action_evidence:
      provenance: test
      source: 'react-console:lib/routes/__tests__/legacy.test.ts#${from} → ${to}'
    assertion_evidence:
      provenance: test
      source: 'react-console:lib/routes/__tests__/legacy.test.ts#${from} → ${to}'
  - id: ATS-PFM-CSH-012-02
    title: An older record link uses the selected customer workspace
    level: browser
    proves:
      - BR-CAP-PFM-CSH-012-01
      - AS-JNY-PFM-CSH-003-04
    preconditions: The customer fixture remembers a reachable workspace.
    steps: Open a former contact address containing a query.
    expected: The current workspace address retains the contact identity and query.
    negative: false
    data_needs: >-
      An isolated browser context with the stated identity, workspace and
      response fixtures.
    bound_to:
      - TST-PFM-CSH-014
    provenance: test
    source: >-
      react-console:e2e/mock/url-architecture.mock.spec.ts#an old tenant-less
      URL lands on its canonical URL, id and query kept
    category: interaction
    test_sources:
      - >-
        react-console:e2e/mock/url-architecture.mock.spec.ts#an old tenant-less
        URL lands on its canonical URL, id and query kept
    action_evidence:
      provenance: test
      source: >-
        react-console:e2e/mock/url-architecture.mock.spec.ts#an old tenant-less
        URL lands on its canonical URL, id and query kept
    assertion_evidence:
      provenance: test
      source: >-
        react-console:e2e/mock/url-architecture.mock.spec.ts#an old tenant-less
        URL lands on its canonical URL, id and query kept
  - id: ATS-PFM-CSH-012-03
    title: Unmapped older addresses remain unknown
    level: browser
    proves:
      - BR-CAP-PFM-CSH-012-03
    preconditions: The input address has no compatibility-table entry.
    steps: Open that address through legacy entry.
    expected: The console presents its page-not-found explanation.
    negative: true
    data_needs: >-
      An isolated browser context with the stated identity, workspace and
      response fixtures.
    bound_to: []
    provenance: proposed
    source: 'react-console:components/console/legacy-redirect.tsx:LegacyRedirect'
    category: validation
    test_sources: []
    action_evidence:
      provenance: proposed
      source: 'react-console:components/console/legacy-redirect.tsx:LegacyRedirect'
    assertion_evidence:
      provenance: proposed
      source: 'react-console:components/console/legacy-redirect.tsx:LegacyRedirect'
  - id: ATS-PFM-CSH-012-04
    title: Staff compatibility depends on retained clearance
    level: browser
    proves:
      - BR-CAP-PFM-CSH-012-04
      - BR-CAP-PFM-CSH-012-07
    preconditions: >-
      Staff fixtures have either no remembered workspace or a remembered cleared
      workspace.
    steps: Open a recognized former workspace bookmark in both fixtures.
    expected: >-
      The first routes to HQ; the cleared-memory fixture requests its remembered
      workspace destination.
    negative: false
    data_needs: >-
      An isolated browser context with the stated identity, workspace and
      response fixtures.
    bound_to: []
    provenance: proposed
    source: 'react-console:components/console/legacy-redirect.tsx:LegacyRedirect'
    category: interaction
    test_sources: []
    action_evidence:
      provenance: proposed
      source: 'react-console:components/console/legacy-redirect.tsx:LegacyRedirect'
    assertion_evidence:
      provenance: proposed
      source: 'react-console:components/console/legacy-redirect.tsx:LegacyRedirect'
  - id: ATS-PFM-CSH-012-05
    title: An older bookmark reuses clearance retained through HQ landing
    category: interaction
    level: browser
    proves:
      - BR-CAP-PFM-CSH-012-07
      - BR-CAP-PFM-CSH-013-06
    preconditions: Staff have entered a standing-grant workspace.
    steps: Open the bare root and then an older Contacts bookmark.
    expected: >-
      HQ opens first; the bookmark subsequently opens the remembered workspace
      while clearance still holds.
    negative: false
    data_needs: >-
      A fresh browser context, isolated account fixtures and controlled
      responses for the listed transitions.
    bound_to:
      - TST-PFM-CSH-014
    provenance: test
    source: >-
      react-console:e2e/mock/url-architecture.mock.spec.ts#a staff member's old
      tenant-less bookmark opens their remembered tenant after landing in Rhythm
      HQ
    test_sources:
      - >-
        react-console:e2e/mock/url-architecture.mock.spec.ts#a staff member's
        old tenant-less bookmark opens their remembered tenant after landing in
        Rhythm HQ
    action_evidence:
      provenance: test
      source: >-
        react-console:e2e/mock/url-architecture.mock.spec.ts#a staff member's
        old tenant-less bookmark opens their remembered tenant after landing in
        Rhythm HQ
    assertion_evidence:
      provenance: test
      source: >-
        react-console:e2e/mock/url-architecture.mock.spec.ts#a staff member's
        old tenant-less bookmark opens their remembered tenant after landing in
        Rhythm HQ
evidence:
  - >-
    react-console at baf6dae: lib/routes/legacy.ts,
    lib/routes/__tests__/legacy.test.ts, components/console/legacy-redirect.tsx,
    app/(console)/[...legacy]/page.tsx, app/(console)/page.tsx, next.config.mjs,
    docs/url-architecture.md §4.3, §7, §11 items 13 and 24,
    e2e/mock/url-architecture.mock.spec.ts.
  - >-
    rhythm-v2-docs at 25e253cb434aac6603ee294e3ca197ab6c4bfd0b: capability,
    related capabilities, domain objects, client lifecycles, workflows and prior
    OpenAI examinations; continuation coverage limitations are recorded in
    FND-PFM-CSH-062.
coverage:
  rule: covered
  transition: 'gap: FND-PFM-CSH-062'
  validation: covered
  permission: 'gap: FND-PFM-CSH-062'
  edge: 'gap: FND-PFM-CSH-062'
  failure: 'gap: FND-PFM-CSH-062'
  boundary: 'gap: FND-PFM-CSH-062'
  concurrency: 'gap: FND-PFM-CSH-062'
  invariant: 'gap: FND-PFM-CSH-062'
  interaction: 'gap: FND-PFM-CSH-062'
coverage_notes:
  rule:
    provenance: proposed
    source: >-
      ATS-PFM-CSH-004-06; ATS-PFM-CSH-012-01; ATS-PFM-CSH-012-02;
      ATS-PFM-CSH-012-03; ATS-PFM-CSH-012-04; ATS-PFM-CSH-012-05
    reason: >-
      Every mandatory rule has a proving scenario, including shared interaction
      cases; bindings identify execution separately.
  transition:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  validation:
    provenance: proposed
    source: ATS-PFM-CSH-012-03
    reason: >-
      The listed scenarios specify this category; their bindings separately
      identify existing executable evidence.
  permission:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: >-
      The named permission keys still need a complete allowed, denied and scope
      matrix across their enforcement boundaries.
  edge:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  failure:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  boundary:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  concurrency:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: >-
      No complete scenario matrix covers repeated events, overlapping reads or
      superseded answers for this capability.
  invariant:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: Associated object invariants remain without explicit proving scenarios.
  interaction:
    provenance: unknown
    source: FND-PFM-CSH-062
    reason: >-
      Related-capability combinations remain unspecified beyond the interactions
      listed.
design_obligations: []
interactions:
  - capability: CAP-PFM-CSH-009
    provenance: unknown
    source: FND-PFM-CSH-062
  - capability: CAP-PFM-CSH-013
    provenance: proposed
    source: ATS-PFM-CSH-012-05
workflow_obligations:
  - artifact: WF-PFM-CSH-006
    provenance: documented
    source: >-
      rhythm-v2-docs:specs/platform/console-shell/design/workflows/WF-PFM-CSH-006-resolve-an-older-console-address.md
    disposition: 'gap: FND-PFM-CSH-062'
    note: >-
      Review every hop, branch, failure and race with the cited capability
      scenarios; unexecuted combinations remain in the coverage finding.
---

# Resolve older console links during the address transition: Capability Test Specification

## Coverage

The coverage map describes specified proof, not a passing run. Each mandatory rule below has a scenario or an explicit finding; a proposed scenario remains an execution obligation even when its expected outcome follows the pinned implementation.

| Mandatory Rule | Scenarios or Finding |
|---|---|
| `BR-CAP-PFM-CSH-012-01` | `ATS-PFM-CSH-004-06`, `ATS-PFM-CSH-012-01`, `ATS-PFM-CSH-012-02` |
| `BR-CAP-PFM-CSH-012-03` | `ATS-PFM-CSH-012-03` |
| `BR-CAP-PFM-CSH-012-04` | `ATS-PFM-CSH-012-04` |
| `BR-CAP-PFM-CSH-012-07` | `ATS-PFM-CSH-012-04`, `ATS-PFM-CSH-012-05` |

Compatibility needs unmapped paths, customer defaults, staff memory with and without clearance, permanent redirects and preserved query values. Retirement remains Andrew’s decision, not a passing mapping assertion.

## Interactions With Related Capabilities

HQ opens first; the bookmark subsequently opens the remembered workspace while clearance still holds.

The interaction rows cite the contracts they exercise. Related combinations without a complete case remain in the coverage finding, together with cross-capability workflows and permission boundaries. A helper assertion is bound only for its stated outcome; the full browser handoff remains proposed until a suite checks it.


Pinned source and exact test anchors are recorded in frontmatter. Test bindings record static assertion review and use the executable-suite register; no product test result is inferred from that review. The prior planning and design examinations supply context, while this continuation records the remaining proof obligations explicitly.
