---
id: TST-MBR-STR-100
title: Structure reads and authorized tree edits
kind: api-lifecycle
product_area: membership
module: structure
revision: 1
status: draft
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repository: services-membership
files:
  - tests/e2e/structure-api.e2e.spec.ts
implements:
  - ATS-MBR-STR-001-08
  - ATS-MBR-STR-002-01
  - ATS-MBR-STR-002-02
  - ATS-MBR-STR-004-03
  - ATS-MBR-STR-005-01
  - ATS-MBR-STR-005-02
  - ATS-MBR-STR-005-03
  - ATS-MBR-STR-007-03
  - ATS-MBR-STR-007-05
  - ATS-MBR-STR-019-01
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 3
isolation: A uniquely named local workspace and its seeded records; the suite owns its fixture data and cleanup.
evidence:
  - 'services-membership:tests/e2e/structure-api.e2e.spec.ts'
bindings:
  - scenario: ATS-MBR-STR-001-08
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      refuses to delete a unit type in use, 409 unit_type_in_use
    provenance: test
  - scenario: ATS-MBR-STR-002-01
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      refuses a parent of a type not allowed, 409 parent_type_not_allowed
    provenance: test
  - scenario: ATS-MBR-STR-002-02
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      refuses a move under the unit’s own descendant, 409 move_creates_cycle
    provenance: test
  - scenario: ATS-MBR-STR-004-03
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      refuses to delete a unit in use, 409 unit_in_use
    provenance: test
  - scenario: ATS-MBR-STR-005-01
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      answers today’s descendants from the closure
    provenance: test
  - scenario: ATS-MBR-STR-005-02
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      answers an as-of date’s descendants from the parent history
    provenance: test
  - scenario: ATS-MBR-STR-005-03
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      pages the flat list by code with a cursor
    provenance: test
  - scenario: ATS-MBR-STR-007-03
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      links an organization as the unit’s legal entity
    provenance: test
  - scenario: ATS-MBR-STR-007-03
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      refuses a second open legal entity, 409 legal_entity_already_open
    provenance: test
  - scenario: ATS-MBR-STR-007-05
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      creates a relationship type with an id derived from its name
    provenance: test
  - scenario: ATS-MBR-STR-007-05
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      refuses a relationship type id the tenant has, 409 relationship_type_id_taken
    provenance: test
  - scenario: ATS-MBR-STR-019-01
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      serves a reader the reads
    provenance: test
  - scenario: ATS-MBR-STR-019-01
    source: >-
      services-membership:tests/e2e/structure-api.e2e.spec.ts#the structure API, end to end in process ›
      refuses a reader a change, 403
    provenance: test
invocation: 'npm run test:e2e'
coverage_limit: >-
  Bindings identify the concrete cases executed in this file. A compound specification may also depend on
  other registered suites or remain partly proposed; registration is not a passing execution result.
provenance: test
source:
  - 'services-membership:tests/e2e/structure-api.e2e.spec.ts'
---

# Structure reads and authorized tree edits

## Verification Boundary

This suite runs public API operations through the local dispatcher and checks the resulting records and responses. Structure reads and authorized tree edits defines the scope of its examples.

## What This Suite Proves

The suite executes the concrete examples named by its binding ledger. Those examples contribute to the linked capability or feature scenarios within the boundary of the test assertions.

## What It Does Not Prove

Registration supplies no fresh execution result or deployed conformance verdict. Browser behavior, deployed infrastructure and unasserted variants require separate evidence.

## Real Dependencies and Test Doubles

PostgreSQL, local Membership services and the suite’s persistence path are real. The business clock and caller fixtures are controlled by the harness. API requests enter the real dispatcher with contexts signed by a test key rather than Platform’s production signer.

## Must Not Be Doubled

The Membership path under examination, transaction behavior and database constraints stay real. Replacing those boundaries would remove the persisted proof the suite is intended to supply.
