---
id: ATS-CMT-MTG-020
scope: CAP-CMT-MTG-020
product_area: committees
module: meetings
revision: 3
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-CMT-MTG-020-01
    title: Meeting access recognises committee and meeting participation
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-01
    preconditions: >-
      A participants-visible meeting has a director and a guest; an unrelated
      caller also has a portal session.
    steps: 'Request the meeting as the director, guest and unrelated caller.'
    expected: >-
      The director and guest can read the meeting; the unrelated caller receives
      a missing-record response.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to:
      - >-
        services-committees:modules/meetings/tests/unit/services/snapshot-and-participation.spec.ts#lets
        a current participant of the committee read a participants-only meeting
      - >-
        services-committees:modules/meetings/tests/unit/services/snapshot-and-participation.spec.ts#lets
        a participant row of the meeting read it, a guest with no seat
      - >-
        services-committees:modules/meetings/tests/unit/services/snapshot-and-participation.spec.ts#refuses
        a portal user who neither sits nor participates
      - >-
        services-committees:modules/meetings/tests/e2e/meetings.e2e.spec.ts#refuses
        Pat, who neither sits nor participates, a participants-only meeting with
        404
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/snapshot-and-participation.spec.ts#lets
      a current participant of the committee read a participants-only meeting
  - id: ATS-CMT-MTG-020-02
    title: Anonymous meeting answers preserve confidentiality
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-02
    preconditions: >-
      A public annual gathering has staff notes and video details; separate
      meetings are members-visible and draft.
    steps: Read each gathering through the anonymous public operation.
    expected: >-
      Only the available public gathering is returned, with the public field set
      and no confidential information.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: FND-CMT-MTG-035
  - id: ATS-CMT-MTG-020-03
    title: Video access includes current committee appointees
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-03
    preconditions: >-
      A members-visible meeting has notes and video information; readers include
      an appointee absent from its participant list, a listed participant and an
      unrelated portal caller.
    steps: Request the meeting page using each reader’s portal identity.
    expected: >-
      Every answer excludes staff notes; the appointee and listed participant
      receive video details while the unrelated reader does not.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: FND-CMT-MTG-036
  - id: ATS-CMT-MTG-020-04
    title: Personal meeting lists reject an inverted window
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-04
    preconditions: A participant has three meetings within the next ninety days.
    steps: >-
      Request the default meeting list, then request a window ending before it
      begins.
    expected: >-
      The default list includes the three gatherings and the inverted window is
      refused.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: FND-CMT-MTG-035
  - id: ATS-CMT-MTG-020-05
    title: Only the meeting’s authorised roles answer for others
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-05
    preconditions: A scheduled meeting records a chair and two directors.
    steps: >-
      Have a director answer for themselves, the chair answer for another
      director and a director attempt to answer for the chair.
    expected: >-
      The first two answers are saved and the unauthorised answer for another
      participant is refused.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: FND-CMT-MTG-035
  - id: ATS-CMT-MTG-020-06
    title: Circulation makes minutes available in the permitted audience
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-06
    preconditions: 'A meeting has draft minutes, a participant and an unrelated portal caller.'
    steps: Read the minutes as both callers before circulation and again afterwards.
    expected: >-
      Draft text remains hidden; after circulation the participant receives the
      text and hash while the unrelated caller receives a missing-record
      response.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to:
      - >-
        services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#shows
        Dana nothing before the minutes are circulated
      - >-
        services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#shows
        Dana, a participant, the circulated minutes with their body and hash
      - >-
        services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#refuses
        Pat, a stranger, the minutes with 404
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#shows
      Dana nothing before the minutes are circulated
  - id: ATS-CMT-MTG-020-07
    title: Decision pages explain the voter’s motion and result
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-07
    preconditions: >-
      An asynchronous recorded decision is open; an eligible voter and an
      unrelated caller have portal identities.
    steps: Read the decision as both callers and repeat the reads after it closes.
    expected: >-
      The voter receives the explained rule, personal vote and closed result;
      the unrelated caller cannot read the decision.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to:
      - >-
        services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#shows
        the voter the rule in plain words and their own vote
      - >-
        services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#refuses
        a stranger the decision with 404
      - >-
        services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#shows
        the tally and its explanation after the close
    provenance: test
    source: >-
      services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#shows
      the voter the rule in plain words and their own vote
  - id: ATS-CMT-MTG-020-08
    title: Confidential decisions exclude non-voting committee readers
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-08
    preconditions: >-
      A confidential decision has an eligible voter and another committee
      participant outside its voter snapshot.
    steps: Ask for the decision page using both portal identities.
    expected: >-
      The eligible voter receives the page and the other committee participant
      does not.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: 'services-committees:modules/decisions/services/portal/portal-decisions.ts'
  - id: ATS-CMT-MTG-020-09
    title: Portal votes respect method and appointment ownership
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-09
    preconditions: An asynchronous recorded motion and an in-meeting decision are open.
    steps: >-
      Submit a portal vote, repeat it and attempt a portal vote on the
      in-meeting decision; separately let staff record a vote for the caller and
      inspect its portal ownership.
    expected: >-
      The first eligible asynchronous vote succeeds, duplicate and
      meeting-method votes fail, and the staff-entered vote appears as the
      caller’s own.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: FND-CMT-MTG-035
  - id: ATS-CMT-MTG-020-10
    title: Deferred meeting access remains unavailable
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-11
    preconditions: The portal milestone has not been delivered.
    steps: >-
      Request the personal meeting list, meeting page, invitation write,
      minutes, calendar feed and public meeting.
    expected: Each operation remains unavailable under the recorded deferral policy.
    negative: false
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: 'services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#D11'
  - id: ATS-CMT-MTG-020-11
    title: The secretary journey delivers readable circulated minutes
    level: api
    proves:
      - AS-JNY-CMT-MTG-001-03
    preconditions: The secretary journey has reached its circulation step.
    steps: >-
      Read the circulated minutes as a participant and as an unrelated portal
      caller.
    expected: >-
      The participant receives the minutes text and hash; the unrelated caller
      cannot read them.
    negative: false
    data_needs: >-
      The secretary journey’s records and portal callers in an isolated
      workspace
    bound_to:
      - >-
        services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#shows
        Dana, a participant, the circulated minutes with their body and hash
      - >-
        services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#refuses
        Pat, a stranger, the minutes with 404
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#shows
      Dana, a participant, the circulated minutes with their body and hash
  - id: ATS-CMT-MTG-020-12
    title: Invitation writes need a change and a known participant
    level: api
    proves:
      - BR-CAP-CMT-MTG-020-13
    preconditions: A scheduled meeting records a chair and another participant.
    steps: >-
      As the chair, send an empty response and then an answer for a person
      absent from the meeting’s participant records.
    expected: >-
      Both writes are refused without altering invitation or attendance
      information.
    negative: true
    data_needs: >-
      Meeting or decision fixtures and relevant portal callers in an isolated
      workspace
    bound_to: []
    provenance: proposed
    source: >-
      services-committees:modules/meetings/services/portal/portal-meetings.ts:rsvp
