Tracker: #11583
Problem
Yuki shipped Phase A through D.2 with zero browser tests. The dock relies on every fragile primitive at once: `transition:persist`, ClientRouter swap, dynamic `import('./yuki-dock')`, `localStorage` state for collapsed/expanded + float mode + history + greeted flag, an `EventSource` consumer for SSE chat, and a Three.js + VRM render loop. Regressions in any of these would not be caught.
Acceptance
`apps/kbve/astro-kbve/e2e/yuki.spec.ts` covers:
3D-mode tests are out of scope here — Three.js + WebGL in headless mode is its own rabbit hole; track separately if needed.
Tracker: #11583
Problem
Yuki shipped Phase A through D.2 with zero browser tests. The dock relies on every fragile primitive at once: `transition:persist`, ClientRouter swap, dynamic `import('./yuki-dock')`, `localStorage` state for collapsed/expanded + float mode + history + greeted flag, an `EventSource` consumer for SSE chat, and a Three.js + VRM render loop. Regressions in any of these would not be caught.
Acceptance
`apps/kbve/astro-kbve/e2e/yuki.spec.ts` covers:
3D-mode tests are out of scope here — Three.js + WebGL in headless mode is its own rabbit hole; track separately if needed.