chore: update docs and configs

This commit is contained in:
Esdras Renan 2025-11-05 20:49:19 -03:00
parent 7718f77d4c
commit 1079111de2
23 changed files with 102 additions and 10467 deletions

View file

@ -5,7 +5,7 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
## Resumo rápido
- **Bun (runtime padrão)**: 1.3+ já instalado no runner e VPS (`bun --version`). Após instalar localmente, exporte `PATH="$HOME/.bun/bin:$PATH"` para tornar o binário disponível. Use `bun install`, `bun run dev:bun`, `bun run convex:dev:bun`, `bun run build:bun` e `bun test` como fluxo principal (scripts Node continuam disponíveis como fallback).
- **Node/pnpm**: Node 20.9+ permanece obrigatório para ferramentas CLI; pnpm 10 está disponível como alternativa apenas para fluxos do desktop/Tauri.
- **Node.js**: mantenha a versão 20.9+ instalada para ferramentas auxiliares (Prisma CLI, scripts legados em Node) quando não estiver usando o runtime do Bun.
- **Next.js 15.5.5**: Projeto voltou para a versão estável (`next@15.5.5`) com Turbopack como bundler padrão e whitelist de domínios garantida pelo middleware.
- **Lint/Test/Build**: `bun run lint`, `bun test`, `bun run build:bun`. O test runner do Bun já roda em modo não interativo; utilize `bunx vitest --watch` apenas quando precisar do modo watch manualmente.
- **Banco DEV**: SQLite em `prisma/prisma/db.dev.sqlite`. Defina `DATABASE_URL="file:./prisma/db.dev.sqlite"` ao chamar CLI do Prisma.
@ -28,7 +28,7 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
```bash
bun run dev:bun
```
> Alternativas: `pnpm dev` (Node) ou `bun run dev:webpack` se precisar do fallback oficial.
> Alternativas: `bun run dev` (Node) ou `bun run dev:webpack` se precisar do fallback oficial.
3. Credenciais padrão (seed): `admin@sistema.dev / admin123`.
4. Herdou dados antigos? Execute `node scripts/remove-legacy-demo-users.mjs` para limpar contas demo legadas.
@ -74,7 +74,7 @@ O workflow dispara em todo `push`/`pull_request` para `main` e fornece feedback
## Testes rápidos via curl (Convites & acessos)
1. Rode `bun run dev:bun` (ou `pnpm dev` se preferir Node) e autentique-se em `http://localhost:3000/login` usando `admin@sistema.dev / admin123`.
1. Rode `bun run dev:bun` (ou `bun run dev` se preferir Node) e autentique-se em `http://localhost:3000/login` usando `admin@sistema.dev / admin123`.
2. Copie o valor do cookie `BETTER_AUTH_SESSION` e exporte no shell: `export COOKIE="BETTER_AUTH_SESSION=<valor>"`.
### Usuários
@ -140,11 +140,11 @@ curl -i -X PATCH http://localhost:3000/api/admin/invites/$INVITE_ID \
### Build local
```bash
corepack enable && corepack prepare pnpm@10.20.0 --activate
pnpm -C apps/desktop install
bun install
bun install --cwd apps/desktop
VITE_APP_URL=http://localhost:3000 \
VITE_API_BASE_URL=http://localhost:3000 \
pnpm -C apps/desktop tauri build
bun run --cwd apps/desktop tauri build
```
Artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
@ -163,11 +163,11 @@ img.save("icons/icon.ico", sizes=[(16,16),(24,24),(32,32),(48,48),(64,64),(128,1
PY
```
- Depois de regerar `icon.ico`, faça o commit e rode novamente `pnpm -C apps/desktop tauri build` para empacotar o instalador com o ícone correto.
- Depois de regerar `icon.ico`, faça o commit e rode novamente `bun run --cwd apps/desktop tauri build` para empacotar o instalador com o ícone correto.
### Atualizações OTA
1. Gere chaves (`pnpm tauri signer generate`).
1. Gere chaves (`bun run --cwd apps/desktop tauri signer generate`).
2. Defina `TAURI_SIGNING_PRIVATE_KEY` (+ password) no ambiente de build.
3. Publique os pacotes e um `latest.json` em release GitHub.
4. O app verifica ao iniciar e pelo botão “Verificar atualizações”.
@ -176,9 +176,9 @@ PY
| Sintoma | Causa | Correção |
| --- | --- | --- |
| `ERR_PNPM_OUTDATED_LOCKFILE` no pipeline | Dependências do desktop alteradas sem atualizar `pnpm-lock.yaml` | Rodar `pnpm install` na raiz e commitar o lockfile. |
| `ERR_BUN_LOCKFILE_OUTDATED` no pipeline | Dependências do desktop alteradas sem atualizar o `bun.lock` | Rodar `bun install` (raiz e `apps/desktop`) e commitar o lockfile. |
| Prisma falha com `P2021` / tabelas Better Auth inexistentes | CLI leu `.env` da raiz (produção) | Usar `DATABASE_URL="file:./prisma/db.dev.sqlite"` nos comandos. |
| Vitest trava em modo watch | Script `pnpm test` sem `--run` e CI detecta TTY | Ajustado para `vitest --run --passWithNoTests`. Localmente, use `pnpm test -- --watch` se quiser. |
| Vitest trava em modo watch | Script `bun test` sem `--run` e CI detecta TTY | Ajustado para `vitest --run --passWithNoTests`. Localmente, use `bun test -- --watch` se quiser. |
| Desktop não encontra updater | Falta `latest.json` ou assinatura inválida | Publicar release com `*.sig` e `latest.json` apontando para os pacotes corretos. |
## Cronômetro dos tickets

View file

@ -159,7 +159,7 @@ Observação: o CI já força `docker service update --force` após `stack deplo
## App Desktop (Tauri)
- Build local por SO:
- Linux: `pnpm -C apps/desktop tauri build`
- Linux: `bun run --cwd apps/desktop tauri build`
- Windows/macOS: executar o mesmo comando no respectivo sistema (o Tauri gera .msi/.dmg/.app).
- Por padrão, o executável em modo release usa `https://tickets.esdrasrenan.com.br` como `APP_URL` e `API_BASE_URL`.
- Para customizar, crie `apps/desktop/.env` com `VITE_APP_URL` e `VITE_API_BASE_URL`.
@ -203,7 +203,7 @@ docker run --rm -it \
-w /app \
-e CONVEX_SELF_HOSTED_URL=https://convex.esdrasrenan.com.br \
-e CONVEX_SELF_HOSTED_ADMIN_KEY='COLE_A_CHAVE_AQUI' \
node:20-bullseye bash -lc "corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm install --frozen-lockfile --prod=false && pnpm exec convex deploy"
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x convex deploy"
```
Observação
@ -231,10 +231,10 @@ docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL=https://convex.esdrasrenan.com.br \
-e CONVEX_SELF_HOSTED_ADMIN_KEY='COLE_A_CHAVE' \
node:20-bullseye bash -lc "set -euo pipefail; corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set MACHINE_PROVISIONING_SECRET 'seu-hex' -y; \
pnpm exec convex env list"
bun x convex env set MACHINE_PROVISIONING_SECRET 'seu-hex' -y; \
bun x convex env list"
```
### Smoke test pósdeploy (CI)
@ -270,7 +270,7 @@ cd /srv/apps/sistema
git pull
docker stack deploy --with-registry-auth -c stack.yml sistema
```
- Convex (functions): repetir o container `node:20` com `pnpm exec convex deploy` (ver seção Convex).
- Convex (functions): repetir o container `oven/bun:1` com `bun x convex deploy` (ver seção Convex).
- Reiniciar serviços sem alterar o stack: `docker service update --force sistema_web` (ou `sistema_convex_backend`).
## CI/CD (GitHub Actions + runner selfhosted)
@ -281,8 +281,8 @@ docker stack deploy --with-registry-auth -c stack.yml sistema
- `cd /srv/apps/sistema && git pull`
- `docker stack deploy --with-registry-auth -c stack.yml sistema`
3. Adicionar job `convex_deploy` (opcional) no mesmo runner:
- Executar container `node:20-bullseye` com envs `CONVEX_SELF_HOSTED_URL` e `CONVEX_SELF_HOSTED_ADMIN_KEY` (secrets do GitHub)
- Rodar `pnpm exec convex deploy`
- Executar container `oven/bun:1` com envs `CONVEX_SELF_HOSTED_URL` e `CONVEX_SELF_HOSTED_ADMIN_KEY` (secrets do GitHub)
- Rodar `bun x convex deploy`
Secrets necessários no GitHub (Repo → Settings → Secrets and variables → Actions)
- `CONVEX_SELF_HOSTED_URL` = `https://convex.esdrasrenan.com.br`
@ -306,12 +306,12 @@ Benefícios
- DNS/Traefik incorretos → confirmar labels/hostnames e DNS.
- `MAILER_SENDER_EMAIL` com erro de parsing:
- Adicionar aspas no `.env`.
- `pnpm` reclama de workspace:
- O `pnpm-workspace.yaml` inclui `apps/desktop`. No deploy do web isso não impacta pois usamos filtros/paths do projeto. Se preferir isolar, ajuste para apenas `.`.
- Lockfile desatualizado:
- Rode `bun install --frozen-lockfile` sempre que ajustar dependências para manter o `bun.lock` consistente em produção.
- Portainer erro de bind relativo:
- Usar caminho absoluto `/srv/apps/sistema:/app` no stack (feito).
- Prisma CLI “not found”:
- Instalar devDependencies no build (`NPM_CONFIG_PRODUCTION=false` e `pnpm install --prod=false`).
- Execute `bun install` no container de build garantindo a instalação das devDependencies (Prisma CLI fica disponível via `bun x prisma ...`).
- Convex CLI pedindo interação:
- Não usar CLI em produção; usamos imagem oficial `convex-backend` e `convex deploy` via container transitório com Admin Key.

View file

@ -11,7 +11,7 @@
- [x] Botão de reabrir disponível para solicitante/equipe até o fim do prazo; timeline registra `TICKET_REOPENED`.
- [x] Chat em tempo real incorporado ao detalhe do ticket (listagem live, envio, leitura automática, bloqueio pós-prazo).
- [x] Formulários dinâmicos para admissão/desligamento com escopo e permissões por empresa/usuário; `create` envia `formTemplate` e `customFields`.
- [x] Corrigidos mocks/tipagens das rotinas de resolução e reabertura (`resolveTicketHandler`, `reopenTicketHandler`) garantindo `pnpm lint`, `pnpm test` e `pnpm build` verdes.
- [x] Corrigidos mocks/tipagens das rotinas de resolução e reabertura (`resolveTicketHandler`, `reopenTicketHandler`) garantindo `bun run lint`, `bun test` e `bun run build:bun` verdes.
- [x] Atualizado schema/tipagens (`TicketWithDetails`, `ChartTooltipContent`) e dashboards CSAT para suportar reabertura com prazos e tooltips formatados.
- [x] Reatribuição de chamado sem motivo obrigatório; comentário interno só é criado quando o motivo é preenchido.
- [x] Botão “Novo dispositivo” reutiliza o mesmo primário padrão do shadcn usado em “Nova empresa”, mantendo a identidade visual.

View file

@ -16,31 +16,31 @@ export CONVEX_SELF_HOSTED_ADMIN_KEY='convex-self-hosted|011c148069bd37e4a3f1c10b
docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL -e CONVEX_SELF_HOSTED_ADMIN_KEY \
node:20-bullseye bash -lc "set -euo pipefail; \
corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; \
bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set MACHINE_PROVISIONING_SECRET '71daa9ef54cb224547e378f8121ca898b614446c142a132f73c2221b4d53d7d6' -y; \
pnpm exec convex env list"
bun x convex env set MACHINE_PROVISIONING_SECRET '71daa9ef54cb224547e378f8121ca898b614446c142a132f73c2221b4d53d7d6' -y; \
bun x convex env list"
3) (Opcional) Definir MACHINE_TOKEN_TTL_MS (padrão 30 dias)
docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL -e CONVEX_SELF_HOSTED_ADMIN_KEY \
node:20-bullseye bash -lc "set -euo pipefail; \
corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; \
bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set MACHINE_TOKEN_TTL_MS '2592000000' -y; \
pnpm exec convex env list"
bun x convex env set MACHINE_TOKEN_TTL_MS '2592000000' -y; \
bun x convex env list"
4) (Opcional) Definir FLEET_SYNC_SECRET
docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL -e CONVEX_SELF_HOSTED_ADMIN_KEY \
node:20-bullseye bash -lc "set -euo pipefail; \
corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; \
bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set FLEET_SYNC_SECRET '' -y; \
pnpm exec convex env list"
bun x convex env set FLEET_SYNC_SECRET '' -y; \
bun x convex env list"
5) Testar registro (gera machineToken) — substitua o hostname se quiser
HOST="vm-teste-$(date +%s)"; \

