None of these are app bugs — they're places the test harness (or the measurement setup) lied, and had to be caught before trusting the result.
Headless drag-and-drop
Simple simulated mouse-move events never trigger a real HTML5 drag session in headless Chromium — the reorder appeared to silently do nothing in automated tests.
Workaround: dispatch real DragEvents with a DataTransfer manually to prove the app's own logic is correct.
Headless View Transitions
After a real link-click navigation, headless Chromium's automation layer never signals the native cross-document View Transition as "finished" — any subsequent click() hung for the full timeout.
Confirmed harmless: disabling the transition made clicks instant; a real user sees it finish normally in ~220 ms.
Playwright's Firefox ≠ real Firefox
Playwright's bundled Firefox build relaxes privacy.file_unique_origin for automation — it did NOT reproduce the file:// storage-isolation bug a real, stock Firefox hits every time.
Lesson: an automated pass in a bundled test browser isn't proof a real browser agrees — this exact gap is what let the vanilla-static bug ship.
The 360 ms that wasn't real
First timing pass showed site-server at ~360 ms vs <100 ms for everything else. Root cause: "localhost" resolved to IPv6 first, and site-server was bound only to IPv4 — a ~200 ms dead-end-then-fallback on every request.
Fix: re-measured all six stacks uniformly on 127.0.0.1 — site-server turned out to be among the fastest.
Vite binds to IPv6 only
Both the React dev server and `vite preview` listen on [::1] by default — connecting via 127.0.0.1 fails outright with ERR_CONNECTION_REFUSED unless --host is passed explicitly.
Fix: restarted with --host 127.0.0.1 for apples-to-apples measurement against the other five.
Two false alarms in one test run
Verifying Angular, an ambiguous CSS selector matched the brand link instead of the actual nav item (both share href="/"), and a theme check ran before Angular's effect scheduler had flushed.
Both were test-script bugs, not app bugs — confirmed by adding a settle wait and a more specific selector.