---
id: WF-CMT-MTG-008
title: Approve and Correct Minutes
trigger: >-
  An authorized caller requests approval or correction, or a linked approval
  decision carries.
product_area: committees
module: meetings
revision: 2
status: draft
design_intent: open
implementation_evidence: inconsistent
inference: []
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
implements:
  - CAP-CMT-MTG-008
moves:
  - STATE-CMT-MTG-004
  - STATE-CMT-MTG-006
crosses:
  - SVC-CMT-MTG-meetings
  - SVC-CMT-MTG-decisions
  - SVC-PFM-NOT-communications
idempotency: >-
  Approval checks that minutes are still circulated and refuses an already
  approved or amended revision. Approval notices use revision and body hash as
  their occasion.
concurrency: >-
  Preparation reads the minutes and rules in one transaction. Decision-based
  approval follows in another and rechecks minutes status at consequence time;
  asynchronous decisions remain open until voting closes.
hops:
  - 'n': 1
    actor_or_service: Meetings API (decisions code)
    action: >-
      Lock the meeting and current minutes, compare the minutes version and
      inspect the approval rule.
    anchor: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
    seam: sync
    on_failure: 'Reject missing, stale or non-circulated minutes.'
    left_inconsistent: No approval is recorded.
    observer: The operation response.
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
  - 'n': 2
    actor_or_service: Decisions service
    action: >-
      If the rule requires no vote, record the caller’s direct approval in that
      transaction.
    anchor: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMinutesRow
    seam: sync
    on_failure: Roll back approval on failure.
    left_inconsistent: No partial approval.
    observer: The saved approval record.
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMinutesRow
  - 'n': 3
    actor_or_service: Decisions service
    action: >-
      Otherwise open a linked approval decision in a second transaction;
      asynchronous methods remain open, while meeting methods record votes or a
      supplied tally, defaulting a missing tally to declared carried, before
      closing.
    anchor: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
    seam: sync
    on_failure: Roll back the decision transaction if any step fails.
    left_inconsistent: Preparation performed only reads when a vote was required.
    observer: The operation response.
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:approveMeetingMinutes
  - 'n': 4
    actor_or_service: Decisions service
    action: >-
      On a carried approval, approve the revision, amend its predecessor if
      applicable, and prepare the approval event and notices.
    anchor: >-
      services-committees:modules/decisions/services/consequences/consequences.ts:applyConsequences
    seam: sync
    on_failure: Roll back the close when approval is refused.
    left_inconsistent: A skipped notice has no scheduled recovery.
    observer: Warning entries in the function log.
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/consequences/consequences.ts:applyConsequences
  - 'n': 5
    actor_or_service: Meetings API (decisions code)
    action: >-
      Start a correction as the next empty draft revision and point the meeting
      at it.
    anchor: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:correctMinutes
    seam: sync
    on_failure: Refuse correction unless the current revision is approved.
    left_inconsistent: No partial correction.
    observer: The operation response.
    provenance: observed
    source: >-
      services-committees:modules/decisions/services/minutes/minutes-approval.ts:correctMinutes
branches: []
waits: []
evidence:
  - >-
    services-committees at 36129c24:
    modules/decisions/services/minutes/minutes-approval.ts;
    services/persistence/minutes-approvals.ts;
    services/consequences/consequences.ts; docs/milestones/plans/CMTE-M3-plan.md
    (Not approved)
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
---
# Approve and Correct Minutes

## What It Does

An authorized caller requests approval or correction, or a linked approval decision carries. Direct approval verifies permission rather than chair identity. Product still needs to settle approving authority and voting evidence. A later correction preserves the approved body and becomes the new current draft; it does not rewrite the old text.

## The Flow

```mermaid
flowchart TD
  H1["Lock the meeting and current minutes, compare the minutes version and inspect the approval rule."]

  H2["If the rule requires no vote, record the caller’s direct approval in that transaction."]
  H3["Otherwise open a linked approval decision in a second transaction"]
  H4["On a carried approval, approve the revision, amend its predecessor if applicable, and prepare the approval eve"]
  H5["Start a correction as the next empty draft revision and point the meeting at it."]
  H1 --> H2
  H2 --> H3
  H3 --> H4
  H4 --> H5
```

Lock the meeting and current minutes, compare the minutes version and inspect the approval rule. If the rule requires no vote, record the caller’s direct approval in that transaction. Otherwise open a linked approval decision in a second transaction; asynchronous methods remain open, while meeting methods record votes or a supplied tally, defaulting a missing tally to declared carried, before closing. On a carried approval, approve the revision, amend its predecessor if applicable, and prepare the approval event and notices. Start a correction as the next empty draft revision and point the meeting at it.

## When Something Fails

Reject missing, stale or non-circulated minutes. No approval is recorded. Roll back approval on failure. No partial approval. Roll back the decision transaction if any step fails. Preparation performed only reads when a vote was required. Roll back the close when approval is refused. A skipped notice has no scheduled recovery. Refuse correction unless the current revision is approved. No partial correction.

## Open Design Questions

Direct approval verifies permission rather than chair identity. Product still needs to settle approving authority and voting evidence. A later correction preserves the approved body and becomes the new current draft; it does not rewrite the old text.
