Skip to content

Enrich topic Record entries with meeting content and links #89

@AndreRobitaille

Description

@AndreRobitaille

Problem

Topic page Record timeline entries are mostly low-information. For a topic like "lead service lines" (23 appearances, impact score 5), 8 of 10 Record entries say variations of "appeared on the agenda." Only 2 entries have substantive content (dollar amounts, contract details, scope).

Record entries also don't link to meeting pages — committee names and dates are plain text. A resident who wants to dig deeper hits a dead end.

Current State

Record entries come from `TopicBriefing.generation_data["factual_record"]`, an array of `{"date", "event", "meeting"}` hashes generated by `analyze_topic_briefing` (Pass 1). The generation prompt asks for factual record entries but doesn't have access to per-meeting summary content, so it can only work with agenda item titles and raw document text.

The entries render in `topics/show.html.erb` as a timeline (`.topic-timeline-entry`) with date, event text, and meeting name. Meeting name is plain text, not a link.

What Should Change

1. Make Record entries link to meeting pages

Each `factual_record` entry has a `"meeting"` field (e.g., "Public Utilities Committee"). Cross-reference with `TopicAppearance` records to find the actual `Meeting` record for that date + body name. Render the meeting name as a link to `meeting_path(meeting)`.

This is a view-layer change — the data already exists in `TopicAppearance`, just needs to be joined.

2. Enrich "appeared on the agenda" entries

Options (in order of preference):

  • Use `MeetingSummary.generation_data` item details — if the meeting has a summary with `item_details` that mentions this topic, pull the item's summary text as the Record entry instead of "appeared on the agenda"
  • Use the agenda item title — at minimum, show the actual agenda item title instead of "appeared on the agenda"
  • Improve the briefing prompt — give `analyze_topic_briefing` access to meeting summary content so it can generate richer factual record entries

3. Hide "appeared on the agenda" entries below a threshold

If an entry has no substantive content beyond "appeared on the agenda," consider:

  • Collapsing low-information entries behind a "Show all" toggle
  • Or filtering them out entirely and only showing entries with real content
  • Or grouping consecutive low-info entries ("Appeared on 4 committee agendas between Aug–Oct 2025")

Context

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