---
id: CAP-CMT-MTG-007
title: Prepare minutes for committee review
feature: FEAT-CMT-MTG-02
product_area: committees
module: meetings
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - 'react-console acceptance inventory CAP-CMT-MTG-016, 017, 019'
  - react-console acceptance journeys CMT-ACC-0237 to 0239
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#D7'
  - 'services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#D12'
purpose: >-
  The secretary turns recorded agenda notes into reviewable minutes and returns circulated text to
  draft when further editing is needed.
outcomes:
  - An assembled draft uses the meeting’s agenda and attendance
  - Saved text has a reproducible fingerprint
  - Circulated text returns to draft before further editing
concepts:
  - CON-CMT-MTG-002
actors:
  - ACT-CMT-002
  - ACT-CMT-008
surfaces:
  - api
preconditions:
  - >-
    Notes require a scheduled, in-progress or held meeting; new minutes require proceedings to have
    begun.
postconditions:
  - Circulated minutes are available through the committee’s permitted portal audience.
permissions:
  - key: committees.meetings.read
    where_checked: api
    scope: tenant
  - key: committees.meetings.manage
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-CMT-MTG-007-01
    statement: >-
      Notes can be appended to an item belonging to a scheduled, in-progress or held meeting, with
      the recording actor and time retained and no note-update operation exposed.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: 'services-committees:modules/meetings/services/persistence/meeting-item-notes.ts:addItemNote'
    origin: none
  - id: BR-CAP-CMT-MTG-007-02
    statement: >-
      Minutes may first be drafted for an in-progress or held meeting, and saving or assembling
      creates a draft when none exists.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/minutes-rule.spec.ts#drafts the
      minutes of a meeting in progress or held, and of no other
    origin: none
  - id: BR-CAP-CMT-MTG-007-03
    statement: >-
      Assembly replaces draft text with a meeting heading, attendance groups, agenda-ordered
      numbered item sections and a final empty decisions section, omitting ordinary notes for
      deferred items.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: 'services-committees:modules/meetings/services/minutes/minutes-rule.ts:assembleMinutes'
    origin: none
  - id: BR-CAP-CMT-MTG-007-04
    statement: >-
      Assembly substitutes a confidentiality notice for an executive-session item’s notes rather
      than copying those notes into the draft.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/minutes-rule.spec.ts#keeps an
      executive-session item’s notes out of the minutes (premise: the note was given)
    origin: >-
      CMTE-M3 D12 item 9 (Andrew 2026-10-21,
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions)
  - id: BR-CAP-CMT-MTG-007-05
    statement: Each saved minutes body receives the SHA-256 fingerprint of its stored UTF-8 bytes.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/minutes-rule.spec.ts#is the SHA-256
      of the UTF-8 bytes, in hex
    origin: none
  - id: BR-CAP-CMT-MTG-007-06
    statement: >-
      Existing minutes require their current version for saving or assembly, and only draft minutes
      permit body changes.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/e2e/minutes.e2e.spec.ts#refuses a save of
      circulated minutes with 409, minutes_circulated
    origin: none
  - id: BR-CAP-CMT-MTG-007-07
    statement: >-
      The save boundary accepts non-blank text up to 2,000,000 UTF-8 bytes and stores it through
      file preparation, which rejects HTML-looking bodies.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/meetings/aws/api/meetings.schemas.ts:minutesSaveSchema;
      services-committees:modules/meetings/services/minutes/minutes-body.ts:MINUTES_BODY_MAX_BYTES
    origin: none
  - id: BR-CAP-CMT-MTG-007-08
    statement: >-
      Circulation requires draft minutes with a saved body and a held meeting, and records the
      circulation time.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/minutes-rule.spec.ts#circulates a
      draft with a body of a held meeting
    origin: >-
      CMTE-M3 D7 (Andrew 2026-10-21,
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions)
  - id: BR-CAP-CMT-MTG-007-09
    statement: >-
      Reverting circulated minutes clears their circulation time and permits editing before they are
      circulated again.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/integration/services/minutes.integration.spec.ts#reverts
      circulated minutes to a draft, clearing when they were circulated
    origin: >-
      CMTE-M3 D7 (Andrew 2026-10-21,
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions)
  - id: BR-CAP-CMT-MTG-007-10
    statement: 'Database version history retains the author of each save, circulation and return to draft.'
    kind: invariant
    enforced_at:
      - database
    must_prove: false
    provenance: observed
    source: 'services-committees:modules/meetings/db/minutes.table.ts'
    origin: none
  - id: BR-CAP-CMT-MTG-007-11
    statement: >-
      API text input is trimmed before minutes and note validation and storage, so saved
      fingerprints describe the normalised minutes text rather than the original submitted
      whitespace.
    kind: calculation
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0238.spec.ts#CMT-ACC-0238
    origin: none
scenarios:
  - id: SC-CAP-CMT-MTG-007-01
    given: A board meeting has closed with notes on its ordinary and executive-session agenda items
    when: The secretary requests an assembled draft
    then: >-
      The draft follows agenda order and includes the executive-session heading and confidentiality
      notice without its notes
    provenance: test
    source: >-
      react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0237.spec.ts#CMT-ACC-0237
edge_cases: []
constraints: []
depends_on:
  - CAP-CMT-MTG-001
  - CAP-CMT-MTG-004
related:
  - CAP-CMT-MTG-008
  - CAP-CMT-MTG-009
journeys:
  - JNY-CMT-MTG-001
open_questions: []
evidence:
  - >-
    services-committees at 36129c24: Item-note capture, minutes assembly, body preparation,
    circulation and return to draft.
  - >-
    react-console at baf6dae3: the meeting acceptance specifications cited by this capability and
    its acceptance set.
controls:
  - TC-IAM-006
  - 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-SEC-001
  - TC-SEC-004
  - TC-CRY-004
  - TC-DAT-001
  - TC-DAT-002
  - TC-DAT-003
  - TC-LOG-002
  - TC-LOG-003
  - TC-LOG-004
  - TC-LOG-005
  - TC-AVL-004
  - TC-MON-001
  - TC-MON-002
  - TC-PI-001
  - TC-PI-002
  - TC-PI-003
  - TC-PI-004
  - TC-PI-005
  - TC-PRV-001
  - TC-PRV-002
---

# Prepare minutes for committee review

## Purpose

Minutes let the committee review a written account of its meeting. The secretary can start from captured notes and refine the draft before sharing it.

## How It Works

Staff append notes against agenda topics with recording attribution. A draft can be created once proceedings begin, and meeting closure supplies an empty draft when needed. Assembly provides a starting document rather than a completed approved record. It groups attendance, follows agenda order and leaves a decisions section for later completion. Executive-session notes are excluded from generated text, while deferred topics receive a deferral notice. The secretary can replace the draft body and must use its current version. API saves trim surrounding whitespace, so the saved fingerprint describes the normalised text. File preparation can reject a body before it replaces the existing text. Circulation makes a held meeting’s saved draft available for review and prevents direct editing. Returning it to draft allows corrections before another circulation. Approval and correction of the permanent record belong to the next capability.

## Relationships

Agenda and attendance supply assembly inputs. Meeting communications own notice selection and deduplication. Minutes approval takes the reviewed text into the permanent record.