View file

@ -24,8 +24,8 @@ Resultado: front/back sobem com o novo código sem editar o stack a cada release
- Mount fixo: `/home/renan/apps/sistema.current:/app` (não interpolar APP_DIR).
- Comando inline (sem script), com migrations na subida:
- `command: ["bash","-lc","corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm exec prisma migrate deploy && pnpm start -p 3000"]`
- **Se você optar por usar `/app/scripts/start-web.sh`** (como no workflow atual), ele já garante `pnpm@10.20.0` via Corepack/NPM antes de rodar Prisma/Next. Certifique-se de copiar esse arquivo para o build publicado; sem ele, a task cai com `pnpm: command not found`.
- `command: ["bash","-lc","bun install --frozen-lockfile && bun x prisma migrate deploy && bun run start:bun"]`
- **Se você optar por usar `/app/scripts/start-web.sh`** (como no workflow atual), garanta que o script execute `bun install` antes de rodar Prisma/Next. Certifique-se de copiar esse arquivo para o build publicado; sem ele, a task cai com `bun: command not found`.
- Env obrigatórias (URLs válidas):
- `DATABASE_URL=file:/app/data/db.sqlite`
- `NEXT_PUBLIC_CONVEX_URL=http://sistema_convex_backend:3210`
@ -43,7 +43,7 @@ APP_DIR=/home/renan/apps/sistema.current
docker run --rm -it \
-e DATABASE_URL=file:/app/data/db.sqlite \
-v "$APP_DIR:/app" -v sistema_sistema_db:/app/data -w /app \
node:20-bullseye bash -lc 'corepack enable; corepack prepare pnpm@10.20.0 --activate; pnpm i --no-frozen-lockfile; pnpm exec prisma migrate status'
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x prisma migrate status"
```
## Diagnóstico rápido
@ -74,7 +74,7 @@ Causas encontradas:
- Correção determinística:
- `docker service scale sistema_web=0`
- `prisma migrate resolve --rolled-back 20251015223259_add_company_provisioning_code` no volume `sistema_sistema_db` (comando acima em "Prisma/SQLite do stack").
- `pnpm exec prisma migrate deploy`
- `bun x prisma migrate deploy`
- `docker service scale sistema_web=1` (ou `update --force`).
3) Rollback por script ausente (`/app/scripts/start-web.sh`).
@ -99,7 +99,7 @@ Causas encontradas:
docker service update \
--mount-rm target=/app \
--mount-add type=bind,src=/home/renan/apps/sistema.current,dst=/app \
--args 'bash -lc "corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm exec prisma migrate deploy && pnpm start -p 3000"' \
--args 'bash -lc "bun install --frozen-lockfile && bun x prisma migrate deploy && bun run start:bun"' \
sistema_web
```
@ -110,7 +110,7 @@ APP_DIR=/home/renan/apps/sistema.current
docker service scale sistema_web=0
docker run --rm -it -e DATABASE_URL=file:/app/data/db.sqlite \
-v "$APP_DIR:/app" -v sistema_sistema_db:/app/data -w /app \
node:20-bullseye bash -lc 'corepack enable; corepack prepare pnpm@10.20.0 --activate; pnpm i --no-frozen-lockfile; pnpm exec prisma migrate resolve --rolled-back 20251015223259_add_company_provisioning_code; pnpm exec prisma migrate deploy'
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x prisma migrate resolve --rolled-back 20251015223259_add_company_provisioning_code && bun x prisma migrate deploy"
docker service scale sistema_web=1
```

View file

@ -54,7 +54,7 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
- `VITE_APP_URL` → aponta para a interface Next (padrao produção: `https://tickets.esdrasrenan.com.br`).
- `VITE_API_BASE_URL` → base usada nas chamadas REST (`/api/machines/*`), normalmente igual ao `APP_URL`.
- Após provisionar ou encontrar token válido, o agente dispara `/machines/handshake?token=...` que autentica a dispositivo no Better Auth, devolve cookies e redireciona para a UI. Em produção, mantemos a navegação toplevel pelo handshake para garantir a aceitação de cookies na WebView (mesmo quando `POST /api/machines/sessions` é tentado antes).
- `apps/desktop/src-tauri/tauri.conf.json` ajustado para rodar `pnpm run dev/build`, servir `dist/` e abrir janela 1100x720.
- `apps/desktop/src-tauri/tauri.conf.json` ajustado para rodar `bun run dev/build`, servir `dist/` e abrir janela 1100x720.
- Novas tabelas Convex: `machines` (fingerprint, heartbeat, vínculo com AuthUser) e `machineTokens` (hash + TTL).
- Novos endpoints Next:
- `POST /api/machines/register` — provisiona dispositivo, gera token e usuário Better Auth (role `machine`).

