|
2 | 2 |
|
3 | 3 | ## [Unreleased] |
4 | 4 |
|
5 | | -- Made dashboard navigation responsive again after the 0.7.0 gunicorn+gevent migration exposed a freeze where the dashboard's 8 sequential SQLite queries (~4.5s) blocked the single event loop, queueing any concurrent click behind them and pushing `/api/health` p99 to 4.4s during normal browsing. API DB work now runs on a dedicated thread executor (90s job timeout), the four per-period summary queries collapse into one CTE, `/api/dashboard` and `/api/auth/status` get short TTL caches (10s/30s) with single-flight and explicit invalidation on every mutation that affects them (broadcast, single/batch delete, settings, finished imports), and `get_latest_detections(unique=True)` expands its bounded prefetch window before falling back to a full grouping query when one noisy species dominates recent rows. Cold-miss `/api/dashboard` drops from ~4.5s to <500ms; `/api/health` p99 from 4428ms to 1873ms |
6 | | -- Fixed the dashboard summary stats (Most Common, Rarest, Most Active Hour) rendering inconsistent species names across periods when a common name changed over the DB's history (typically after a V2→V3 model upgrade) — each species now resolves to a single canonical name from its most recent detection, and equal-count tie-breaks on the per-period species and hour picks are pinned alphabetically so low-activity-day selections no longer flap call-to-call |
7 | | -- Fixed the Charts page showing "No bird activity recorded for this day." and "No detection data available for the selected period." during the initial fetch instead of after it resolved empty, and fixed a stale chart leaking under the new date label when a trends refetch failed — loading, error, and empty are now three distinct states (matching the Dashboard pattern), failed refetches destroy the prior chart, and an initial-mount race that left the trends canvas blank until the user nudged the date range is also resolved |
8 | | -- Fixed the bird detail page showing "No recordings available for this species" during the initial fetch and a blank distribution chart while it was still loading — recordings and chart now each show a spinner until their first fetch resolves, a failed chart fetch surfaces "Couldn't load chart data." instead of conflating with the empty-period message or leaving the prior chart drawn under a new period's label, and the Wikimedia image fetch is decoupled so a slow image lookup can't strand the other two |
| 5 | +## [0.7.1] - 2026-05-21 |
| 6 | + |
| 7 | +- Sped up Bird Gallery tab loading — the Species Catalog drops its per-species `/api/bird/<name>` fan-out (`/api/species/all` now returns `last_detected` directly), `get_species_sightings()` is rewritten as one GROUP BY pass instead of three full table scans, `/api/sightings` and `/api/species/all` gain a single-flight cache, card images load in a bounded background pool that no longer blocks the tab switch, and visited tabs are cached |
| 8 | +- Changed Dashboard Summary to load only the visible Today tab up front and lazy-load 7-Day, 30-Day, and All Time on selection, keeping the initial `/api/dashboard` payload small |
| 9 | +- Fixed dashboard navigation freezing after the 0.7.0 gunicorn+gevent migration — the dashboard's sequential SQLite queries blocked the single gevent event loop, stalling any concurrent request behind them. API DB work now runs on a dedicated thread executor, the per-period summary queries collapse into one CTE, and `/api/dashboard` and `/api/auth/status` gain short-TTL single-flight caches invalidated on every relevant mutation |
| 10 | +- Fixed dashboard summary stats (Most Common, Rarest, Most Active Hour) showing inconsistent species names across periods when a common name changed over the DB's history (typically after a V2→V3 upgrade) — each species now resolves to one canonical name from its most recent detection, and equal-count tie-breaks are pinned alphabetically so low-activity picks no longer flap |
| 11 | +- Fixed the Charts page flashing empty-state messages during the initial fetch instead of after it resolved, a stale chart leaking under the new date label on a failed trends refetch, and an initial-mount race that left the trends canvas blank until the date range was nudged — loading, error, and empty are now three distinct states |
| 12 | +- Fixed the bird detail page flashing "No recordings available" during the initial fetch and showing a blank distribution chart while it loaded — recordings and chart each show a spinner until their first fetch resolves, a failed chart fetch surfaces a distinct error, and the Wikimedia image fetch is decoupled so a slow image lookup can't stall the other two |
9 | 13 | - Fixed Hourly Activity heatmap cells not deep-linking into the Table on the Charts page |
10 | 14 |
|
11 | 15 | ## [0.7.0] - 2026-05-18 |
|
0 commit comments