---
id: CAP-CMT-MTG-020
title: Participate in committee work through the member portal
feature: FEAT-CMT-MTG-01
product_area: committees
module: meetings
revision: 2
status: draft
product_intent: proposed
implementation_evidence: inconsistent
supersedes:
  - >-
    react-console acceptance inventory CAP-CMT-MTG-021, 022, 023, 024,
    CAP-CMT-DEC-015, 016, 018
  - 'react-console acceptance journeys CMT-ACC-0232, 0233, 0235, 0241, 0338, 0339'
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#D11'
  - 'services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#N1'
  - 'services-committees:docs/milestones/README.md'
purpose: >-
  Committee participants use portal operations to follow meetings, respond to
  invitations and take part in recorded asynchronous decisions.
outcomes:
  - Participants can locate the gatherings and papers relevant to them
  - Portal answers respect the applicable audience
  - Eligible voters can submit their own asynchronous votes
concepts:
  - CON-CMT-MTG-001
actors:
  - ACT-CMT-005
  - ACT-CMT-009
  - ACT-CMT-010
surfaces:
  - portal
  - api
preconditions:
  - >-
    The caller has a portal session linked to a contact, unless using the
    anonymous public meeting operation.
postconditions: []
permissions:
  - key: committees.portal.participate
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-CMT-MTG-020-01
    statement: >-
      A portal session linked to a contact can read non-draft public and
      members-visible meetings, while participants-visible meetings require a
      current committee appointment or meeting participant record; denied reads
      appear missing.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/portal/portal-meetings.ts:portalMeeting
    origin: none
  - id: BR-CAP-CMT-MTG-020-02
    statement: >-
      Anonymous public meeting reads return the meeting identity, title,
      committee name, kind, schedule, time zone, approved textual location
      fields and status without staff notes or video information.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/public-meeting.spec.ts#shows
      the public page exactly the allow-listed fields
    origin: none
  - id: BR-CAP-CMT-MTG-020-03
    statement: >-
      Portal meeting responses always omit staff notes and expose video
      information only to current committee participants or recorded meeting
      participants.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/portal/portal-meetings.ts:pageFor
    origin: none
  - id: BR-CAP-CMT-MTG-020-04
    statement: >-
      The personal meeting list uses a window ending after it begins, defaulting
      from today to ninety days ahead.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/portal/portal-meetings.ts:myMeetings
    origin: none
  - id: BR-CAP-CMT-MTG-020-05
    statement: >-
      A meeting participant may answer their own invitation, while a chair or
      liaison recorded on that meeting may answer for others or record
      attendance; ended meetings reject these portal changes.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/portal/portal-meetings.ts:rsvp
    origin: none
  - id: BR-CAP-CMT-MTG-020-06
    statement: >-
      Authenticated portal users see circulated, approved or amended minutes
      according to minutes visibility, defaulting to the committee’s current
      participants or the meeting’s recorded participants, and never see draft
      minutes.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/portal/portal-minutes.ts:portalMinutes
    origin: none
  - id: BR-CAP-CMT-MTG-020-07
    statement: >-
      The readable decision page supplies the motion, plain-language rule,
      personal eligibility, recusal and vote, recorded asynchronous votes and
      the closed tally, while drafts and inaccessible decisions appear missing.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/portal/portal-decisions.ts:portalDecision
    origin: none
  - id: BR-CAP-CMT-MTG-020-08
    statement: Only eligible voters can read a confidential decision through the portal.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: 'services-committees:modules/decisions/services/portal/portal-decisions.ts'
    origin: none
  - id: BR-CAP-CMT-MTG-020-09
    statement: >-
      Portal voting accepts an eligible person’s own appointment once on an open
      recorded asynchronous decision.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/persistence/decisions.ts:castVote
    origin: none
  - id: BR-CAP-CMT-MTG-020-10
    statement: >-
      The personal decision list returns decisions linked to the caller’s
      eligible appointments in descending creation order, with an optional
      open-only filter and a voted indicator.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/portal/portal-decisions.ts:myDecisions
    origin: none
  - id: BR-CAP-CMT-MTG-020-11
    statement: >-
      The product should keep public and portal meeting operations disabled
      until the portal milestone and review their availability then.
    kind: policy
    enforced_at: []
    must_prove: true
    provenance: documented
    source: >-
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions
    origin: >-
      CMTE-M3 D11 (Andrew 2026-10-21,
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions)
  - id: BR-CAP-CMT-MTG-020-12
    statement: >-
      The product should reserve meeting, minutes and action-item work for the
      member portal stage.
    kind: policy
    enforced_at: []
    must_prove: false
    provenance: documented
    source: >-
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions
    origin: >-
      CMTE-M3 N1 (Andrew 2026-10-21,
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions)
  - id: BR-CAP-CMT-MTG-020-13
    statement: >-
      An invitation response requires an invitation status or attendance value
      and rejects a target who has no participant record for that meeting.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/portal/portal-meetings.ts:rsvp
    origin: none
