fix(ci): projeto exige Node 22 — a suíte de invariantes nunca rodou no 20

O job `invariants` falhou na primeira execução no runner do GitHub, com Node 20:

    Error: Node.js detected but native WebSocket not found.
    Suggested solution: Ensure you are running Node.js 22+

Oito arquivos de tests/invariants/ chamam createClient() do @supabase/supabase-js,
que constrói um RealtimeClient e exige o WebSocket global — nativo apenas a
partir do Node 22. Localmente passava porque a máquina roda v22.22.3; o .nvmrc
dizia 20 e o CI usava 20.

A inconsistência é anterior a esta mudança e estava latente justamente por não
haver CI para os invariantes: ninguém nunca rodou essa suíte no Node declarado.
Dockerfile.worker já tinha sido bumpado para node:22-alpine — o repo já sabia
disso pela metade.

Corrigir só o job mascararia o problema: quem seguisse o .nvmrc continuaria com
`pnpm test:db` quebrado na própria máquina. A correção é o contrato:

- .nvmrc 20 -> 22
- package.json engines.node ">=20" -> ">=22"
- ci.yml: ambos os jobs (verify e invariants) em node-version 22, para o repo
  não passar a ser testado em dois runtimes diferentes
- docs/SETUP.md, CLAUDE.md e o template de bug atualizados, com o motivo escrito
  no SETUP para quem for contribuir

NÃO alterado de propósito: o Dockerfile da aplicação segue em node:20-alpine.
Mudar o runtime de produção tem risco próprio e não pertence a esta correção —
fica registrado como pendência a decidir.

Verificado no Node v22.22.3: typecheck 0, lint 0 erros.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KMEbgy5YWXZimXQAN7oRMm
This commit is contained in:
Rafael Melgaço
2026-07-27 13:09:17 -03:00
committed by Rafael Melgaço
co-authored by Claude Opus 5
parent ce93ab00d4
commit 696f083529
6 changed files with 7 additions and 7 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ body:
label: Ambiente
description: Versão do Node, pnpm, SO, e onde roda (local / Vercel / VPS HostGator).
placeholder: |
Node 20.x · pnpm 9.x · macOS 15 · self-host via hostgator-setup-kit
Node 22.x · pnpm 9.x · macOS 15 · self-host via hostgator-setup-kit
Output de /api/v1/health: ...
validations:
required: true
+2 -2
View File
@@ -16,7 +16,7 @@ jobs:
- uses: actions/setup-node@v7
with:
node-version: 20
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
@@ -47,7 +47,7 @@ jobs:
- uses: actions/setup-node@v7
with:
node-version: 20
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
+1 -1
View File
@@ -1 +1 @@
20
22
+1 -1
View File
@@ -149,7 +149,7 @@ DeskcommCRM é um sistema operacional de vendas open source com agentes de IA na
## Como rodar local
```bash
nvm use # node 20
nvm use # node 22
npm install
cp .env.example .env.local # preencher
docker compose up -d # WAHA local
+1 -1
View File
@@ -30,7 +30,7 @@
## Antes de começar
**O que você precisa ter instalado:**
- **Node.js 20** — recomendamos via [nvm](https://github.com/nvm-sh/nvm). No repo, rode `nvm use` e ele puxa a versão certa.
- **Node.js 22** — recomendamos via [nvm](https://github.com/nvm-sh/nvm). No repo, rode `nvm use` e ele puxa a versão certa. A suíte `pnpm test:db` exige Node 22+: os testes instanciam o cliente do Supabase, que precisa do `WebSocket` global (nativo só a partir do 22).
- **Docker Desktop** — pra rodar o WAHA local. [Download](https://www.docker.com/products/docker-desktop/).
- **pnpm** — `npm install -g pnpm` (gerenciador de pacotes que usamos).
- **Git** — você já tem se clonou o repo.
+1 -1
View File
@@ -4,7 +4,7 @@
"private": true,
"description": "DeskcommCRM — sistema operacional de vendas open source com agentes de IA nativos e WhatsApp (WAHA). Self-hosted, multi-tenant, LGPD by-design.",
"engines": {
"node": ">=20"
"node": ">=22"
},
"scripts": {
"dev": "next dev",