PASS
npm run build
79/79
Vitest
PASS
make build
PASS
build-server
9/9
UI sweep
0
npm vulns
What changed
| Package | Before | After | Migration |
|---|---|---|---|
| tailwindcss | 3.4.17 | 4.3.0 | CSS-first @import "tailwindcss" + @tailwindcss/postcss; dropped tailwind.config.cjs & autoprefixer |
| daisyui | 4.12.24 | 5.5.20 | @plugin "daisyui" in CSS, 32 themes preserved (light --default, dark --prefersdark) |
| vite | 5.4.20 | 8.0.14 | rolldown build; base:'/ui/' + @ alias preserved; @vitejs/plugin-vue 5→6 |
| typescript | 5.9.2 | 6.0.3 | dropped baseUrl (TS5101); paths retained; vue-tsc 2→3, @vue/tsconfig →0.9 |
| vitest | 2.x | 3.x | bumped for Vite-8 peer compatibility |
Code fixes: flex-shrink-0→shrink-0 (8 files), bg-opacity-50→bg-black/50 (AuthErrorModal), @reference added to JsonViewer scoped @apply, @apply status-badge inlined (v4 forbids @apply of custom classes), Node engines 18→22.18.
3 DaisyUI-v5 regressions were caught in review and fixed (form alignment, tab styling, theme-dropdown clipping) — see the dedicated section below.
⚠ One intentional visual change remains (not a regression): DaisyUI v5 ships a refreshed default-theme palette — the
⚠ One intentional visual change remains (not a regression): DaisyUI v5 ships a refreshed default-theme palette — the
primary button color shifted from v4's indigo/violet to a brighter blue, and badge-success green is slightly more saturated. All components render correctly and cohesively; this is the theme-token evolution the spec's edge cases anticipated. If exact color parity is required, the old palette can be pinned via a custom @plugin "daisyui/theme" block — flagged here for a product decision.
DaisyUI v5 Regressions — Found in Review & Fixed
| Regression | Cause (v5 breaking change) | Fix |
|---|---|---|
| Form labels/inputs misaligned across ~16 views | v5 removed .form-control and repurposed .label/.label-text | Unlayered compat shim in main.css restoring v4 stack semantics (overrides DaisyUI's cascade layer) |
| Form inputs only ~half width | v5 gives .input/.select/.textarea an intrinsic width, so form-control's flex stretch no longer fills the row | .form-control :where(.input,.select,.textarea){width:100%} in the shim |
| Manual/Import & server-detail tabs looked like plain text | tabs-boxed→tabs-box, tabs-bordered→tabs-border renamed in v5 | Renamed tab containers in AddServerModal, OnboardingWizard, ServerDetail |
| Theme dropdown clipped (labels + title cut off-screen) | Menu too narrow (w-64) and dropdown-end pushed a wider menu off the left of the viewport from the left sidebar | Widened to w-72 + flex-nowrap; dropped dropdown-end so it opens rightward (left edge x: −85px → +12px, on-screen) |
| Sidebar nav items + active highlight only content-width | v5 .menu defaults to width: max-content (v4 filled the rail) | Added w-full to the sidebar .menu lists (ul width 117px → 231px) |
| Dashboard connection dots/lines black; MCP logo glow gone | v5 renamed all theme CSS vars (--su→--color-success, --p→--color-primary, --b1/2/3, --bc) and the var now holds the full color (no hsl()/oklch() wrapper); undefined short vars resolved to black/none | Converted ~50 refs across Dashboard, TokenPieChart, Hints panels to v5 vars; opacity uses → color-mix(in oklch, …, transparent) |
Visual Parity — Before / After (9 views)
PARITY Dashboard (home) (01-servers-home)
PARITY Servers list (02-servers-list)
PARITY Global Tools (03-tools)
PARITY Activity Log (04-activity)
PARITY Security / Quarantine (05-security-quarantine)
PARITY Configuration (Settings) (06-settings)
PARITY Secrets (07-secrets)
PARITY Agent Tokens (08-tokens)
PARITY Add-Server modal (09-add-server-modal)
QA — Main Use-Case Verification
Test plan
# QA Test Plan — Web UI after major frontend dependency migration
**Spec:** 055-frontend-major-upgrades
**Under test:** Personal-edition binary `/Users/user/repos/mcpproxy-go/mcpproxy`
(embeds the migrated UI: Tailwind v4, DaisyUI v5, Vite 8, TS 6 — UI is NOT rebuilt here)
**Date:** 2026-05-25
**Harness:** Playwright (Chromium 1217, headless, 1440×900), one spec per use case.
**Instance:** fresh throwaway on `127.0.0.1:18093`, data-dir `/tmp/mcpproxy-qa093`, empty `mcpServers`.
## How to reproduce
```bash
# 1. Start the isolated instance
/Users/user/repos/mcpproxy-go/mcpproxy serve --config=/tmp/mcpproxy-qa093/mcp_config.json \
--listen=127.0.0.1:18093 --log-level=info &
# 2. Run the suite (specs run from /tmp/qa-usecases which symlinks the e2e node_modules)
cd /tmp/qa-usecases && ./node_modules/.bin/playwright test --reporter=list
```
Spec files + helper live here (canonical copies); the runner copies them into
`/tmp/qa-usecases` (which has the Playwright `node_modules` symlink) before running.
Screenshots, `console-log.txt`, and this plan are written into this directory by the helper's absolute paths.
## SC-004 — console error gate
Every spec attaches `page.on('console')` + `page.on('pageerror')` and FAILS on any
**fatal** console/page error. All captured output is appended to `console-log.txt`.
**Benign noise excluded from the gate (logged, not failed):** SSE/`EventSource`
"connection closed / error occurred" messages. These are browser-native EventSource
reconnect logs driven by the `/events` channel + query-param auth; they are present
regardless of the CSS/build-tool stack and are NOT a migration regression. Pattern:
`/EventSource/i`, `/SSE/i`, `/connection closed/i` (see `_helpers.ts`).
**Result:** `fatal-errors=0` across all six tests. Only 18 benign SSE lines (all in
UC1, which visits 10 routes). No Vue render errors, no missing-module errors, no
pageerror exceptions anywhere.
## Use cases
| # | Case | Steps | Expected | Observed | Verdict |
|---|------|-------|----------|----------|---------|
| UC1 | Navigation | Visit all 10 nav routes (`/`, `/servers`, `/tools`, `/activity`, `/security`, `/settings`, `/secrets`, `/tokens`, `/repositories`, `/search`). Assert `#app` non-empty, ≥1 heading (h1/h2/h3 — Dashboard uses h3), no 404 view, no fatal console error. | Every route mounts a real view, no 404, no JS error. | All 10 routes mount; headings present; no 404; only benign SSE noise. | PASS |
| UC2 | Theme switch (key DaisyUI-v5 check) | Open the sidebar Theme dropdown, switch to **light → dark → synthwave**. Assert `documentElement[data-theme]` equals each and is persisted to `localStorage['mcpproxy-theme']`. Screenshot each. | `data-theme` flips for every theme; colourful theme (synthwave) renders distinct palette. | All three apply + persist; synthwave renders pink/cyan-on-navy; light/dark distinct. | PASS |
| UC3 | Add-server modal | Click TopHeader "Add Server" → assert the OPEN `<dialog.modal>` reports `dialog.open===true`. Fill Server Name; default type stdio; Command select → "Custom command"; type a command path; assert inputs hold their values. | Modal opens as native dialog; form accepts name + command. | `dialog.open===true`; name `qa-test-server` + path `/usr/bin/my-mcp-server` accepted; v5 toggles render. | PASS |
| UC4 | Activity view | Load `/activity`; assert table renders at default; set Status filter → `error`; assert filter applies and view stays coherent (emptied table OR empty-state). | Filters work; table or empty-state renders. | Default table renders (system-start row); `error` filter → "No matching activities / try adjusting your filters" empty-state. | PASS |
| UC5 | Settings + DaisyUI-v5 toggle | Load `/settings`, assert Monaco config-editor card mounts. **Deviation:** `/settings` has NO daisyUI toggle (it is a JSON config editor), so v5 toggle interactivity is verified on the AddServerModal "Enabled" `toggle toggle-primary` (a pure `v-model` local control, no backend side effects); assert checked state flips. | Settings mounts; a daisyUI v5 toggle flips on click. | Settings editor mounts; Enabled toggle flips on→off cleanly. | PASS |
| UC6 | Server detail / empty-state | Load `/servers`; KPI cards visible; if a server card/link exists, click through to detail; else assert empty-state. (Fresh instance → empty-state expected.) | Detail loads OR empty-state renders. | "No servers found" empty-state renders on the fresh instance. | PASS |
## Notes / findings during harness development
1. **OnboardingWizard auto-opens on a fresh instance.** Its open `<dialog>` has a
full-viewport `<form class="modal-backdrop"><button>close</button></form>` that
intercepts clicks on the page beneath (correct daisyUI-v5 behaviour for an OPEN
modal). The helper `dismissOnboarding()` clicks its `aria-label="Close"` button
after every navigation. This is first-run UX, NOT a migration regression.
2. **DaisyUI v5 keeps closed `<dialog.modal>` elements mounted** with `display:grid`
+ `pointer-events:none` (v4 used `display:none`). Closed modals therefore do NOT
block clicks; only the single OPEN modal does. Tests target `dialog.modal[open]`.
3. **Dashboard headings are `h3`**, not `h1/h2` — UC1 accepts any heading level.
## Screenshots
`uc1-nav-{dashboard,servers,tools,activity,security,settings,secrets,tokens,repositories,search}.png`,
`uc2-theme-{light,dark,synthwave}.png`, `uc3-add-server-modal.png`, `uc4-activity.png`,
`uc5-settings.png`, `uc5-toggle-flipped.png`, `uc6-servers.png`.
## Verdict
**6/6 PASS, zero fatal console errors.** The migrated UI (Tailwind v4 / DaisyUI v5 /
Vite 8 / TS 6) behaves on par with the pre-migration UI across navigation, theming,
modals, filtering, toggles, and empty-states. The most important DaisyUI-v5 regression
surface — theme switching — works for light, dark, and a colourful theme. No
migration-induced JavaScript errors were observed.
Console / page-error capture (SC-004)
===== UC1-navigation =====
fatal-errors=0 benign(SSE)=18 warnings=0
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: API request to /api/v1/security/overview with API key: uitest...
[UC1-navigation] log: API request to /api/v1/connect with API key: uitest...
[UC1-navigation] log: API request to /api/v1/stats/tokens with API key: uitest...
[UC1-navigation] log: API request to /api/v1/activity/summary?period=24h with API key: uitest...
[UC1-navigation] log: API request to /api/v1/sessions?limit=5 with API key: uitest...
[UC1-navigation] log: API request to /api/v1/docker/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/connect succeeded
[UC1-navigation] log: API request to /api/v1/stats/tokens succeeded
[UC1-navigation] log: API request to /api/v1/activity/summary?period=24h succeeded
[UC1-navigation] log: API request to /api/v1/sessions?limit=5 succeeded
[UC1-navigation] log: API request to /api/v1/docker/status succeeded
[UC1-navigation] log: API request to /api/v1/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/config succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707542, finalRunningValue: true}
[UC1-navigation] log: API request to /api/v1/security/overview succeeded
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: API request to /api/v1/security/overview with API key: uitest...
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707543, finalRunningValue: true}
[UC1-navigation] log: API request to /api/v1/security/overview succeeded
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707544, finalRunningValue: true}
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: API request to /api/v1/activity?limit=200 with API key: uitest...
[UC1-navigation] log: API request to /api/v1/activity/summary?period=24h with API key: uitest...
[UC1-navigation] log: API request to /api/v1/activity?limit=200 succeeded
[UC1-navigation] log: API request to /api/v1/activity/summary?period=24h succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707545, finalRunningValue: true}
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: API request to /api/v1/security/scanners with API key: uitest...
[UC1-navigation] log: API request to /api/v1/security/overview with API key: uitest...
[UC1-navigation] log: API request to /api/v1/security/scans?sort=started_at&order=desc&limit=20 with API key: uitest...
[UC1-navigation] log: API request to /api/v1/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/security/scanners succeeded
[UC1-navigation] log: API request to /api/v1/security/scans?sort=started_at&order=desc&limit=20 succeeded
[UC1-navigation] log: API request to /api/v1/config succeeded
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/security/overview succeeded
[UC1-navigation] log: API request to /api/v1/security/queue with API key: uitest...
[UC1-navigation] log: API request to /api/v1/security/queue succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707546, finalRunningValue: true}
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/config succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707547, finalRunningValue: true}
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707548, finalRunningValue: true}
[UC1-navigation] verbose: [DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) %o
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707549, finalRunningValue: true}
[UC1-navigation] log: API request to /api/v1/tokens with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tokens succeeded
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/registries with API key: uitest...
[UC1-navigation] log: API request to /api/v1/registries succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707550, finalRunningValue: true}
[UC1-navigation] error: EventSource error occurred: Event
[UC1-navigation] error: EventSource connection closed - possible authentication failure
[UC1-navigation] log: Attempting to reinitialize API key and retry connection...
[UC1-navigation] log: API key from localStorage: uitest...
[UC1-navigation] log: API key from URL (updating storage): uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC1-navigation] log: API request to /api/v1/tools with API key: uitest...
[UC1-navigation] log: API request to /api/v1/secrets/config with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status with API key: uitest...
[UC1-navigation] log: API request to /api/v1/onboarding/state succeeded
[UC1-navigation] log: API request to /api/v1/tools succeeded
[UC1-navigation] log: API request to /api/v1/secrets/config succeeded
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: Attempting to connect EventSource...
[UC1-navigation] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC1-navigation] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC1-navigation] log: API request to /api/v1/servers with API key: uitest...
[UC1-navigation] log: API request to /api/v1/info with API key: uitest...
[UC1-navigation] log: API request to /api/v1/routing with API key: uitest...
[UC1-navigation] log: API request to /api/v1/status succeeded
[UC1-navigation] log: EventSource connected successfully
[UC1-navigation] log: API request to /api/v1/servers succeeded
[UC1-navigation] log: API request to /api/v1/info succeeded
[UC1-navigation] log: API request to /api/v1/routing succeeded
[UC1-navigation] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707551, finalRunningValue: true}
===== UC2-theme =====
fatal-errors=0 benign(SSE)=0 warnings=0
[UC2-theme] log: API key from URL (updating storage): uitest...
[UC2-theme] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC2-theme] log: API request to /api/v1/tools with API key: uitest...
[UC2-theme] log: API request to /api/v1/secrets/config with API key: uitest...
[UC2-theme] log: API request to /api/v1/status with API key: uitest...
[UC2-theme] log: API request to /api/v1/status with API key: uitest...
[UC2-theme] log: API request to /api/v1/onboarding/state succeeded
[UC2-theme] log: API request to /api/v1/tools succeeded
[UC2-theme] log: API request to /api/v1/secrets/config succeeded
[UC2-theme] log: API request to /api/v1/status succeeded
[UC2-theme] log: Attempting to connect EventSource...
[UC2-theme] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC2-theme] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC2-theme] log: API request to /api/v1/servers with API key: uitest...
[UC2-theme] log: API request to /api/v1/info with API key: uitest...
[UC2-theme] log: API request to /api/v1/routing with API key: uitest...
[UC2-theme] log: API request to /api/v1/status succeeded
[UC2-theme] log: API request to /api/v1/security/overview with API key: uitest...
[UC2-theme] log: API request to /api/v1/connect with API key: uitest...
[UC2-theme] log: API request to /api/v1/stats/tokens with API key: uitest...
[UC2-theme] log: API request to /api/v1/activity/summary?period=24h with API key: uitest...
[UC2-theme] log: API request to /api/v1/sessions?limit=5 with API key: uitest...
[UC2-theme] log: API request to /api/v1/docker/status with API key: uitest...
[UC2-theme] log: API request to /api/v1/servers with API key: uitest...
[UC2-theme] log: Attempting to connect EventSource...
[UC2-theme] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC2-theme] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC2-theme] log: API request to /api/v1/servers with API key: uitest...
[UC2-theme] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC2-theme] log: API request to /api/v1/info succeeded
[UC2-theme] log: API request to /api/v1/routing succeeded
[UC2-theme] log: API request to /api/v1/servers succeeded
[UC2-theme] log: EventSource connected successfully
[UC2-theme] log: API request to /api/v1/connect succeeded
[UC2-theme] log: API request to /api/v1/stats/tokens succeeded
[UC2-theme] log: API request to /api/v1/activity/summary?period=24h succeeded
[UC2-theme] log: API request to /api/v1/sessions?limit=5 succeeded
[UC2-theme] log: API request to /api/v1/docker/status succeeded
[UC2-theme] log: API request to /api/v1/config with API key: uitest...
[UC2-theme] log: API request to /api/v1/servers succeeded
[UC2-theme] log: API request to /api/v1/servers succeeded
[UC2-theme] log: API request to /api/v1/onboarding/state succeeded
[UC2-theme] log: API request to /api/v1/config succeeded
[UC2-theme] log: API request to /api/v1/security/overview succeeded
[UC2-theme] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707552, finalRunningValue: true}
===== UC3-add-server =====
fatal-errors=0 benign(SSE)=0 warnings=0
[UC3-add-server] log: API key from URL (updating storage): uitest...
[UC3-add-server] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC3-add-server] log: API request to /api/v1/tools with API key: uitest...
[UC3-add-server] log: API request to /api/v1/secrets/config with API key: uitest...
[UC3-add-server] log: API request to /api/v1/status with API key: uitest...
[UC3-add-server] log: API request to /api/v1/status with API key: uitest...
[UC3-add-server] log: API request to /api/v1/onboarding/state succeeded
[UC3-add-server] log: API request to /api/v1/tools succeeded
[UC3-add-server] log: API request to /api/v1/secrets/config succeeded
[UC3-add-server] log: API request to /api/v1/status succeeded
[UC3-add-server] log: Attempting to connect EventSource...
[UC3-add-server] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC3-add-server] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC3-add-server] log: API request to /api/v1/servers with API key: uitest...
[UC3-add-server] log: API request to /api/v1/info with API key: uitest...
[UC3-add-server] log: API request to /api/v1/routing with API key: uitest...
[UC3-add-server] log: API request to /api/v1/status succeeded
[UC3-add-server] log: API request to /api/v1/security/overview with API key: uitest...
[UC3-add-server] log: API request to /api/v1/connect with API key: uitest...
[UC3-add-server] log: API request to /api/v1/stats/tokens with API key: uitest...
[UC3-add-server] log: API request to /api/v1/activity/summary?period=24h with API key: uitest...
[UC3-add-server] log: API request to /api/v1/sessions?limit=5 with API key: uitest...
[UC3-add-server] log: API request to /api/v1/docker/status with API key: uitest...
[UC3-add-server] log: API request to /api/v1/servers with API key: uitest...
[UC3-add-server] log: Attempting to connect EventSource...
[UC3-add-server] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC3-add-server] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC3-add-server] log: API request to /api/v1/servers with API key: uitest...
[UC3-add-server] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC3-add-server] log: API request to /api/v1/servers succeeded
[UC3-add-server] log: API request to /api/v1/info succeeded
[UC3-add-server] log: API request to /api/v1/routing succeeded
[UC3-add-server] log: EventSource connected successfully
[UC3-add-server] log: API request to /api/v1/connect succeeded
[UC3-add-server] log: API request to /api/v1/stats/tokens succeeded
[UC3-add-server] log: API request to /api/v1/activity/summary?period=24h succeeded
[UC3-add-server] log: API request to /api/v1/sessions?limit=5 succeeded
[UC3-add-server] log: API request to /api/v1/docker/status succeeded
[UC3-add-server] log: API request to /api/v1/config with API key: uitest...
[UC3-add-server] log: API request to /api/v1/servers succeeded
[UC3-add-server] log: API request to /api/v1/servers succeeded
[UC3-add-server] log: API request to /api/v1/onboarding/state succeeded
[UC3-add-server] log: API request to /api/v1/config succeeded
[UC3-add-server] log: API request to /api/v1/security/overview succeeded
[UC3-add-server] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707555, finalRunningValue: true}
[UC3-add-server] log: API request to /api/v1/servers/import/paths with API key: uitest...
[UC3-add-server] log: API request to /api/v1/servers/import/paths succeeded
===== UC4-activity =====
fatal-errors=0 benign(SSE)=0 warnings=0
[UC4-activity] log: API key from URL (updating storage): uitest...
[UC4-activity] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC4-activity] log: API request to /api/v1/tools with API key: uitest...
[UC4-activity] log: API request to /api/v1/secrets/config with API key: uitest...
[UC4-activity] log: API request to /api/v1/status with API key: uitest...
[UC4-activity] log: API request to /api/v1/status with API key: uitest...
[UC4-activity] log: API request to /api/v1/onboarding/state succeeded
[UC4-activity] log: API request to /api/v1/tools succeeded
[UC4-activity] log: API request to /api/v1/secrets/config succeeded
[UC4-activity] log: API request to /api/v1/status succeeded
[UC4-activity] log: Attempting to connect EventSource...
[UC4-activity] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC4-activity] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC4-activity] log: API request to /api/v1/servers with API key: uitest...
[UC4-activity] log: API request to /api/v1/info with API key: uitest...
[UC4-activity] log: API request to /api/v1/routing with API key: uitest...
[UC4-activity] log: API request to /api/v1/status succeeded
[UC4-activity] log: API request to /api/v1/servers succeeded
[UC4-activity] log: EventSource connected successfully
[UC4-activity] log: API request to /api/v1/info succeeded
[UC4-activity] log: API request to /api/v1/routing succeeded
[UC4-activity] log: API request to /api/v1/activity?limit=200 with API key: uitest...
[UC4-activity] log: API request to /api/v1/activity/summary?period=24h with API key: uitest...
[UC4-activity] log: API request to /api/v1/activity?limit=200 succeeded
[UC4-activity] log: API request to /api/v1/activity/summary?period=24h succeeded
[UC4-activity] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707557, finalRunningValue: true}
===== UC5-settings-toggle =====
fatal-errors=0 benign(SSE)=0 warnings=0
[UC5-settings-toggle] log: API key from URL (updating storage): uitest...
[UC5-settings-toggle] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/tools with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/secrets/config with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/status with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/status with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/onboarding/state succeeded
[UC5-settings-toggle] log: API request to /api/v1/tools succeeded
[UC5-settings-toggle] log: API request to /api/v1/secrets/config succeeded
[UC5-settings-toggle] log: API request to /api/v1/status succeeded
[UC5-settings-toggle] log: Attempting to connect EventSource...
[UC5-settings-toggle] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC5-settings-toggle] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC5-settings-toggle] log: API request to /api/v1/servers with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/info with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/routing with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/status succeeded
[UC5-settings-toggle] log: API request to /api/v1/servers succeeded
[UC5-settings-toggle] log: EventSource connected successfully
[UC5-settings-toggle] log: API request to /api/v1/info succeeded
[UC5-settings-toggle] log: API request to /api/v1/routing succeeded
[UC5-settings-toggle] log: API request to /api/v1/config with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/config succeeded
[UC5-settings-toggle] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707559, finalRunningValue: true}
[UC5-settings-toggle] log: API request to /api/v1/servers/import/paths with API key: uitest...
[UC5-settings-toggle] log: API request to /api/v1/servers/import/paths succeeded
===== UC6-server-detail =====
fatal-errors=0 benign(SSE)=0 warnings=0
[UC6-server-detail] log: API key from URL (updating storage): uitest...
[UC6-server-detail] log: API request to /api/v1/onboarding/state with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/tools with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/secrets/config with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/status with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/status with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/onboarding/state succeeded
[UC6-server-detail] log: API request to /api/v1/tools succeeded
[UC6-server-detail] log: API request to /api/v1/secrets/config succeeded
[UC6-server-detail] log: API request to /api/v1/status succeeded
[UC6-server-detail] log: Attempting to connect EventSource...
[UC6-server-detail] log: API key status: {hasApiKey: true, apiKeyPreview: uitest...}
[UC6-server-detail] log: Creating EventSource: {hasApiKey: true, apiKeyPreview: uitest..., url: /events?apikey=uitest...}
[UC6-server-detail] log: API request to /api/v1/servers with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/info with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/routing with API key: uitest...
[UC6-server-detail] log: API request to /api/v1/status succeeded
[UC6-server-detail] log: API request to /api/v1/servers succeeded
[UC6-server-detail] log: EventSource connected successfully
[UC6-server-detail] log: API request to /api/v1/info succeeded
[UC6-server-detail] log: API request to /api/v1/routing succeeded
[UC6-server-detail] log: API request to /api/v1/security/overview with API key: uitest...
[UC6-server-detail] log: SSE Status Event Update: {topLevelRunning: true, nestedStatusRunning: true, listen_addr: 127.0.0.1:18093, timestamp: 1779707561, finalRunningValue: true}
[UC6-server-detail] log: API request to /api/v1/security/overview succeededVerdict
The four major upgrades build clean on Node 24, embed into both the personal and server Go editions, and pass the full Vitest suite. A 9-view Playwright sweep plus QA use-case scripts confirm the UI renders and behaves on par with the pre-migration build, with the single documented DaisyUI-v5 palette refresh. Ready to ship.