---
id: CAP-CMT-MTG-008
title: Approve minutes and preserve later corrections
feature: FEAT-CMT-MTG-02
product_area: committees
module: meetings
revision: 1
status: draft
product_intent: proposed
implementation_evidence: inconsistent
supersedes:
  - react-console acceptance inventory CAP-CMT-MTG-018
  - 'react-console acceptance journeys CMT-ACC-0240 to 0242, 0342'
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-M7-governance-oversight.md#D1'
purpose: >-
  Committee review produces a protected minutes record, with subsequent corrections linked as
  separate revisions.
outcomes:
  - Approval protects the circulated text and fingerprint
  - Corrections retain a link to the earlier approved revision
  - The committee’s rules select voting or direct approval
concepts:
  - CON-CMT-MTG-002
actors:
  - ACT-CMT-002
  - ACT-CMT-009
surfaces:
  - api
preconditions:
  - >-
    Approval requires circulated minutes; starting a correction requires the current approved
    revision.
postconditions:
  - Approval retains the circulated body fingerprint.
permissions:
  - key: committees.minutes.manage
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-CMT-MTG-008-01
    proved_by: [ATS-CMT-MTG-008-01, ATS-CMT-MTG-008-15, TST-CMT-MTG-064, TST-CMT-MTG-119]
    statement: Approval requires circulated minutes and refuses records already approved or amended.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
    origin: none
  - id: BR-CAP-CMT-MTG-008-02
    proved_by: [ATS-CMT-MTG-008-02, ATS-CMT-MTG-008-14, ATS-CMT-MTG-012-12, TST-CMT-MTG-121, TST-CMT-MTG-189, TST-CMT-MTG-195]
    statement: >-
      When committee rules require an approval vote, an approval decision uses their selected
      method; otherwise the permission-bearing caller approves directly and is recorded as the
      approving actor without a chair-role check.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
    origin: none
  - id: BR-CAP-CMT-MTG-008-03
    proved_by: [ATS-CMT-MTG-008-03, TST-CMT-MTG-119]
    statement: >-
      A meeting-based approval requires an approving meeting, while an asynchronous approval opens
      with its closing time and takes effect only when its decision closes carried.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
    origin: none
  - id: BR-CAP-CMT-MTG-008-04
    proved_by: [ATS-CMT-MTG-007-13, ATS-CMT-MTG-008-04, ATS-CMT-MTG-008-13, TST-CMT-MTG-189, TST-CMT-MTG-195]
    statement: >-
      Approval preserves the circulated body and fingerprint, and the database protects approved
      content while permitting transition to amended and changes to version metadata.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: observed
    source: 'services-committees:db/migrations/20261018142034_decisions.sql:minutes_approved_frozen_check'
    origin: none
  - id: BR-CAP-CMT-MTG-008-05
    proved_by: [ATS-CMT-MTG-008-05, TST-CMT-MTG-119, TST-CMT-MTG-195]
    statement: >-
      Starting a correction creates the next draft revision linked to the approved original, points
      the meeting to that new draft, and marks the original amended when the correction is approved.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/decisions/tests/integration/services/consequences.integration.spec.ts#starts
      a correction as the next revision, superseding them
    origin: none
  - id: BR-CAP-CMT-MTG-008-06
    proved_by: [ATS-CMT-MTG-008-06, TST-CMT-MTG-189]
    statement: The API requires minutes-management permission for approval and creation of a correction.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#refuses minutes approval
      to a caller without committees.minutes.manage, 403
    origin: none
  - id: BR-CAP-CMT-MTG-008-07
    proved_by: [ATS-CMT-MTG-008-07, TST-CMT-MTG-195]
    statement: >-
      Approval records a business event and submits the configured approval notices for the
      meeting’s participants.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-committees:modules/decisions/tests/integration/services/consequences.integration.spec.ts#tells
      the meeting’s participants they were approved
    origin: none
  - id: BR-CAP-CMT-MTG-008-08
    proved_by: [ATS-CMT-MTG-008-08]
    statement: >-
      The product should limit the meetings milestone to circulated minutes and introduce approval
      and correction with the decisions milestone.
    kind: policy
    enforced_at: []
    must_prove: true
    provenance: documented
    source: 'services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions'
    origin: >-
      CMTE-M3 D7 (Andrew 2026-10-21,
      services-committees:docs/milestones/CMTE-M3-meetings-and-minutes.md#Decisions)
  - id: BR-CAP-CMT-MTG-008-09
    proved_by: []
    statement: >-
      The minutes-awaiting-approval definition describes overdue draft or circulated minutes, but
      remains withheld from registration, publication, resolution and sweeps until the volunteer
      phase.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: observed
    source: >-
      services-committees:aws/committees.attention.ts:ATTENTION_REGISTRATION;
      services-committees:lib/attention.ts:committeesAttention
    origin: >-
      CMTE-M7 D1 (Andrew 2026-10-21,
      services-committees:docs/milestones/CMTE-M7-governance-oversight.md#Decisions)
  - id: BR-CAP-CMT-MTG-008-10
    proved_by: [ATS-CMT-MTG-008-12]
    statement: >-
      Approval and correction require the current minutes version, and tally-based approval without
      supplied counts defaults to a declaration that the motion carried.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes;
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:correctMinutes
    origin: none
scenarios:
  - id: SC-CAP-CMT-MTG-008-01
    given: The board’s November minutes have circulated and December’s meeting has recorded quorum
    when: Staff record a carried voice approval at December’s meeting
    then: >-
      The November minutes become approved with their circulated fingerprint and an approving
      decision reference
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
edge_cases: []
constraints: []
depends_on:
  - CAP-CMT-MTG-007
  - CAP-CMT-MTG-010
related:
  - CAP-CMT-MTG-012
journeys:
  - JNY-CMT-MTG-002
open_questions:
  - OQ-CMT-MTG-003
evidence:
  - >-
    services-committees at 36129c24: Approval routing, protected minutes content, correction links
    and withheld approval attention.
  - >-
    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-001
  - 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
exercised_by: [FAS-CMT-MTG-02-02, FAS-CMT-MTG-02-03, FAS-CMT-MTG-02-04]
suites: [TST-CMT-MTG-064, TST-CMT-MTG-119, TST-CMT-MTG-121, TST-CMT-MTG-189, TST-CMT-MTG-195]
---

# Approve minutes and preserve later corrections

## Purpose

Approval establishes the reviewed text as the committee’s protected meeting record. A correction adds another revision so the original account remains distinguishable from its replacement.

## How It Works

Staff begin with circulated minutes and the current version. The committee’s rules choose whether approval requires a governance decision. Meeting-based methods use an approving meeting and its voting context, while asynchronous methods leave an open decision to close later. Direct approval records the authorised caller without independently checking a chair role. A tally method can also default to declared carried when staff omit counts. Those behaviours need Product review rather than being described as verified chair actions. Approval preserves the circulated body and fingerprint. Starting a correction points ordinary meeting reads at a new empty draft; the earlier approved text remains a separate revision. The secretary completes review of that draft before another approval. The implementation contains an overdue-minutes attention definition, but it is withheld from publishing as well as from Home. The approved milestone boundary and the available approval workflow still differ.

## Relationships

Minutes preparation supplies circulated text. Decision recording supplies vote-based approval, and carried-decision consequences perform the resulting minutes change.
