diff --git a/vitest.config.ts b/vitest.config.ts index 679d55feb..63fcb1bc1 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -14,17 +14,24 @@ export default defineConfig({ }, exclude: ['node_modules', 'dist', '.idea', '.git', '.cache'], // CI runners (GitHub Actions ubuntu-latest) têm 2 vCPU. - // Default `pool: 'threads'` com `maxThreads = numCPUs * 2 = 4` causa - // over-subscription severa em runners pequenos com 405+ test files, - // resultando em timeouts de 25+ minutos. `forks` com `maxForks: 2` - // alinha com a capacidade real do runner e mantém isolamento entre - // arquivos de teste, eliminando deadlocks por contention. - pool: 'forks', + // + // Histórico desse problema: + // 1. Default `pool: 'threads'` com `maxThreads = numCPUs * 2 = 4` causou + // over-subscription e timeout 25min em main e PRs. + // 2. Pivot 1 (PR #135): `pool: 'forks' + maxForks: 2` — não destravou, + // fork tem overhead alto demais (Node spawn por arquivo de teste). + // 3. Pivot 2 (este PR): `pool: 'threads' + maxThreads: 2` — limita o + // paralelismo em 2 (alinha com 2 vCPU) sem o overhead de fork. + // + // Validação local (102s suite completa) confirmou que threads sem + // over-subscription é o caminho. + pool: 'threads', poolOptions: { - forks: { - singleFork: false, - maxForks: 2, - minForks: 1, + threads: { + maxThreads: 2, + minThreads: 1, + // useAtomics melhora throughput de comunicação entre threads + useAtomics: true, }, }, // Timeout por teste: 15s é suficiente para qualquer caso legítimo.