---
id: WF-CMT-MTG-003
title: Remind Meeting Participants
trigger: 'The meetings job runs daily at 06:41 UTC and hourly at minute 11.'
product_area: committees
module: meetings
revision: 1
status: draft
design_intent: proposed
implementation_evidence: inconsistent
inference: []
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
implements:
  - CAP-CMT-MTG-006
crosses:
  - SVC-CMT-MTG-meetings
  - SVC-PFM-NOT-communications
idempotency: >-
  A notice key includes reminder type and meeting start. Repeats for the same
  start are suppressed; moving the start creates a new occasion.
concurrency: >-
  Concurrent sweeps compete for the same unique notice keys, so one request is
  admitted for each key.
hops:
  - 'n': 1
    actor_or_service: Meetings jobs
    action: >-
      Find scheduled meetings beginning within the next 48 hours and the next
      two hours in each active workspace.
    anchor: >-
      services-committees:modules/meetings/services/notifications/reminders.ts:sendDueReminders
    seam: schedule
    on_failure: Record a failed workspace and continue with others.
    left_inconsistent: Its reminder work remains outstanding.
    observer: Job results and execution logs.
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/notifications/reminders.ts:sendDueReminders
  - 'n': 2
    actor_or_service: Meetings jobs
    action: >-
      Submit notices in a separate transaction for each meeting, excluding
      declined invitations.
    anchor: >-
      services-committees:modules/meetings/services/persistence/meeting-notifications.ts:notifyParticipants
    seam: sync
    on_failure: Release a skipped notice key so a later sweep can retry it.
    left_inconsistent: A reminder can be late or never arrive before the meeting starts.
    observer: Warning entries in the function log.
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meeting-notifications.ts:notifyParticipants
  - 'n': 3
    actor_or_service: Meetings jobs
    action: Wake communications after successful submissions.
    anchor: >-
      services-committees:modules/meetings/services/persistence/meetings.ts:afterMeetingCommitted
    seam: event
    on_failure: Rely on scheduled dispatch if the wake-up fails.
    left_inconsistent: Requests remain queued until dispatch.
    observer: Dispatcher execution logs.
    provenance: observed
    source: >-
      services-committees:modules/meetings/services/persistence/meetings.ts:afterMeetingCommitted
branches: []
waits: []
evidence:
  - >-
    services-committees at 36129c24:
    modules/meetings/services/notifications/reminders.ts;
    services/jobs/meetings-jobs.ts; aws/logic/meetings-functions.lambda.ts
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-001
  - 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
---
# Remind Meeting Participants

## What It Does

The meetings job runs daily at 06:41 UTC and hourly at minute 11. The two reminder windows overlap deliberately. Each notice is independently deduplicated, and skipped delivery preparation can be tried again while the meeting remains in its window. Product’s decision to suppress meeting e-mail still needs an implementation switch.

## The Flow

```mermaid
flowchart TD
  H1["Find scheduled meetings beginning within the next 48 hours and the next two hours in each active workspace."]

  H2["Submit notices in a separate transaction for each meeting, excluding declined invitations."]
  H3["Wake communications after successful submissions."]
  H1 --> H2
  H2 --> H3
```

Find scheduled meetings beginning within the next 48 hours and the next two hours in each active workspace. Submit notices in a separate transaction for each meeting, excluding declined invitations. Wake communications after successful submissions.

## When Something Fails

Record a failed workspace and continue with others. Its reminder work remains outstanding. Release a skipped notice key so a later sweep can retry it. A reminder can be late or never arrive before the meeting starts. Rely on scheduled dispatch if the wake-up fails. Requests remain queued until dispatch.

## Open Design Questions

The two reminder windows overlap deliberately. Each notice is independently deduplicated, and skipped delivery preparation can be tried again while the meeting remains in its window. Product’s decision to suppress meeting e-mail still needs an implementation switch.
