---
id: w5/m7/t004
title: "Live verify against prod via dev tunnels (flip a plan end-to-end) + screenshot"
worker: worker5
status: done
estimate: 25m
depends_on: [w5/m7/t002, w5/m7/t003]
---

## Objective

Prove the whole flow on real data before shipping: run the new UI locally against prod through the dev-server tunnels, flip a real App's plan from the picker, and watch the change land (API, pod limits, metrics page).

## Context

- Tunnel recipe (established in w3/m4.5's verify): `VITE_API_URL=http://localhost:PORT/graphql VITE_KRATOS_PUBLIC_URL=http://localhost:PORT/kratos yarn dev --port PORT` — same-origin proxies to prod `api.bex.co` / `auth.bex.co`; log in with a prod account.
- Both prod Apps sit on `standard` (set 2026-07-08; beancount-cms peaks 473 MiB / 0.21 CPU, eden-cms-v2 625 MiB / 0.02 CPU). Safe verify: flip `beancount-cms` → `pro` → back to `standard` (both fit comfortably; two quick rollouts), or use a mock-cluster app via a local bex-api if prod churn is unwanted that day.
- Post-flip checks: Settings row shows the new tier; `CPU_LIMIT`/`MEMORY_LIMIT` metrics reflect it; the metrics page Percentage tab recomputes against the new limit.
- Screenshot the Settings row + picker to `.playwright-mcp/` (bare filename).

## Steps

1. Dev server with tunnels; log in; walk Settings → Update → pick → confirm → toast → Settings.
2. Verify via API + metrics that the pod resized; flip back.
3. Screenshots; note any UX rough edges as inbox notes rather than scope-creeping.

## Files

- (verification only — no code expected)

## Acceptance criteria

- [ ] A real plan change executed end-to-end from the UI against prod, then reverted.
- [ ] Settings row, metrics Limit labels, and `*_LIMIT` metrics all reflect each change.
- [ ] Screenshots in `.playwright-mcp/`.

## Out of scope

- Shipping (user runs /ship); prod dashboard rollout verification (post-ship).
