---
id: STATE-CMT-MTG-003
title: Recurring Series Status
object: DOM-CMT-MTG-001
product_area: committees
module: meetings
revision: 2
status: draft
design_intent: proposed
implementation_evidence: inconsistent
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
states:
  - name: active
    meaning: >-
      Materialization fills missing occurrence dates in an eighteen-month
      rolling window.
  - name: paused
    meaning: >-
      Materialization makes no new meetings; a pause edit cancels future
      editable occurrences.
  - name: ended
    meaning: 'Materialization stops, but staff may still reactivate or pause the series.'
transitions:
  - from: active
    to: paused
    trigger: Staff pause the series.
    guard: The saved series version matches and recurrence and zone remain valid.
    side_effects:
      - >-
        The subsequent rewrite cancels future draft or scheduled occurrences,
        notifying called meetings.
    who: Staff holding meeting management permission
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meeting-series.ts:updateSeries;
      materializeSeries (rewrite with no wanted dates)
  - from: paused
    to: active
    trigger: Staff resume the series.
    guard: The saved series version matches and the updated rule remains valid.
    side_effects:
      - >-
        Create missing dates without restoring dates already represented by
        cancelled meetings.
    who: Staff holding meeting management permission
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meeting-series.ts:materializeSeries
      (byDate keeps cancelled occurrences)
  - from: active
    to: ended
    trigger: Staff end the series or its committee is dissolved.
    guard: >-
      Staff compares the series version; dissolution acts inside its own
      transaction.
    side_effects:
      - >-
        A staff edit cancels future editable occurrences; dissolution sets an
        end date and silently cancels later committee meetings.
    who: Meeting staff or committee dissolution
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meeting-series.ts:updateSeries;
      services/persistence/committee-dissolutions.ts:cancelMeetingsAfterDissolution
  - from: paused
    to: ended
    trigger: Staff end a paused series or its committee is dissolved.
    guard: >-
      Staff compares the series version; dissolution acts inside its own
      transaction.
    side_effects:
      - >-
        Stop materialization and retain the earlier applicable end date on
        dissolution.
    who: Meeting staff or committee dissolution
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/committee-dissolutions.ts:cancelMeetingsAfterDissolution
  - from: ended
    to: active
    trigger: Staff reactivate an ended series.
    guard: >-
      The version and updated rule pass validation; no terminal-state refusal is
      implemented.
    side_effects:
      - Materialize active dates that have no existing occurrence.
    who: Staff holding meeting management permission
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meeting-series.ts:updateSeries
      (status taken as given)
  - from: ended
    to: paused
    trigger: Staff pause an ended series.
    guard: >-
      The version and updated rule pass validation; no terminal-state refusal is
      implemented.
    side_effects:
      - >-
        Create no new dates and cancel any remaining future editable occurrences
        during rewrite.
    who: Staff holding meeting management permission
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meeting-series.ts:updateSeries
      (status taken as given)
invalid: []
concurrency: >-
  A materialization locks its series, but series saving and materialization are
  separate transactions. The daily pass isolates each series failure and
  database occurrence uniqueness prevents duplicate dates.
invariants:
  - INV-DOM-CMT-MTG-001-03
  - INV-DOM-CMT-MTG-001-04
evidence:
  - >-
    services-committees at 36129c24:
    modules/meetings/db/meeting-series.table.ts;
    services/persistence/meeting-series.ts, committee-dissolutions.ts;
    services/recurrence/recurrence-rule.ts; services/jobs/meetings-jobs.ts
---
# Recurring Series Status

## The Lifecycle

```mermaid
stateDiagram-v2
  [*] --> active
  active --> paused
  paused --> active
  active --> ended
  paused --> ended
  ended --> active
  ended --> paused
```

active: Materialization fills missing occurrence dates in an eighteen-month rolling window.

paused: Materialization makes no new meetings; a pause edit cancels future editable occurrences.

ended: Materialization stops, but staff may still reactivate or pause the series.

## Transitions Explained

Staff pause the series. The saved series version matches and recurrence and zone remain valid. The subsequent rewrite cancels future draft or scheduled occurrences, notifying called meetings.

Staff resume the series. The saved series version matches and the updated rule remains valid. Create missing dates without restoring dates already represented by cancelled meetings.

Staff end the series or its committee is dissolved. Staff compares the series version; dissolution acts inside its own transaction. A staff edit cancels future editable occurrences; dissolution sets an end date and silently cancels later committee meetings.

Staff end a paused series or its committee is dissolved. Staff compares the series version; dissolution acts inside its own transaction. Stop materialization and retain the earlier applicable end date on dissolution.

Staff reactivate an ended series. The version and updated rule pass validation; no terminal-state refusal is implemented. Materialize active dates that have no existing occurrence.

Staff pause an ended series. The version and updated rule pass validation; no terminal-state refusal is implemented. Create no new dates and cancel any remaining future editable occurrences during rewrite.

## What Cannot Happen

 No transition between the three declared statuses is refused solely because of its previous status. The recorded product policy for restoring paused dates and preserving manually moved occurrences remains unimplemented.

## Concurrency and Timing

A materialization locks its series, but series saving and materialization are separate transactions. The daily pass isolates each series failure and database occurrence uniqueness prevents duplicate dates.
