← All docs changelog/2026-05-26.md

May 26, 2026

Commits

74a5ec9 — deploy-dashboard: drop confirm() popups — buttons act on click

Removes browser confirm() dialogs from dashboard action buttons so promote/test/approve actions fire immediately on click, matching the intended "instant feedback" UX.

Changed:

  • dev/static_site/templates/deploy-dashboard/index.html — remove confirm() guards (-19)

6c900fa — deploy-dashboard: instant click feedback + adaptive polling

Buttons now show immediate visual feedback (spinner + disabled state) on click. The polling interval adapts: faster when an action is in flight, slower when idle.

Changed:

  • dev/static_site/templates/deploy-dashboard/index.html — feedback + adaptive poll (+233/-113)

f8f4ee2 — deploy-dashboard: faster first paint + persistent action outcomes

Skeleton cards render immediately while /api/envs loads in the background. Action outcomes (success/failure) persist in the toast until dismissed or superseded.

Changed:

  • ci/_git_in_modal.py — optimized env state queries (+43/-3)
  • ci/webhook.py — action outcome persistence (+48)
  • dev/static_site/deploy_dashboard.py — skeleton support (-19/+?)
  • dev/static_site/templates/deploy-dashboard/index.html — skeleton + persistent outcomes (+155/-1)

bafee62 — deploy-dashboard: anchor action toasts above the target env card

Toast notifications for promote/test/approve actions now visually anchor above the env card that triggered them, instead of floating at the top.

Changed:

  • dev/static_site/templates/deploy-dashboard/index.html — card-anchored toasts (+111/-18)

487b6b8 — deploy-dashboard: parallelize /api/envs + add first-paint debug timer

The /api/envs backend now fetches Modal app states, GitLab branch tips, and test results in parallel (was sequential). Adds a debug timer showing first-paint latency.

Changed:

  • dev/static_site/deploy_dashboard.py — parallel data fetching (+65/-26)
  • dev/static_site/templates/deploy-dashboard/index.html — debug timer (+41)

a9f4819 — ci/_git_in_modal: parallelize dashboard GitLab calls

get_branch_tips and get_last_test_results now run their per-branch GitLab API calls in parallel using asyncio.gather.

Changed:

  • ci/_git_in_modal.py — parallel GitLab calls (+55/-46)

af4b7da — ci/_git_in_modal: bump get_env_states to cpu=8 for parallel app-list

Increases the CPU allocation for get_env_states to 8 cores to handle parallel Modal AppList RPC calls without contention.

Changed:

  • ci/_git_in_modal.py — cpu=8 (+6/-2)

8d577bf — ci/_git_in_modal: get_env_states via Modal AppList RPC, not CLI subprocess

Replaces modal app list CLI subprocess calls with direct Modal Python SDK AppList RPC, eliminating subprocess overhead and parse fragility.

Changed:

  • ci/_git_in_modal.py — AppList RPC (+56/-40)

bbcebb5 — ci/_git_in_modal: cache the GitLab round-trips behind the dashboard

Adds a TTL cache (60s) to get_branch_tips and get_last_test_results so rapid dashboard polls don't hammer GitLab's API.

Changed:

  • ci/_git_in_modal.py — TTL caching (+107/-12)

2224358 — ci/_git_in_modal: cache "no test" sentinel in last_test_results

When no test results exist for a branch, caches a sentinel value so subsequent polls skip the GitLab API call entirely.

Changed:

  • ci/_git_in_modal.py — sentinel caching (+17/-2)

f82ba46 — low_priority_app: min_containers=1 to keep the deploy-dashboard warm

Sets min_containers=1 on the low_priority_app (which hosts the deploy dashboard) to eliminate cold-start latency for dashboard access.

Changed:

  • dev/low_priority_app/__init__.py — min_containers=1 (+6/-2)

100fbfe — ci/webhook: dispatch_dev_test self-heals on uncertain dev state

When dispatch_dev_test finds the dev environment in an uncertain state (e.g., a previous deploy crashed), it now self-heals by redeploying before running tests.

Changed:

  • ci/webhook.py — self-heal logic (+7/-3)

136ac76 — deploy-dashboard: stale-artifact guard + live X/Y test progress in toast

Adds a guard against rendering stale deploy-state artifacts. The action toast now shows live test progress (e.g., "3/12 folders passed") by polling the Bruno test runner's output.

Changed:

  • ci/_git_in_modal.py — stale-artifact detection (+25/-1)
  • ci/bruno_in_modal.py — live progress reporting (+85)
  • dev/static_site/templates/deploy-dashboard/index.html — progress in toast (+87/-17)