---
id: TST-PFM-CSH-024
title: Custom placement merge and filtering
kind: unit
product_area: platform
module: console-shell
revision: 1
status: draft
source_sha:
  rhythm-v2-docs: 25e253cb434aac6603ee294e3ca197ab6c4bfd0b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: react-console
files:
  - lib/custom-objects/__tests__/navigation.test.ts
implements:
  - ATS-PFM-CSH-006-04
  - ATS-PFM-CSH-006-11
  - ATS-PFM-CSH-008-01
  - ATS-PFM-CSH-008-02
  - ATS-PFM-CSH-008-03
  - ATS-PFM-CSH-008-04
  - FAS-PFM-CSH-02-02
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 1
isolation: >-
  Independent in-memory fixtures, static rendering or read-only source
  inspection; mocked listeners and global state are restored by the test.
evidence:
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts at
    baf6dae382d6f41dce976c7f848667ccc37e076f
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#hides domains
    without a built screen, keeping Submissions and CRM
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#keeps a hidden
    domain reachable when a custom object is placed under it
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#keeps a hidden
    domain reachable when a custom object is placed under it
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#orders custom
    apps by display order and groups items, ungrouped first
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#appends to an
    existing app after its built-in items
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#lists only
    active, placed objects
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#ignores a
    placement in an app that is neither a console app nor an unarchived custom
    app
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#hides a custom
    app the person reads nothing in
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#orders custom
    apps by display order and groups items, ungrouped first
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#trusts the
    navigation route's answer, even where the key is held tenant-wide and no
    scoped entry names the object
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#hides a custom
    app the person reads nothing in
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#keeps a hidden
    domain reachable when a custom object is placed under it
  - >-
    react-console:lib/custom-objects/__tests__/navigation.test.ts#appends to an
    existing app after its built-in items
binding_boundary:
  - scenario: ATS-PFM-CSH-006-04
    provenance: test
    source: >-
      react-console:lib/custom-objects/__tests__/navigation.test.ts#hides
      domains without a built screen, keeping Submissions and CRM;
      react-console:lib/custom-objects/__tests__/navigation.test.ts#keeps a
      hidden domain reachable when a custom object is placed under it
    note: >-
      This file supplies the complete stated scenario outcome at its declared
      test boundary.
  - scenario: ATS-PFM-CSH-006-11
    provenance: test
    source: >-
      react-console:lib/custom-objects/__tests__/navigation.test.ts#keeps a
      hidden domain reachable when a custom object is placed under it
    note: >-
      This file supplies the complete stated scenario outcome at its declared
      test boundary.
  - scenario: ATS-PFM-CSH-008-01
    provenance: test
    source: >-
      react-console:lib/custom-objects/__tests__/navigation.test.ts#orders
      custom apps by display order and groups items, ungrouped first;
      react-console:lib/custom-objects/__tests__/navigation.test.ts#appends to
      an existing app after its built-in items
    note: >-
      This file supplies the listed assertions within a collective binding;
      another registered file supplies the other assertions.
  - scenario: ATS-PFM-CSH-008-02
    provenance: test
    source: >-
      react-console:lib/custom-objects/__tests__/navigation.test.ts#lists only
      active, placed objects;
      react-console:lib/custom-objects/__tests__/navigation.test.ts#ignores a
      placement in an app that is neither a console app nor an unarchived custom
      app
    note: >-
      This file supplies the complete stated scenario outcome at its declared
      test boundary.
  - scenario: ATS-PFM-CSH-008-03
    provenance: test
    source: >-
      react-console:lib/custom-objects/__tests__/navigation.test.ts#hides a
      custom app the person reads nothing in;
      react-console:lib/custom-objects/__tests__/navigation.test.ts#orders
      custom apps by display order and groups items, ungrouped first
    note: >-
      This file supplies the complete stated scenario outcome at its declared
      test boundary.
  - scenario: ATS-PFM-CSH-008-04
    provenance: test
    source: >-
      react-console:lib/custom-objects/__tests__/navigation.test.ts#trusts the
      navigation route's answer, even where the key is held tenant-wide and no
      scoped entry names the object;
      react-console:lib/custom-objects/__tests__/navigation.test.ts#hides a
      custom app the person reads nothing in
    note: >-
      This file supplies the complete stated scenario outcome at its declared
      test boundary.
  - scenario: FAS-PFM-CSH-02-02
    provenance: test
    source: >-
      react-console:lib/custom-objects/__tests__/navigation.test.ts#keeps a
      hidden domain reachable when a custom object is placed under it;
      react-console:lib/custom-objects/__tests__/navigation.test.ts#appends to
      an existing app after its built-in items
    note: >-
      This file supplies the complete stated scenario outcome at its declared
      test boundary.
---

# Custom placement merge and filtering

## Verification Boundary

Pure custom-app and type fixtures check placement validity, grouping, ordering, readability, trusted navigation answers and otherwise unfinished domains. Asynchronous Metadata fallback and designer revalidation require additional execution.

This register records static review at the supplied source commits. The suite exists, but this pass does not run it or mark its conformance verified.

## What This Suite Proves

- A readable placement can reveal an unfinished section.
- A placed object gives an unfinished application a destination.
- Placed types join built-in and custom-app navigation.
- Invalid and inactive placements contribute no entry.
- Unreadable custom applications disappear.
- Trusted navigation differs from local fallback authority.
- A placement gives an otherwise unfinished domain useful work.

Bindings that span files are collective: each file contributes only its recorded assertions. The exact anchors are in frontmatter.

## What It Does Not Prove

The register claims only the linked scenario outcomes at this boundary. It establishes no passing deployment result, complete permission matrix or unlisted cross-capability journey. Proposed scenarios and the remaining lifecycle, invariant and race obligations stay in the coverage findings.

## Real Dependencies and Test Doubles

The imported functions, registry declarations and any static component rendering are real. Independent in-memory inputs represent grants, contexts or records; there is no deployed service or browser session.

## Must Not Be Doubled

Do not replace the function, component, registry or source declaration under test. Keep the expected outcome independent of its implementation; injected inputs do not justify stubbing the computation being verified.