scenarios:
  - id: SC-CAP-CMT-MTG-020-01
    given: >-
      A meeting has a voting director, a non-voting adviser and an unrelated
      portal caller
    when: Each requests its participants-visible portal page
    then: >-
      The voting participant can read confidential agenda items, the adviser
      cannot, and the unrelated caller cannot read the meeting
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/participation/participation-rule.ts:mayReadConfidential
edge_cases: []
constraints: []
depends_on:
  - CAP-CMT-MTG-001
  - CAP-CMT-MTG-010
related:
  - CAP-CMT-MTG-006
  - CAP-CMT-MTG-015
  - CAP-CMT-MTG-016
journeys:
  - JNY-CMT-MTG-004
  - JNY-CMT-MTG-001
open_questions:
  - OQ-CMT-MTG-001
  - OQ-CMT-MTG-002
evidence:
  - >-
    services-committees at 36129c24: inspected portal meeting and minutes
    audiences, public response mapping, invitation writes, portal decision reads
    and lists, vote guards, route permissions and recorded meeting-stage
    decisions
  - >-
    react-console at baf6dae3: inspected portal journey bodies and identified
    skipped member actions and obsolete public-page assertions
controls:
  - TC-AZ-001
  - TC-AZ-002
  - TC-AZ-003
  - TC-AZ-004
  - TC-AZ-006
  - TC-TEN-001
  - TC-TEN-002
  - TC-TEN-003
  - TC-TEN-004
  - TC-SEC-001
  - TC-SEC-004
  - TC-DAT-001
  - TC-DAT-002
  - TC-DAT-003
  - TC-LOG-002
  - TC-LOG-003
  - TC-LOG-004
  - TC-LOG-005
  - TC-AVL-005
  - TC-PI-001
  - TC-PI-003
  - TC-PI-005
  - TC-PRV-001
  - TC-PRV-002
---

# Participate in committee work through the member portal

## Purpose

Committee participants need to follow the work relevant to them and act in their own name. These portal operations connect meeting preparation and invitations to asynchronous decisions while limiting what each caller can read or change.

## How It Works

A signed-in caller linked to a contact asks for their meetings or opens an available meeting directly. The meeting page includes preparation information according to publication and audience checks. Current committee participants and people recorded on the meeting receive a broader meeting view than other portal readers, including its video details. Staff notes are omitted from meeting pages, although calendar descriptions require separate consideration. A recorded participant can answer their invitation, and a meeting chair or liaison can help another participant or record attendance. Those portal changes stop when the meeting ends. Minutes become readable in the permitted audience after circulation, and even public minutes visibility uses an authenticated portal operation. For a readable decision, the caller sees the motion, the explained rule and their own participation information. An eligible caller can submit a recorded asynchronous vote using their own appointment. After the decision closes, the page provides the result and explanation. Inaccessible meetings, draft decisions and other denied record reads appear missing. The product should reconcile these active operations with the recorded decision to disable meeting access until the deferred portal stage.

## Relationships

- Meeting scheduling supplies the records participants follow.
- Decision management owns the motion, eligibility snapshot and recorded votes.
- Recusal management lets an eligible participant declare their own conflict.