View file

@ -18,7 +18,6 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
- `.github/workflows/ci-cd-web-desktop.yml` — pipeline de deploy web + desktop + deploy do Convex.
- `docs/OPERACAO-PRODUCAO.md` — runbook de operação (deploy, seeds, CI/CD, troubleshooting).
- `docs/SETUP-HISTORICO.md` — este histórico.
- `pnpm-workspace.yaml` — inclui `packages: ['.', 'apps/desktop']` para permitir comandos e builds do desktop. No deploy do web usamos filtros/paths; se preferir isolar, volte para apenas `'.'`.
- `scripts/deploy-from-git.sh` — fallback de deploy pullbased na VPS (sem Actions).
## Gestão de .env
@ -35,7 +34,7 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
## Convex selfhosted
- Evitamos `convex dev` no Swarm (CLI interativo). Adotada imagem oficial `ghcr.io/get-convex/convex-backend`.
- Geração de Admin Key dentro do container: `./generate_admin_key.sh`.
- Publicação de functions com `pnpm exec convex deploy` via container Node (`CONVEX_SELF_HOSTED_URL` + `CONVEX_SELF_HOSTED_ADMIN_KEY`).
- Publicação de functions com `bun x convex deploy` via container transitório (`CONVEX_SELF_HOSTED_URL` + `CONVEX_SELF_HOSTED_ADMIN_KEY`).
- Adicionado `convex_dashboard` opcional (DNS `convex-admin.*`).
## CI/CD (GitHub Actions)
@ -59,7 +58,7 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
4) `prisma: not found` no build
- Causa: instalar só prod deps.
- Solução: `NPM_CONFIG_PRODUCTION=false` e `pnpm install --prod=false` no container de build.
- Solução: garantir `bun install` completo (não apenas deps de produção) no container de build.
5) Lockfile/Workspace quebrando CI
- Causa: conflito de versões quando o desktop entrou no workspace.
@ -80,14 +79,14 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
## Checklists de operação
- Deploy manual (pullbased): `bash /srv/apps/sistema/scripts/deploy-from-git.sh`.
- Deploy via Actions: commit em `main`.
- Seeds: `https://tickets.../dev/seed` e `docker exec ... pnpm auth:seed`.
- Seeds: `https://tickets.../dev/seed` e `docker exec ... bun run auth:seed`.
- Verificação: `docker stack services sistema` e logs dos serviços.
## Melhorias futuras
- Rodar job de "Detect changes" também em runner selfhosted (zero minutos GitHubhosted).
- Fixar versão do `convex-backend` (ao invés de `latest`) para releases mais controladas.
- Substituir bindmount por imagens construídas no CI (tempo de deploy menor, reprodutibilidade).
- Adicionar cache de dependências pnpm no container de build.
- Adicionar cache das dependências do Bun no container de build.
## TODOs (próximos técnicos)
@ -95,7 +94,7 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
- Sintoma: Tipos gerados do Prisma não exibem os campos `isAvulso` e `contractedHoursPerMonth` em `CompanyCreateInput`/`CompanyUpdateInput`.
- Temporário: rotas `src/app/api/admin/companies/[id]/route.ts` e mapeamento em `src/app/admin/companies/page.tsx` possuem guardas/casts para compilar.
- Ação:
1. Rodar `pnpm prisma:generate` no mesmo ambiente de build/execução (VPS e local) para regenerar o client.
1. Rodar `bun run prisma:generate` no mesmo ambiente de build/execução (VPS e local) para regenerar o client.
2. Confirmar que os campos aparecem nos tipos gerados.
3. Remover casts e `eslint-disable` do update; reintroduzir campos no `create` se desejado (com tipagem estrita).
4. Se ainda não existirem fisicamente na base, aplicar migração que adicione os campos ao modelo `Company`.

