Changes
- feat(dashboard): persist table filters, facets, search, sort and pagination in the url
- PR: #2798
- test(e2e): cover monitor -> incident -> on-call -> user alerted end to end
- PR: #2805
- feat(network): site hierarchy, ARP/FDB endpoint discovery, and map drill-down
- PR: #2795
- revert(e2e): loosen createMonitor URL match to fix master e2e regression
- PR: #2824
- fix(analytics): parse ClickHouse count() returned as a JSON number — telemetry monitors never went Offline
- PR: #2826
- Network observability overhaul: one cohesive Network product
- PR: #2827
- Network observability: trap history, device logs, flow analytics v2, per-interface & anomaly alerting, site alerts, NetFlow v9, IPv6
- PR: #2829
- feat(kubernetes): Kubernetes cost observability (OpenCost/Kubecost integration)
- PR: #2828
- docs(i18n): translate Kubernetes cost observability docs into all 15 locales
- PR: #2831
- feat(dashboard): merge Network Devices and Network Sites into one Network products-menu entry
- PR: #2833
- feat(network-devices): devices own polling and data collection; monitors become the alerting layer
- PR: #2835
- fix(analytics): table-qualify aggregate WHERE clauses so SELECT aliases cannot capture them
- PR: #2836
- feat(network): form steps on long forms, configurable site types
- PR: #2837
- feat(slo): SLOs, error budgets, burn-rate alerting and an SLI dashboard widget
- PR: #2838
- fix(kubernetes-cost): make cost.enabled=true work end to end
- PR: #2840
- fix(network): poll schedule timezone skew, topology framing, and device UX gaps
- PR: #2839
- chore(dashboard): delete dead DashboardComponents/Index.ts
- PR: #2841
- feat(kubernetes-agent): diagnose the cost pipeline in troubleshoot.sh
- PR: #2842
- feat(slo): fill the UI/UX gaps in the SLO/SLI product
- PR: #2844
- fix(dashboard): render Kubernetes cost breakdowns with the standard Table
- PR: #2843