Vitest consolidation: bun:test vs vitest drift fix
## Что это
Кодбаза unintentionally разделена между `bun:test` (unit tests, faster) и `vitest` (component tests с DOM, jsdom-required). Drift проявляется: тесты passing в bun, failing в vitest и наоборот, потому что mocks, snapshots, и test-utils incompatible.
Fix: единый runner `vitest` for всех tests (unit + component). Migration shim для bun-specific assertions через `vitest/compat`. Performance regression от switch (bun быстрее) компенсируется shard'ингом и `vitest --pool=threads`. Снапшоты переименовываются в unified format.
Компоненты: `vitest.shared.ts`, удаляется `bunfig.toml` test-section. CI workflow simplifies: один `vitest run --coverage`.
## Зачем
Drift между runners — это false-positives/negatives в CI, что разрушает trust в test signals. Один runner = один truth-source. Бонус: легче добавлять fixtures, mocks, custom matchers — без двойного maintenance. Это E10 test infra drift = 0 цель.
## Источники вдохновения
- [hegelai/prompttools](https://github.com/hegelai/prompttools) — prompt testing/experimentation для regression
- [JoshuaKGoldberg/TypeStat](https://github.com/JoshuaKGoldberg/TypeStat) — automated TS migration for runner switch
- [openclaw/clawsweeper](https://github.com/openclaw/clawsweeper) — CI triage bot для test drift detection
## 🔗 Linear
- [PZD-422](https://linear.app/kuhjie/issue/PZD-422) — backing ticket