-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
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:
- Triggers when meeting minutes are processed (hook into the existing pipeline — likely after
SummarizeMeetingJobor when a minutes document's text extraction completes) - Parses roll call — "Present: Smith, Johnson. Absent: Davis" → creates/confirms memberships for that committee
- Detects role changes — "Johnson elected Chair" → updates
roleon the membership record - Detects departures — "Smith announces resignation effective March 1" → sets
ended_on - Detects new appointments — "Council appoints Williams to Plan Commission" → creates new membership
- Marks records as
source: "ai_extracted"so admin can distinguish AI-created records from manual ones
Design considerations
- The meeting already has a
committee_idFK, so we know which committee the roster belongs to Memberrecords 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_onorrole) - 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)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels