Skip to content

Extract committee membership from meeting minutes #72

@AndreRobitaille

Description

@AndreRobitaille

Summary

When meeting minutes are processed, automatically extract committee membership information (roll call, appointments, resignations, role changes) and update CommitteeMembership records.

Context

The committees and committee_memberships tables exist (added in the committees feature branch). The schema supports role, started_on, ended_on, and source (ai_extracted/admin_manual/seeded). Currently nothing populates memberships automatically — admin UI is the only way to add them.

What to build

A dedicated ExtractCommitteeMembersJob that:

  1. Triggers when meeting minutes are processed (hook into the existing pipeline — likely after SummarizeMeetingJob or when a minutes document's text extraction completes)
  2. Parses roll call — "Present: Smith, Johnson. Absent: Davis" → creates/confirms memberships for that committee
  3. Detects role changes — "Johnson elected Chair" → updates role on the membership record
  4. Detects departures — "Smith announces resignation effective March 1" → sets ended_on
  5. Detects new appointments — "Council appoints Williams to Plan Commission" → creates new membership
  6. Marks records as source: "ai_extracted" so admin can distinguish AI-created records from manual ones

Design considerations

  • The meeting already has a committee_id FK, so we know which committee the roster belongs to
  • Member records may need to be created if a name doesn't match an existing member (fuzzy match against existing names first)
  • Roll call is the most reliable signal — appointment/resignation detection is harder and lower priority
  • Admin edits should take precedence over AI extractions (don't overwrite manually-set ended_on or role)
  • Job must be idempotent — safe to re-run on the same meeting

Not in scope

  • Extracting membership from agenda packets (minutes only)
  • Historical backfill across all past minutes (could be a follow-up)
  • Public-facing committee roster pages (separate feature)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions