Explorer: calendar page (#137) #170
No reviewers
Labels
No labels
area:ai
area:ci-cd
area:notifications
area:observability
area:public-pages
backlog
bug
duplicate
enhancement
help wanted
invalid
question
type:decision
type:feature
type:infra
type:maintenance
type:security
v1.0.1
v1.1.0
v1.2.0
v1.3.0
v2.0.0
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/WeatherBot!170
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/explorer-calendar"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #137. First of the Explorer's three views, over the merged correlation layer (#135).
What this adds
GET /explorer— a server-rendered month calendar of weather-event activity across all locations the user can see. Per the issue's constraints: no new JS dependencies (first calendar in the app, built as a server-rendered grid), plain-GET month navigation with clamping to [retention horizon, current month], and the standardvisible_location_filterapplied.severity-badgeclasses; lightning-only activity ranks lowest), linking to/explorer/{date}(day view, #138 — next PR)./statsunbounded-history anti-pattern the issue calls out.Review fix
The initial implementation followed the dashboard page's "service owns its own
AsyncSessionLocal" pattern — which turns out to be untestable (no page route in the app has fixture coverage, and all six page tests failed on real infrastructure trying to resolve the production DB host). The route now injects the request-scoped session viaDepends(get_db), which the fixtures override — making/explorerthe first page route with real test coverage. Worth a follow-up thought for the other page routes.Verification
Full bulk suite on the dev server: 927 passed (27 new: grid construction, day-state precedence, DST-boundary bucketing, render for all three roles, visibility exclusion, shared-location access, soft-delete inclusion, month clamping and malformed-param fallback).
ruffclean. No migrations.🤖 Generated with Claude Code