View file

@ -4,7 +4,7 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
## 1. Panorama
- **Web (Next.js 15 + Convex)**: build limpo (`pnpm build`), lint sem avisos e testes estáveis (Vitest em modo não interativo).
- **Web (Next.js 15 + Convex)**: build limpo (`bun run build:bun`), lint sem avisos e testes estáveis (Vitest em modo não interativo).
- **Desktop (Tauri)**: fluxo de provisionamento e heartbeat operacional; inventário consolidado com coleta multi-plataforma; atualizações OTA suportadas.
- **CI**: workflow `Quality Checks` roda lint/test/build em todo push/PR na `main`; pipeline de deploy (`ci-cd-web-desktop.yml`) permanece responsável por sincronizar com a VPS.
- **Infra**: deploy documentado no runbook (Swarm com symlink `sistema.current`). Migrações Prisma e variáveis críticas mapeadas.
@ -19,7 +19,7 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
| **Upgrade para Next.js 16 beta** | Dependências atualizadas (`next@16.0.0-beta.0`, `eslint-config-next@16.0.0-beta.0`), cache de filesystem do Turbopack habilitado, scripts de lint/test/build ajustados ao novo fluxo. | Projeto pronto para validar as novidades do Next 16 (React Compiler opcional, prefetch incremental, etc.); builds e testes já rodando com sucesso. |
| **Posture / inventário** | Type guards e normalização de métricas SMART/serviços (`convex/machines.ts`). | Reduziu `any`, melhorou detecção de alertas e consistência do metadata. |
| **Docs** | Revisão completa de `docs/DEV.md`, novo `STATUS-2025-10-16.md`, estrutura uniforme e casos de erro registrados. | Documentação enxuta e atualizada, com trilhas claras para DEV/CI/Deploy. |
| **Testes no CI** | Novo workflow `.github/workflows/quality-checks.yml` e script `pnpm test` em modo não-interativo. | Previne “travamentos” e garante checagens de qualidade automáticas. |
| **Testes no CI** | Novo workflow `.github/workflows/quality-checks.yml` e script `bun test` em modo não-interativo. | Previne “travamentos” e garante checagens de qualidade automáticas. |
## 3. Pontos de atenção (curto prazo)
@ -40,7 +40,7 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
| Cenário | Sintoma | Como resolver |
| --- | --- | --- |
| Token de dispositivo revogado | POST `/api/machines/sessions` retorna 401 e desktop volta ao onboarding | Reprovisionar pela UI do agente; garantir que `machineToken` foi atualizado. |
| Falha de heartbeat | Logs com `Falha ao registrar heartbeat` + status 500 | Verificar `NEXT_PUBLIC_CONVEX_URL` e conectividade. Roda `pnpm convext:dev` em DEV para confirmar schema. |
| Falha de heartbeat | Logs com `Falha ao registrar heartbeat` + status 500 | Verificar `NEXT_PUBLIC_CONVEX_URL` e conectividade. Rode `bun run convex:dev:bun` em DEV para confirmar schema. |
| Updater sem atualização | Desktop fica em “Procurando atualização” indefinidamente | Confirmar release publicado com `latest.json` apontando para URLs públicas do bundle e assinaturas válidas. |
## 6. Próximos passos imediatos

View file

@ -3,8 +3,8 @@
Guia rápido para gerar instaladores do app desktop em cada sistema operacional.
## Prérequisitos
- Node.js 20+ e pnpm (Corepack habilitado):
- `corepack enable && corepack prepare pnpm@10.20.0 --activate`
- Bun >= 1.3 instalado e disponível no `PATH`.
- Node.js 20+ (recomendado) caso precise executar scripts auxiliares em Node.
- Rust toolchain (stable) instalado.
- Dependências nativas por SO:
- Linux (Debian/Ubuntu):
@ -27,11 +27,11 @@ Guia rápido para gerar instaladores do app desktop em cada sistema operacional.
## Comandos de build
- Linux/macOS/Windows (rodar no próprio sistema):
```bash
pnpm -C apps/desktop tauri build
bun run --cwd apps/desktop tauri build
```
- Apenas frontend (Vite):
```bash
pnpm -C apps/desktop build
bun run --cwd apps/desktop build
```
Saída de artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
@ -40,9 +40,9 @@ Saída de artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
- Primeira compilação do Rust pode demorar (download de crates e linkedição).
- Se o linkeditor for lento no Linux, considere instalar `lld` e usar:
```bash
RUSTFLAGS="-Clink-arg=-fuse-ld=lld" pnpm -C apps/desktop tauri build
RUSTFLAGS="-Clink-arg=-fuse-ld=lld" bun run --cwd apps/desktop tauri build
```
- Para logs detalhados em dev, rode `pnpm -C apps/desktop tauri dev`.
- Para logs detalhados em dev, rode `bun run --cwd apps/desktop tauri dev`.
## Diagnóstico de sessão (Desktop → Portal)
- Durante testes, navegue até `/portal/debug` (o desktop pode redirecionar automaticamente) para ver:

View file

@ -8,7 +8,7 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
1. **Gerar o par de chaves** (Linux ou WSL)
```bash
pnpm -C apps/desktop tauri signer generate -w ~/.tauri/raven.key
bun run --cwd apps/desktop tauri signer generate -w ~/.tauri/raven.key
```
- Privada: `~/.tauri/raven.key` (nunca compartilhar)
- Pública: `~/.tauri/raven.key.pub` (cole em `tauri.conf.json > plugins.updater.pubkey`)
@ -39,7 +39,7 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
2. **Build do front (gera `dist/` para o Tauri)**
```bash
pnpm -C apps/desktop build
bun run --cwd apps/desktop build
```
3. **Exportar variáveis do assinador** (no mesmo shell em que vai buildar):
@ -51,7 +51,7 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
4. **Gerar os instaladores + `.sig`**
```bash
pnpm -C apps/desktop tauri build
bun run --cwd apps/desktop tauri build
```
Os artefatos ficam em `apps/desktop/src-tauri/target/release/bundle/`:
@ -102,9 +102,9 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
## 5. Resumo rápido
1. `pnpm -C apps/desktop build`
1. `bun run --cwd apps/desktop build`
2. `export TAURI_SIGNING_PRIVATE_KEY=...` / `export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=...`
3. `pnpm -C apps/desktop tauri build`
3. `bun run --cwd apps/desktop tauri build`
4. Upload dos bundles + `.sig` → atualizar `latest.json`
5. Testar o instalador antigo para garantir que atualiza sozinho

