Findings No. 27
When a test runner's glue layer hangs opaquely twice, swap the glue, not the config
vitest's browser tester-iframe hung with sveltekit() in the vite config, and hung again after swapping to plain svelte(). Storybook's storybookTest architecture ran headless Chromium coverage on the first try.
Woof Editor tried twice to enable vitest's browser mode and hit the same opaque failure both times: the tester iframe hung, with no error to chase. The first attempt ran with sveltekit() in the vite config; the second came after swapping to a plain svelte() setup, on the theory that the kit plugin's routing interception was the culprit. Same hang. Browser coverage sat deferred for a whole alpha while the pure-logic layer carried the test suite alone.
What worked was changing architecture instead of configuration: version 0.2.0 dropped the direct-render approach and adopted Storybook's storybookTest (via @storybook/addon-vitest), running stories through headless Chromium alongside the node unit project, both in CI, on the first try.
The general rule: when a test runner's glue layer hangs opaquely twice, the third attempt should swap the glue, not the config. An afternoon of architecture change bought what two debugging sessions could not.
Receipt: woof-editor CHANGELOG 0.1.0-alpha.0 ("Vitest browser project still not enabled", attempts E1 and E3) and 0.2.0 (browser-test architecture change; 4 stories through headless Chromium plus the node project).