← All docs changelog/2026-W21.md

Week 21 — May 19 – 25, 2026

Summary

Two big themes: the deploy dashboard went from zero to a production-ready pipeline visualization, and the app topology was consolidated from many small Modal functions into three groups. The deploy dashboard (static.grizzlebear.io/deploy-dashboard/) gained env cards with status chips, promote/test/approve-prod buttons, live polling with adaptive intervals, pipeline stage toasts, and test progress streaming. On the infrastructure side, eight services were consolidated into three Modal functions (user_data_app, low_priority_app, existing ML/LiveKit), unused services (billing, devices) were deprecated, and the test infrastructure was overhauled with parallel tier-aware Bruno runners and credentials moved out of git.

23 code commits | 116 unique files changed | +3,755 / -856 lines


Highlights

Deploy Dashboard (May 19, 22)

Built from scratch across 14 commits. Phase 5 (read + trigger) established the shell+JSON pattern with env cards and /api/envs. Progressive enhancements added: deploy state per environment, live polling with countdown, fast-forward merge detection, in-flight stage indicators, feature-commit walk, cicd worker state awareness, self-healing dev pushes, and a landing-page card. Dashboard 2.0 (May 22) added per-card status chips (SHA, test pass/fail, commit delta), promote/test action buttons, a gated approve-prod button (only active when beta tests pass on current tip), and failed-test drill-down showing per-folder results.

App Topology Consolidation (May 21)

Eight services were grouped into three Modal functions: low_priority_app (voices + geocoding + capture + static_site), user_data_app (users + data), and the existing ML and LiveKit functions. Billing was deprecated (Stripe moving elsewhere) and the devices API was removed as unused. dev/not_yet/ was renamed to dev/_archived/. HTTP self-calls introduced by the consolidation were replaced with in-process dispatch.

Parallel Tier-Aware Test Infrastructure (May 22)

test_app.sh was rewritten for parallel tier-aware execution: tier-1 (critical path) tests run first, tier-2 (secondary) in parallel after. The same pattern was implemented in ci/bruno_in_modal.py for CI runs. Test credentials were moved from per-environment .bru files into dev/.env. The just promote recipe was fixed for branch/path name ambiguity.

CI Pipeline Hardening (May 22)

dev_push was split into dispatch_dev_test (deploy + test dev) and dispatch_dev_to_beta (merge + deploy + test beta). Dashboard helpers for test results, deploy states, and branch comparisons were added. A TLS diagnostic tool (diagnose_tls_in_modal.py) was created for debugging connectivity from Modal containers.


Daily Breakdown

May 19 (8 code commits)

  • 5d484ec ci: move CI infrastructure to dedicated cicd env (+28/-13)
  • 87be532 deploy-dashboard: Phase 5 tier 1+2 — read + trigger (+626/-1)
  • 3ca5f36 deploy-dashboard: shell+JSON pattern, match site auth shape (+110/-24)
  • 5c1c7f5 deploy-dashboard: env card row + per-env deploy state (+564/-28)
  • 597f055 deploy-dashboard: live polling with countdown indicator (+181/-14)
  • 8b1f302 static-site landing: add Deploy dashboard card (+4/-0)
  • 766726c deploy-dashboard: better initial render + cicd state + self-healing dev push (+96/-17)
  • 31b877b deploy-dashboard: ff-merges + in-flight stages + feature-commit walk (+227/-39)

May 20 (1 code commit)

  • 5d777af IMPROVE.md: 2026-05-20 review — 9 new findings (+61/-11)

May 21 (8 code commits)

  • b6b23cf archive cleanup: rename dev/not_yet → dev/_archived (+10/-5)
  • b5ca2b5 billing: deprecate and archive (+1/-5)
  • 90b79be core/livekit-server/ml: pre-bake remaining heavy bases to ECR (+320/-107)
  • 5c743c8 livekit-agent: pre-bake heavy layers to ECR (+176/-71)
  • 813eef5 core/data/model_proxy: fold images into shared bases (+27/-81)
  • d9a7e9e low_priority_app: consolidate voices+geocoding+capture+static_site (+114/-109)
  • 8f10753 user_data_app: consolidate users + data (+104/-63)
  • 79391ac devices: deprecate and archive (+9/-86)

May 22 (9 code commits)

  • 2ab08e4 user_data_app: replace HTTP self-calls with in-process dispatch (+57/-70)
  • 0fcfc05 bruno tests: move credentials out of git into dev/.env (+40/-17)
  • c69113c test_app.sh: parallel tier-aware runner + pool warming (+278/-116)
  • c12eb70 ci/bruno_in_modal.py: parallel tier-aware runner + Modal Secret creds (+284/-52)
  • cb63ae9 ci: fix just promote when branch shares name with path (+9/-2)
  • a940d95 ci/bruno_in_modal.py: split clone from tests (+62/-16)
  • 8486f21 ci/bruno_in_modal: handle main's bare hostnames (+470/-0)
  • efcaea3 ci: split dev_push + add dashboard helpers (+509/-35)
  • ee5fa2f deploy-dashboard: per-card chips, promote/test, gated approve-prod (+756/-26)

May 23–25 (no commits)


Modified Files (key changes)

CI Pipeline

  • ci/webhook.py — split dispatch handlers, dashboard API, action outcome persistence
  • ci/_git_in_modal.py — branch comparisons, deploy states, merge detection, commit walks
  • ci/bruno_in_modal.py — parallel tier-aware runner, Modal Secret creds, two-phase clone
  • ci/deploy_in_modal.py — deploy state recording
  • ci/scheduled_cleanup.py — result persistence, deploy state integration
  • ci/diagnose_tls_in_modal.pynew: TLS diagnostic tool
  • ci/ShellScripts/ensure_cicd_fresh.shnew: cicd staleness check

App Topology

  • dev/user_data_app/__init__.pynew: consolidated users + data
  • dev/low_priority_app/__init__.pynew: consolidated voices + geocoding + capture + static_site
  • dev/billing/dev/_archived/billing/ — deprecated
  • dev/not_yet/dev/_archived/ — renamed

Deploy Dashboard

  • dev/static_site/deploy_dashboard.py — dashboard backend (new + expanded)
  • dev/static_site/templates/deploy-dashboard/index.html — dashboard frontend (new + expanded)

Test Infrastructure

  • dev/test_app.sh — parallel tier-aware rewrite
  • bruno/.../environments/*.bru — credentials removed
  • dev/.env.template — test credential vars added