---
id: FAS-MBR-MEM-06
feature: FEAT-MBR-MEM-06
product_area: membership
module: memberships
revision: 1
status: proposed
product_intent: proposed
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
capabilities:
  - CAP-MBR-MEM-015
  - CAP-MBR-MEM-016
  - CAP-MBR-MEM-017
scenarios:
  - id: FAS-MBR-MEM-06-01
    title: Let an officer work within scope and a member read personally
    kind: behaviour
    exercises:
      - CAP-MBR-MEM-015
      - CAP-MBR-MEM-016
      - CAP-MBR-MEM-017
    relies_on:
      - ATS-MBR-MEM-015-04
      - ATS-MBR-MEM-016-03
      - ATS-MBR-MEM-017-05
    preconditions: >-
      A regional officer reaches one member but not another; the member has a
      linked portal account.
    steps:
      - do: >-
          List and read as the officer, submit an allowed contact field through
          the recording CRM port, then read personal memberships as the member.
        expect: >-
          The officer sees only reachable members, CRM receives the permitted
          change with the officer identity, and the personal view returns the
          linked member’s holdings.
        provenance: test
        source: 'services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts'
    expected: >-
      The officer sees only reachable members, CRM receives the permitted change
      with the officer identity, and the personal view returns the linked
      member’s holdings.
    negative: false
    data_needs: >-
      An isolated workspace, dated member fixtures, chapter and package
      configuration, and recording partner ports where the case requires them.
    bound_to:
      - TST-MBR-MEM-250
    provenance: test
    source:
      - 'services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts'
      - >-
        services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#reads
        Jo for the Atlanta officer, the Savannah affiliation marked out of scope
      - >-
        services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#passes
        an allowed field to CRM’s contact update as the officer
      - >-
        services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#lets Jo
        read her own memberships in the portal
    binding_evidence:
      - suite: TST-MBR-MEM-250
        source: 'services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts'
  - id: FAS-MBR-MEM-06-02
    title: Keep exported inclusion fixed after an appointment ends
    kind: interaction
    exercises:
      - CAP-MBR-MEM-015
      - CAP-MBR-MEM-017
    relies_on:
      - ATS-MBR-MEM-015-09
      - ATS-MBR-MEM-017-01
    preconditions: An officer’s current appointment reaches a populated chapter.
    steps:
      - do: >-
          Capture its roster export, end the appointment, generate rows and
          attempt a fresh roster request.
        expect: >-
          The fresh request is refused while the earlier export keeps its
          captured membership set.
        provenance: proposed
        source: &ref_0
          - >-
            services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#answers
            Lee’s roster while the assignment is within its grace
          - >-
            services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#captures
            the ids the requester’s set reaches at request time
    expected: >-
      The fresh request is refused while the earlier export keeps its captured
      membership set.
    negative: false
    data_needs: >-
      An isolated workspace, dated member fixtures, chapter and package
      configuration, and recording partner ports where the case requires them.
    bound_to: []
    provenance: proposed
    source: *ref_0
  - id: FAS-MBR-MEM-06-03
    title: Replace officer authority at the appointment boundary
    kind: lifecycle
    exercises:
      - CAP-MBR-MEM-015
      - CAP-MBR-MEM-016
    relies_on:
      - ATS-MBR-MEM-015-09
      - ATS-MBR-MEM-016-01
    preconditions: >-
      An outgoing appointment ends and a successor appointment begins at a later
      instant.
    steps:
      - do: >-
          Read and attempt allowed contact changes before and after each
          appointment boundary.
        expect: >-
          Each request uses the appointment in force; neither officer gains
          authority outside their validity window.
        provenance: proposed
        source: &ref_1
          - >-
            services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#answers
            Lee’s roster while the assignment is within its grace
          - >-
            services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
            a field outside the list, field_not_allowed naming it, and sends
            nothing
    expected: >-
      Each request uses the appointment in force; neither officer gains
      authority outside their validity window.
    negative: false
    data_needs: >-
      An isolated workspace, dated member fixtures, chapter and package
      configuration, and recording partner ports where the case requires them.
    bound_to: []
    provenance: proposed
    source: *ref_1
  - id: FAS-MBR-MEM-06-04
    title: Withhold unreachable chapters and financial lines
    kind: permission
    exercises:
      - CAP-MBR-MEM-015
      - CAP-MBR-MEM-016
      - CAP-MBR-MEM-017
    relies_on:
      - ATS-MBR-MEM-015-06
      - ATS-MBR-MEM-016-07
      - ATS-MBR-MEM-017-03
    preconditions: A chapter officer reaches one of a member’s two affiliations.
    steps:
      - do: >-
          Read the member and financial summary, try to change the other
          chapter, and try to read an export requested by another officer.
        expect: >-
          The reachable member is readable, only reachable financial lines
          appear, and unauthorized chapter changes and export reads are refused.
        provenance: proposed
        source: &ref_2
          - >-
            services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
            the Atlanta officer ending Jo’s Savannah row, out_of_scope naming
            Savannah
          - >-
            services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#shows
            the Atlanta officer only the Atlanta dues line
          - >-
            services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#answers
            the export to the person who asked for it and to staff, and not to
            another officer
    expected: >-
      The reachable member is readable, only reachable financial lines appear,
      and unauthorized chapter changes and export reads are refused.
    negative: true
    data_needs: >-
      An isolated workspace, dated member fixtures, chapter and package
      configuration, and recording partner ports where the case requires them.
    bound_to: []
    provenance: proposed
    source: *ref_2
  - id: FAS-MBR-MEM-06-05
    title: Check member visibility before exposing version conflicts
    kind: regression
    exercises:
      - CAP-MBR-MEM-015
      - CAP-MBR-MEM-016
    relies_on:
      - ATS-MBR-MEM-015-06
      - ATS-MBR-MEM-016-01
    preconditions: >-
      An officer has an old affiliation version for a member whose current chain
      is outside reach.
    steps:
      - do: >-
          Attempt a stale affiliation ending and an allowed contact change for
          that member, then inspect retained records.
        expect: >-
          Both requests return the scope-safe refusal and expose neither the
          current version nor a partner update.
        provenance: proposed
        source: &ref_3
          - >-
            services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
            the Atlanta officer ending Jo’s Savannah row, out_of_scope naming
            Savannah
          - >-
            services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
            a field outside the list, field_not_allowed naming it, and sends
            nothing
    expected: >-
      Both requests return the scope-safe refusal and expose neither the current
      version nor a partner update.
    negative: false
    data_needs: >-
      An isolated workspace, dated member fixtures, chapter and package
      configuration, and recording partner ports where the case requires them.
    bound_to: []
    provenance: proposed
    source: *ref_3
evidence:
  - >-
    rhythm-v2-docs:specs/membership/memberships/planning/features/FEAT-MBR-MEM-06-officer-and-member-access.md
  - >-
    rhythm-v2-docs:specs/membership/memberships/design/tests/: detailed
    capability scenarios and interaction cases.
  - 'services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts'
---

# Scoped Membership Work and Personal Views: Feature Acceptance Suite

## What the Feature Must Do as a Whole

This suite tests a consistent boundary around officer work, captured exports and personal membership views. The same fixtures exercise visible records, permitted contact fields and financial lines.

## Interactions Between Capabilities

The composite cases test the effect of a change in one capability on the records and answers of another. Detailed reliance links identify the supporting capability scenarios; an executable binding requires assertions for the complete feature case. Cases without such a binding remain proposed.

## Regression Record

| Revision | Change | Scenario | Why |
|---|---|---|---|
| 1 | initial | all | Establish cumulative feature coverage from the pinned specification and executable evidence. |
