---
id: STATE-CMT-MTG-002
title: Agenda Status
object: DOM-CMT-MTG-001
product_area: committees
module: meetings
revision: 2
status: draft
design_intent: proposed
implementation_evidence: observed
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
states:
  - name: draft
    meaning: The agenda is being prepared and is omitted from portal display.
  - name: published
    meaning: >-
      Participants may read the released agenda, while staff can still edit its
      items before the meeting begins.
  - name: final
    meaning: 'The meeting has begun or closed, so ordinary agenda edits are refused.'
transitions:
  - from: draft
    to: published
    trigger: Staff release a draft agenda.
    guard: The meeting remains draft or scheduled and its version matches.
    side_effects:
      - >-
        Record agenda publication and prepare one notice occasion for
        non-declined participants.
    who: Staff holding meeting management permission
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meetings.ts:publishAgenda;
      services/lifecycle/meeting-lifecycle.ts:mayPublishAgenda
  - from: draft
    to: final
    trigger: The meeting starts or closes before its agenda was released.
    guard: The meeting is changing to in_progress or held.
    side_effects:
      - Set agenda status to final and refuse further item edits.
    who: Staff holding meeting management permission
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/lifecycle/meeting-lifecycle.ts:agendaStatusAfter
  - from: published
    to: final
    trigger: The meeting starts or closes after agenda publication.
    guard: The meeting is changing to in_progress or held.
    side_effects:
      - Set agenda status to final and refuse further item edits.
    who: Staff holding meeting management permission
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meetings.ts:closeMeeting;
      services/lifecycle/meeting-lifecycle.ts:agendaStatusAfter
invalid:
  - from: published
    to: draft
    why: >-
      Publication has no withdrawal action; editing remains available before
      finalization.
  - from: final
    to: published
    why: Finalization cannot be reversed through publication.
  - from: final
    to: draft
    why: A final agenda cannot return to its working state.
concurrency: >-
  Item writes lock their meeting and allocate fractional sibling keys.
  Whole-agenda reorder additionally checks the meeting version and requires each
  item exactly once.
invariants:
  - INV-DOM-CMT-MTG-001-08
  - INV-DOM-CMT-MTG-001-09
evidence:
  - >-
    services-committees at 36129c24:
    modules/meetings/services/lifecycle/meeting-lifecycle.ts;
    services/persistence/agenda-items.ts, meetings.ts;
    services/agenda/order-key.ts
---
# Agenda Status

## The Lifecycle

```mermaid
stateDiagram-v2
  [*] --> draft
  draft --> published
  draft --> final
  published --> final
```

draft: The agenda is being prepared and is omitted from portal display.

published: Participants may read the released agenda, while staff can still edit its items before the meeting begins.

final: The meeting has begun or closed, so ordinary agenda edits are refused.

## Transitions Explained

Staff release a draft agenda. The meeting remains draft or scheduled and its version matches. Record agenda publication and prepare one notice occasion for non-declined participants.

The meeting starts or closes before its agenda was released. The meeting is changing to in_progress or held. Set agenda status to final and refuse further item edits.

The meeting starts or closes after agenda publication. The meeting is changing to in_progress or held. Set agenda status to final and refuse further item edits.

## What Cannot Happen

Publication has no withdrawal action; editing remains available before finalization. Finalization cannot be reversed through publication. A final agenda cannot return to its working state. An ended meeting also blocks agenda writes independently of agenda status. Publishing is unavailable once the meeting is in progress.

## Concurrency and Timing

Item writes lock their meeting and allocate fractional sibling keys. Whole-agenda reorder additionally checks the meeting version and requires each item exactly once.
