From a8bc20e187a1b342bfd4a3782d5a444485b0ae92 Mon Sep 17 00:00:00 2001 From: Jack Levy Date: Sat, 28 Feb 2026 23:31:35 -0500 Subject: [PATCH] docs: update architecture for v0.2.2 fixes Documents sponsor linking fix, backfill task, member name search split_part approach, search spaces fix, and eager loading fix. Authored-By: Jack Levy --- ARCHITECTURE.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 8769c6b..bcfddc0 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -432,6 +432,7 @@ Auth header: `Authorization: Bearer ` | POST | `/trigger-poll` | Admin | Queue immediate Congress.gov poll. | | POST | `/trigger-member-sync` | Admin | Queue member sync. | | POST | `/trigger-trend-scores` | Admin | Queue trend score calculation. | +| POST | `/backfill-sponsors` | Admin | Queue one-off task to populate `sponsor_id` on all bills where it is NULL. | | GET | `/task-status/{task_id}` | Admin | Celery task status and result. | ### `/api/health` @@ -479,6 +480,8 @@ Auth header: `Authorization: Bearer ` ↳ Fetches bills updated since last poll (fromDateTime param) ↳ Filters: only hr, s, hjres, sjres (legislation that can become law) ↳ First run: seeds from 60 days back + ↳ New bills: fetches bill detail endpoint to get sponsor (list endpoint + has no sponsor data), upserts Member, sets bill.sponsor_id ↳ New bills → fetch_bill_documents.delay(bill_id) ↳ Updated bills → fetch_bill_documents.delay(bill_id) if changed @@ -727,6 +730,13 @@ Nginx uses `resolver 127.0.0.11 valid=10s` (Docker's internal DNS) so upstream c - AuthGuard with login/register pages - Analysis status dashboard (auto-refresh every 30s) +### v0.2.2 — Sponsor Linking & Search Fixes +- **Root cause fixed:** Congress.gov list API does not return sponsor data — only the detail endpoint does. Poller now calls the detail endpoint for each new bill to get the sponsor and populate `bill.sponsor_id` +- **Backfill task:** `backfill_sponsor_ids` Celery task + `/api/admin/backfill-sponsors` endpoint + "Backfill Sponsors" button in Admin UI — fixes existing bills with `NULL` sponsor_id (~10 req/sec, ~3 min for 1,600 bills) +- **Member name search:** members are stored as "Last, First" in the `name` column; search now also matches "First Last" order using PostgreSQL `split_part()` — applied to both the Members page and global search +- **Search spaces:** removed `.trim()` on search `onChange` handlers in Members and Bills pages that was eating spaces as you typed +- **Member bills 500 error:** `get_member_bills` endpoint now eagerly loads `Bill.sponsor` via `selectinload` to prevent Pydantic MissingGreenlet error during serialization + ### v0.2.0 — Citations - **Per-claim citations on AI briefs:** every key point and risk includes: - `citation` — section reference (e.g., "Section 301(a)(2)")