---
id: ATS-PFM-CSH-018
scope: CAP-PFM-CSH-018
product_area: platform
module: console-shell
revision: 3
status: proposed
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  rhythm-v2-docs: 25e253cb434aac6603ee294e3ca197ab6c4bfd0b
scenarios:
  - title: Built-in references produce only usable encoded links
    proves:
      - BR-CAP-PFM-CSH-018-01
      - BR-CAP-PFM-CSH-018-02
      - BR-CAP-PFM-CSH-018-05
    level: unit
    bound_to:
      - TST-PFM-CSH-020
    preconditions: >-
      Fixtures cover permitted, denied, unfinished and parent-dependent built-in
      records.
    steps: >-
      Resolve their references, including an identity containing path
      punctuation.
    expected: >-
      Permitted standalone references yield encoded destinations; refused,
      unfinished and parent-dependent references yield no link.
    negative: true
    data_needs: Independent fixture inputs for the variants listed in this case.
    id: ATS-PFM-CSH-018-01
    provenance: test
    source: >-
      react-console:lib/console/__tests__/record-destination.test.ts#opens a
      contact and an organization on their record screens
    category: permission
    test_sources:
      - >-
        react-console:lib/console/__tests__/record-destination.test.ts#opens a
        contact and an organization on their record screens
      - >-
        react-console:lib/console/__tests__/record-destination.test.ts#asks for
        the noun's own permission
      - >-
        react-console:lib/console/__tests__/record-destination.test.ts#answers
        null when the person may not open the record
      - >-
        react-console:lib/console/__tests__/record-destination.test.ts#answers
        null for a noun whose screen is not built
      - >-
        react-console:lib/console/__tests__/record-destination.test.ts#answers
        null for a child noun, whose URL needs a parent id
      - >-
        react-console:lib/console/__tests__/record-destination.test.ts#escapes
        the record id into the path
    action_evidence:
      provenance: test
      source: >-
        react-console:lib/console/__tests__/record-destination.test.ts#opens a
        contact and an organization on their record screens
    assertion_evidence:
      provenance: test
      source: >-
        react-console:lib/console/__tests__/record-destination.test.ts#opens a
        contact and an organization on their record screens
  - title: Custom reference lookup requires a known type and general grant
    proves:
      - BR-CAP-PFM-CSH-018-03
    level: unit
    bound_to: []
    preconditions: Runtime definitions contain one custom type and omit another.
    steps: Resolve both with and without general custom-record read authority.
    expected: Only the known type with the general grant receives a record destination.
    negative: true
    data_needs: Independent fixture inputs for the variants listed in this case.
    id: ATS-PFM-CSH-018-02
    provenance: proposed
    source: 'react-console:lib/console/record-types.ts'
    category: rule
    test_sources: []
    action_evidence:
      provenance: proposed
      source: 'react-console:lib/console/record-types.ts'
    assertion_evidence:
      provenance: proposed
      source: 'react-console:lib/console/record-types.ts'
  - title: Unknown route nouns and object references fail differently
    proves:
      - BR-CAP-PFM-CSH-018-04
    level: unit
    bound_to: []
    preconditions: The route noun and object identity are absent from their catalogues.
    steps: >-
      Construct the unknown record-type route and resolve the unknown object
      reference.
    expected: Route construction throws while reference lookup returns no destination.
    negative: true
    data_needs: Independent fixture inputs for the variants listed in this case.
    id: ATS-PFM-CSH-018-03
    provenance: proposed
    source: 'react-console:lib/console/record-types.ts'
    category: validation
    test_sources: []
    action_evidence:
      provenance: proposed
      source: 'react-console:lib/console/record-types.ts'
    assertion_evidence:
      provenance: proposed
      source: 'react-console:lib/console/record-types.ts'
  - id: ATS-PFM-CSH-018-04
    title: A custom menu destination and record reference share the type identity
    category: interaction
    level: browser
    proves:
      - BR-CAP-PFM-CSH-018-03
      - BR-CAP-PFM-CSH-008-01
    preconditions: >-
      An active custom type is placed in a menu section and the person has
      general record-read authority.
    steps: >-
      Resolve its record reference and compare the type in the destination with
      its menu entry; repeat without the grant.
    expected: >-
      The permitted reference targets the same custom type’s record page;
      without general authority there is no reference link.
    negative: false
    data_needs: >-
      A fresh browser context, isolated account fixtures and controlled
      responses for the listed transitions.
    bound_to: []
    provenance: proposed
    source: >-
      rhythm-v2-docs:specs/platform/console-shell/planning/capabilities/CAP-PFM-CSH-018-follow-a-record-reference-to-the-right-page.md
    test_sources: []
    action_evidence:
      provenance: proposed
      source: >-
        rhythm-v2-docs:specs/platform/console-shell/planning/capabilities/CAP-PFM-CSH-018-follow-a-record-reference-to-the-right-page.md
    assertion_evidence:
      provenance: proposed
      source: >-
        rhythm-v2-docs:specs/platform/console-shell/planning/capabilities/CAP-PFM-CSH-018-follow-a-record-reference-to-the-right-page.md