View file

@ -33,7 +33,7 @@ VITE_API_BASE_URL=https://tickets.esdrasrenan.com.br
2) Rodar dev:
```
cd apps\desktop
pnpm tauri dev
bun run tauri dev
```
3) Provisionar:
- Usar o botão de olho para conferir o segredo, sem espaços.

View file

@ -4,9 +4,9 @@ Este documento resume a configuração atual de testes e como aproveitá-la para
## Comandos principais
- `pnpm test` &rarr; roda a suíte unitária em ambiente Node/JSdom.
- `pnpm test:browser` &rarr; executa os testes de navegador via Playwright (Chromium headless).
- `pnpm test:all` &rarr; executa as duas suítes de uma vez (requer Playwright instalado).
- `bun test` &rarr; roda a suíte unitária em ambiente Node/JSdom.
- `bun run test:browser` &rarr; executa os testes de navegador via Playwright (Chromium headless).
- `bun run test:all` &rarr; executa as duas suítes de uma vez (requer Playwright instalado).
> Sempre que adicionar novos testes, priorize mantê-los compatíveis com esses dois ambientes.
@ -15,16 +15,16 @@ Este documento resume a configuração atual de testes e como aproveitá-la para
1. Dependências JavaScript já estão listadas em `package.json` (`vitest`, `@vitest/browser-playwright`, `playwright`, `jsdom`, etc.).
2. Baixe os binários do Playwright uma vez:
```bash
pnpm exec playwright install chromium
bun x playwright install chromium
```
3. Em ambientes Linux “puros”, instale as bibliotecas de sistema recomendadas:
```bash
sudo apt-get install libnspr4 libnss3 libasound2t64
# ou
sudo pnpm exec playwright install-deps
sudo bun x playwright install-deps
```
Se o Playwright avisar sobre dependências ausentes ao rodar `pnpm test:browser`, instale-as e repita o comando.
Se o Playwright avisar sobre dependências ausentes ao rodar `bun run test:browser`, instale-as e repita o comando.
## Estrutura de setup
@ -59,8 +59,8 @@ setupFiles: process.env.VITEST_BROWSER
## Fluxo sugerido no dia a dia
1. Rode `pnpm test` localmente antes de abrir PRs.
2. Para alterações visuais/lógicas que afetem UI, adicione/atualize um teste em `tests/browser` e valide com `pnpm test:browser`.
1. Rode `bun test` localmente antes de abrir PRs.
2. Para alterações visuais/lógicas que afetem UI, adicione/atualize um teste em `tests/browser` e valide com `bun run test:browser`.
3. Se novos snapshots forem criados ou alterados, confirme visualmente e inclua os arquivos em commit.
4. Para tarefas de automação futuras (por exemplo, smoke-tests que renderizam componentes críticos), utilize a mesma estrutura:
- Setup mínimo no `tests/setup.browser.ts`.