7 Commits
Author SHA1 Message Date
kfj001 574bf9cc4a initial commit 2026-09-09 18:20:17 -07:00
kfj001 ace59762cd Adds readme documentation, and startup script. 2026-09-06 20:09:28 -07:00
kfj001 03eeb6bb62 feat(dashboard): add forward "what's next" signal + fix upcoming floor
The daily-file bill queue is a backward snapshot, so "upcoming" could only
resurface the latest past day (the 08-31 snapshot read as today's queue) and
there was no "what is scheduled next." leginfo bill status/history are
backward-only, so the genuine future-dated signal is the chambers' "upcoming
events" calendars.

- api.py: floor the "upcoming" view at *today* (not the DB max date) when no
  as_of is pinned; surface next_legislative_day + scheduled_events (next 7
  days) on /bills. Add _today_iso / _next_legislative_day / _scheduled_events,
  all degrading to a recess marker / [] (never 5xx).
- relational.py: schema v2 adds the scheduled_events table +
  store_scheduled_events (idempotent per-day refresh), load_scheduled_events,
  next_legislative_day.
- parsers.py: parse_events_page + classify_event_kind for the chamber events
  calendar; skip empty-title rows (decompose the <time> before the fallback).
- ingest.py + cli.py: --store-events lane (cache-first, recess-safe) that
  parses the calendar HTML into scheduled_events.
- sources.py + config.yaml: register assembly_events / senate_events
  (kind: events, empty_is_ok: true).
- run_ingest.sh: run the events lane after the daily-file lane as non-fatal
  (skippable via CALI_SCRAPER_SKIP_EVENTS=1); daily-file exit still gates cron.
- frontend: "Next legislative day" line + "What's next · next 7 days" band
  with honest recess empty states.
- DASHBOARD.md: document the forward signal + known limitations (leginfo
  backward-only gap, recess empty state, 08-31 snapshot is analysis-only).
- tests: 5 new API tests + 18 parse-events tests; 170 pass, 92% coverage.
2026-09-06 19:50:02 -07:00
kfj001 1919d43bf0 Adds more bill status visibility to the dashboard 2026-09-06 14:29:40 -07:00
kfj001 a104685daf fix(dashboard): point View link at the live leginfo bill page
The /bill/<session>/<ABn> path now 404s for every bill and hardcoded
'AB', so Senate bills were broken too. Build the link from the canonical
bill_id via the working faces/billNavClient.xhtml?bill_id= endpoint,
which returns 200 for both Assembly and Senate bills. Drop the now-dead
billNum() helper it was the only caller of.
2026-09-06 12:31:49 -07:00
kfj001 97d125ca0a fix(dashboard): repair bill row layout and escaped 'time TBD' placeholder
- app.js: use plain-text 'time TBD' fallback so it isn't re-escaped by
  esc() and rendered as literal <span class="meta"> markup
- style.css: widen the row's first grid column 22px->76px and add
  white-space:nowrap to .row .num so the chamber chip + bill number
  stop colliding with the title
2026-09-06 12:06:44 -07:00
kfj001 5f2db08b43 Initial commit 2026-09-06 10:18:26 -07:00