evidence:
  - >-
    services-committees at 36129c24: inspected meeting access predicates, public
    mapping assertions, minutes and decisions route tests, invitation validation
    and voting guards
  - >-
    react-console at baf6dae3: inspected skipped portal steps and obsolete
    public-page assertions; removed them from proof bindings
---

# Participate in Committee Work Through the Member Portal: Acceptance Test Set

## Coverage

| Rule | Proved by |
|---|---|
| `BR-CAP-CMT-MTG-020-01` | `ATS-CMT-MTG-020-01` |
| `BR-CAP-CMT-MTG-020-02` | `ATS-CMT-MTG-020-02` |
| `BR-CAP-CMT-MTG-020-03` | `ATS-CMT-MTG-020-03` |
| `BR-CAP-CMT-MTG-020-04` | `ATS-CMT-MTG-020-04` |
| `BR-CAP-CMT-MTG-020-05` | `ATS-CMT-MTG-020-05` |
| `BR-CAP-CMT-MTG-020-06` | `ATS-CMT-MTG-020-06` |
| `BR-CAP-CMT-MTG-020-07` | `ATS-CMT-MTG-020-07` |
| `BR-CAP-CMT-MTG-020-08` | `ATS-CMT-MTG-020-08` |
| `BR-CAP-CMT-MTG-020-09` | `ATS-CMT-MTG-020-09` |
| `BR-CAP-CMT-MTG-020-11` | `ATS-CMT-MTG-020-10` |

| `BR-CAP-CMT-MTG-020-13` | `ATS-CMT-MTG-020-12` |