coverage:
  rule: covered
  transition: 'gap: FND-PFM-CSH-068'
  validation: covered
  permission: covered
  edge: 'gap: FND-PFM-CSH-068'
  failure: 'gap: FND-PFM-CSH-068'
  boundary: 'gap: FND-PFM-CSH-068'
  concurrency: 'gap: FND-PFM-CSH-068'
  invariant: 'gap: FND-PFM-CSH-068'
  interaction: covered
coverage_notes:
  rule:
    provenance: proposed
    source: >-
      ATS-PFM-CSH-018-01; ATS-PFM-CSH-018-02; ATS-PFM-CSH-018-03;
      ATS-PFM-CSH-018-04
    reason: >-
      Every mandatory rule has a proving scenario, including shared interaction
      cases; bindings identify execution separately.
  transition:
    provenance: unknown
    source: FND-PFM-CSH-068
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  validation:
    provenance: proposed
    source: ATS-PFM-CSH-018-03
    reason: >-
      The listed scenarios specify this category; their bindings separately
      identify existing executable evidence.
  permission:
    provenance: proposed
    source: ATS-PFM-CSH-018-01
    reason: >-
      The listed scenarios specify this category; their bindings separately
      identify existing executable evidence.
  edge:
    provenance: unknown
    source: FND-PFM-CSH-068
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  failure:
    provenance: unknown
    source: FND-PFM-CSH-068
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  boundary:
    provenance: unknown
    source: FND-PFM-CSH-068
    reason: >-
      No dedicated scenario establishes this category; applicability and the
      required fixtures need review.
  concurrency:
    provenance: unknown
    source: FND-PFM-CSH-068
    reason: >-
      No complete scenario matrix covers repeated events, overlapping reads or
      superseded answers for this capability.
  invariant:
    provenance: unknown
    source: FND-PFM-CSH-068
    reason: Associated object invariants remain without explicit proving scenarios.
  interaction:
    provenance: proposed
    source: ATS-PFM-CSH-018-04
    reason: >-
      The listed scenarios specify this category; their bindings separately
      identify existing executable evidence.
design_obligations: []
interactions:
  - capability: CAP-PFM-CSH-008
    provenance: proposed
    source: ATS-PFM-CSH-018-04
evidence:
  - >-
    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-068.
workflow_obligations:
  - artifact: WF-PFM-CSH-008
    provenance: documented
    source: >-
      rhythm-v2-docs:specs/platform/console-shell/design/workflows/WF-PFM-CSH-008-open-a-page-from-its-address.md
    disposition: 'gap: FND-PFM-CSH-068'
    note: >-
      Review every hop, branch, failure and race with the cited capability
      scenarios; unexecuted combinations remain in the coverage finding.
---

# Follow a record reference to the right page: 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-018-01` | `ATS-PFM-CSH-018-01` |
| `BR-CAP-PFM-CSH-018-02` | `ATS-PFM-CSH-018-01` |
| `BR-CAP-PFM-CSH-018-03` | `ATS-PFM-CSH-018-02`, `ATS-PFM-CSH-018-04` |
| `BR-CAP-PFM-CSH-018-04` | `ATS-PFM-CSH-018-03` |
| `BR-CAP-PFM-CSH-018-05` | `ATS-PFM-CSH-018-01` |

Record references need runtime-known custom definitions, missing definitions, permission refusal and unknown object handling. Built-in reference tests do not exercise the custom registry or establish record-type-scoped permission checks.

## Interactions With Related Capabilities

The permitted reference targets the same custom type’s record page; without general authority there is no reference link.

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.
