- Bump elixir requirement from ~> 1.19 to ~> 1.20 for gradual typing
- Extract SNMP polling functions from graph_live/show.ex (1492→1118 lines)
into new GraphLive.Polling module (363 lines) — 374 lines net reduction
- Defer subscriber impact API call via start_async/handle_async in
device_live/show.ex, avoiding synchronous Gaiia API call in handle_params
- Add terminate/2 to graph_live/show.ex for live_poll timer cleanup
- Fix .tool-versions to match installed Erlang 27.3.4.2
- Relax AGENTS.md dialyzer policy: allow ignore file for deps/vendored code
Adds e2e smoke tests that verify:
- All major pages load without 500 errors
- No JavaScript console errors
- No LiveView socket crashes (Jason.EncodeError, etc.)
- All activity feed filter types work without encoding errors
Also documents binary UUID fragment query pattern in AGENTS.md
to prevent future Jason.EncodeError issues from PostgreSQL
aggregations returning binary UUIDs instead of text.