Isolamento de Recursos em Paralelo
Visão Geral
Várias instâncias do Claude trabalhando no mesmo projeto colidirão em portas, bancos de dados e instâncias de navegador. Esta skill ensina detecção proativa e adaptação silenciosa — verifique o que está em uso, escolha outra coisa, reporte o que você escolheu.
Princípio central: Observe o estado do sistema, adapte-se silenciosamente, reporte no terminal. Nada de arquivos de coordenação, arquivos de bloqueio ou estado compartilhado.
Quando Usar
Antes de qualquer uma destas ações, execute as verificações de detecção:
- Iniciar um servidor de desenvolvimento (
next dev,npm run dev) - Executar testes e2e do Playwright
- Executar testes que escrevem no banco de dados ou fazem asserções sobre ele
Isolamento de Porta (Servidor Dev)
Antes de iniciar um servidor de desenvolvimento:
lsof -i :3000 -t 2>/dev/null
Se ocupado, escaneie para cima (3001, 3002, ...) até encontrar uma porta livre. Inicie com:
PORT=<porta_livre> next dev
Playwright com configuração webServer:
- Sobrescreva a porta via variável de ambiente, passe a mesma porta como
baseURL - Se a sobrescrita de porta via env não for suportada, avise o usuário — NÃO modifique arquivos de configuração
Playwright sem webServer (servidor externo):
- Inicie o servidor de desenvolvimento na porta livre
- Execute o Playwright com
baseURLsobrescrito:
BASE_URL=http://localhost:<porta_livre> npx playwright test
baseURL hardcoded no Playwright config (caso comum):
A maioria dos configs tem baseURL: 'http://localhost:3000' hardcoded em vez de ler de env. Se for o caso, BASE_URL=... não funcionará. Avise o usuário com esta correção exata:
Seu
playwright.config.tstem umbaseURLhardcoded. Atualize-o para:baseURL: process.env.BASE_URL || 'http://localhost:3000'Isso me permite sobrescrever a porta via variável de ambiente sem modificar arquivos de configuração.
Isolamento de Banco de Dados (Supabase)
Antes de executar testes que escrevem no banco de dados ou fazem asserções sobre ele:
- Determine se o isolamento é necessário:
- Somente leitura → compartilhe o banco, pule o isolamento
- Escrita / mutação / asserção sobre estado do banco → isole
- Gere um prefixo de schema baseado em timestamp:
parallel_<epoch>_(ex.:parallel_1741234567_) - Crie o schema isolado e execute as migrações:
psql "$DATABASE_URL" -c "CREATE SCHEMA parallel_1741234567_;"
PGOPTIONS="--search_path=parallel_1741234567_" npx supabase db push
- Aponte o aplicativo para o schema isolado via variável de ambiente:
SUPABASE_SCHEMA=parallel_1741234567_ npx playwright test
- Após os testes: remova o schema:
psql "$DATABASE_URL" -c "DROP SCHEMA parallel_1741234567_ CASCADE;"
Isolamento de Navegador Playwright
Antes de executar testes do Playwright:
- Verifique se há processos de navegador Playwright em execução que possam entrar em conflito
- Isole o estado do navegador para evitar contenção de travamento — use qualquer abordagem:
TMPDIR=/tmp/playwright_<epoch> npx playwright test
Ou mais direcionada — isole apenas o caminho dos navegadores:
PLAYWRIGHT_BROWSERS_PATH=/tmp/pw_browsers_<epoch> npx playwright install chromium
PLAYWRIGHT_BROWSERS_PATH=/tmp/pw_browsers_<epoch> npx playwright test
- Certifique-se de que a instância do Playwright use a mesma porta atribuída no Isolamento de Porta acima
Reporte
Após a adaptação, reporte uma vez e siga em frente:
⚡ Isolamento paralelo:
Servidor dev: porta 3005 (3000 estava em uso)
Schema DB: parallel_1741234567_
Playwright: /tmp/playwright_1741234567
Reporte apenas os recursos que foram realmente adaptados. Se nada conflitou, não diga nada.
Referência Rápida
| Recurso | Detecção | Adaptação | Limpeza |
|---|---|---|---|
| Porta do servidor dev | lsof -i :<porta> | PORT=<proxima_livre> | Nenhuma necessária |
| Supabase DB | Verificar se testes escrevem/assertam | Schema parallel_<epoch>_ | Remover schema após testes |
| Navegador Playwright | Verificar contenção de travamento | TMPDIR ou PLAYWRIGHT_BROWSERS_PATH | Diretório temporário limpo automaticamente |
Erros Comuns
Matar o processo do outro Claude
- Problema: Porta 3000 está em uso, então você mata o processo para liberá-la
- Correção: Nunca mate processos que você não iniciou. Escolha uma porta diferente.
Modificar arquivos de configuração para sobrescrita de porta
- Problema: Editar
playwright.config.tsounext.config.jscria conflitos no git - Correção: Use variáveis de ambiente. Se variáveis de ambiente não funcionarem, avise o usuário.
Esquecer de passar a porta adaptada para o Playwright
- Problema: Servidor dev na 3005, Playwright ainda acessa a 3000
- Correção: Sempre coordene — a porta atribuída ao servidor dev deve ser passada como
BASE_URLpara o Playwright.
Isolar o banco quando não necessário
- Problema: Sobrecarga de criação de schema para testes somente leitura
- Correção: Isole apenas quando os testes escreverem ou fizerem asserções no estado do banco.
Bandeiras Vermelhas
Nunca:
- Mate outro processo para liberar um recurso
- Modifique arquivos de configuração para alterar portas
- Ignore conflitos de porta e torça para dar certo
- Pule a limpeza do banco após os testes
Sempre:
- Verifique antes de iniciar
- Adapte-se silenciosamente via variáveis de ambiente
- Reporte o que você escolheu
- Limpe os schemas do banco após os testes