Operations & console — a real deploy button, alarms, and recoverable tenants.
New Tenant Trash + one-click restore
Deleting a tenant is now a soft delete — it moves to a Trash view, deactivated and hidden but fully recoverable. Restore brings it back with its API keys and enrollments intact; access is gated on tenant status so a trashed tenant can’t authenticate.
New Sidebar admin console
The console moved from a top nav to a persistent sidebar + topbar. Dashboard, Users, Trash, and Docs in the rail; edge config & QR generation live under tenant Settings.
New One-click production deploy
The Deploy prod (API + Web) GitHub Actions workflow is a manual button with a stack selector (all / api / web / data). It validates, runs the CDK deploy, applies DB migrations in-VPC, and smoke-tests — authenticating via a repo-scoped OIDC role.
New Observability alarms
CloudWatch alarms wired to SNS now cover ALB 5xx, unhealthy hosts, p99 latency, CPU/memory, and a tenant-MQTT broker-flap detector — so silent failures page someone instead of hiding in the logs.
Fix MQTT broker reconnect flapping
Each API/worker task connected to a tenant broker with the same client id, so autoscaled tasks kicked each other off in a loop. Each task now uses a unique per-instance client id; connections are stable.
New Edge stream-state
Admins can pause/resume an edge’s stream (“system closed”); desired state is delivered on the device heartbeat and the device reports its actual state back.