⚑ Audit summary: The backend has an executive-memos.yml workflow and a state/executive_memos.json catalog but no output has surfaced. Most likely diagnosis: parsers are empty or only attempt Miami Beach (the only jurisdiction with a clean LTC index), memos_by_id is never read by the dashboard, and the 8h staleness alarm doesn't fire on an empty collection. Miami Beach is the easiest first win — Laserfiche WebLink stores LTCs as sequential PDFs (LTC ###-YYYY), ~10-15 posted per business week, with documented URL patterns. Three of the seven jurisdictions (Miami Beach, Miami-Dade, Coral Gables) have dedicated memo channels; the other four (City of Miami, Pinecrest, South Miami, Hialeah) require an agenda-packet cover-memo extractor.
Side-by-side: channel · platform · build priority
Jurisdiction
Channel
Platform / storage
Build priority
Coral Gables
Mayor's Memos page + ad-hoc CM PDFs
City website + Sites/default/files
Medium
Miami-Dade County
Mayor's Memos and Reports
miamidade.gov + Legistar matter PDFs
2nd
City of Miami
Agenda-packet cover memos only
Legistar / Granicus
Generic extractor
Miami Beach
Letters to Commission (LTC)
Laserfiche WebLink (CityClerk) — direct URL pattern
1st — easiest, highest signal
Pinecrest
Agenda-packet items (Manager comms)
Legistar / Manager page
Generic extractor
South Miami
Inter-Office Memorandum PDFs
DocumentCenter + Agenda Center + Laserfiche
Generic extractor
Hialeah
Mayor cover memos on agenda items
CivicEngage Agenda Center
Generic extractor
Miami Beach — Letters to Commission (gold standard)
2026 LTCs not yet in Google's index — Phase 3 build will pull them directly from the Laserfiche cabinet and/or the city's LTC index page.
Build path: Parse the city's LTC index page (HTML, no JS rendering, easier than Laserfiche direct). Store LTC#, date, subject, doc URL, jurisdiction tag in memos_by_id. For live-tree Laserfiche access, the right pattern is a Playwright job that holds cookies — see System Health for the spider workflow once it's added.
Miami-Dade County — Mayor's Memos and Reports
miamidade.gov direct portal + Legistar matter PDF backfill
Build path: Scrape the memos.page listing (stable HTML). Items include ITRs (Information Transmittal Reports). Pair with Legistar matter-PDF backfill for memos cited as backup in agenda items.
Build path: Scrape Mayor's Memos page + glob over sites/default/files/{yyyy}-{mm}/ filtering for "Memo" in filename. Note: URL still references "Lago" — confirm current mayor's slug. Mayor Vince Lago is currently serving (re-elected April 2025).
Current CMJames Reyes (confirmed Jan 8, 2026, salary $475k)
Build path: No standalone memo channel. New City Manager James Reyes (sworn under Mayor Eileen Higgins, Jan 2026). Manager memos surface as backup on Legistar agenda items only. Non-agenda memos require a PRR — flag for Phase 4 standing template.
South Miami — Inter-Office Memoranda
DocumentCenter + Agenda Center + Laserfiche (e-docs)
Current CMGenaro "Chip" Iglesias, Ed.D., MBA, ICMA-CM
Build path: South Miami runs its own Laserfiche instance (same WebLink platform as Miami Beach — same URL patterns apply). Worth checking whether the SoMi Laserfiche tree mirrors Miami Beach's taxonomy for LTCs.
Village of Pinecrest — Manager comms via Council packet
Current MayorBryan Calvo (sworn Jan 12, 2026 — youngest in city history; signed executive orders on retirement payouts, contract review, transparency)
Build path: Hialeah is a strong-mayor city (no city manager). Mayor comms enter the record only as cover memos on Council agenda items. Generic agenda-packet extractor walks each packet PDF and regex-matches "MEMORANDUM / TO: Honorable Mayor and Council" on pages 1-3. Watch for Calvo's executive-order memoranda flowing through this channel.
Build sequence (7-day push)
1. Confirm repo state — paste executive-memos.yml + first 200 lines of state/executive_memos.json, or grant a read token to the workspace. Rule out the "file doesn't actually exist" case.
2. Stand up the Miami Beach LTC parser. Source: city-maintained LTC index page (HTML, no JS rendering). Easier and more reliable than crawling Laserfiche directly. Highest signal in the system.
4. Add Coral Gables dual-source parser (Mayor's Memos page + glob over CM PDFs).
5. Build the generic agenda-packet cover-memo extractor (used by City of Miami, Pinecrest, South Miami, Hialeah). pdfplumber + regex on first 3 pages for "MEMORANDUM" + "TO: Honorable Mayor".
6. Write a memos_by_id → dashboard adapter so the morning view has a "Last 14 days, by jurisdiction" section. Render with memo#, date, subject, source URL, jurisdiction tag.
7. Fix the staleness rule — empty-collection-after-a-business-hours-run should fire alarm, not stay green. Current 8h check needs a "rows written this run" check, not just "file mtime".
8. Add a per-jurisdiction last-seen counter to the daily heartbeat so silent failures (e.g., Laserfiche schema change) become visible.