Runbooks
Procedimentos quando a SPA “quebra” em produção. O front não tem workers: quase sempre é API, CORS, bundle desatualizado ou sessão.
1. Tela branca / chunk failed
Sintoma: branco após deploy, console Failed to load module.
Checagem:
- Hard refresh;
index.htmlaponta para hashes novos? - CDN/Nginx servindo
index.htmlantigo com JS novo (ou o inverso) try_filesSPA ativo? Deep link/directories/...deve devolverindex.html, não 404 do Nginx
Ação: republicar dist/ completo; cache bust em index.html; rollback da imagem se o build estiver corrompido.
2. Não entra (login 401/403/CORS)
- Network: o host é Central (
VITE_API_BASE_URL)? - CORS: origem do front autorizada na API
- 401
auth.invalidCredentialsvs 403auth.accountUnavailable(conta bloqueada) - Relógio do cliente (JWT
exp)
Ação: confirmar health da API Central; não “consertar” no front se o backend recusa o user.
3. Login ok, painel vazio / 0 empresas
- Qual host da listagem?
GET /api/v1/companies(Central) vsGET /api/companies(Default) - JWT sem
perm-user-list/ escopo N1 preso a uma empresa - Filtro da UI em “subempresas” sem
parentCompanyUuid
Ação: comparar Network com Postman no mesmo token; ver CompanyService.listCompanies vs listRootCompanies.
4. Sessão cai sozinha
- Interceptor 401 (
src/auth/sessionExpiry.ts) — algum pedido autenticado falhou - Secret do vault mudou no rebuild
- Socket de presença 401 em loop (menos comum)
Ação: correlacionar o primeiro 401 no Network; se for Default down e Central up, o interceptor ainda dispara.
5. Presença / sessões ativas = 0
- WS
socket.iocontra origem Central (getSocketApiOrigin) - Proxy/ingress WebSocket (Upgrade)
- Fallback HTTP
GET /api/v1/presence/active-users-global
Ação: DevTools → WS frames; se REST funciona e WS não, é infra de socket, não UI.
6. Governança 404 em form-fields ou /block
Rotas só na API Default. Se o proxy/prod apontar para Central, 404/405.
Ação: confirmar VITE_GOVERNANCE_API_BASE_URL no bundle (não no runtime do container).
7. Auditoria sem eventos ao vivo
- HTTP
GET /api/logs/company/:uuidfunciona? - Socket
/ws/logsna origem Default;join { companyUuid }
8. Tema / branding “sumiu”
- GET público
/api/governance/theme-tokensno login - GET por empresa
/api/governance/companies/:uuid/theme-tokens - Jobs 202 de ícone/banner — polling
branding-jobs/:jobId
9. Alertas sugeridos (ops)
O front não emite métricas. Monitore nas APIs / ingress:
- 5xx e latência em
/api/v1/auth/login - 5xx em
/api/v1/companiese/api/companies - erros de handshake
/socket.io - taxa de 401 (pico = secret rotacionado ou API auth down)
10. Escalada
- Confirmar se é só UI (console) ou Network
- Host Central vs Default
- Rollback da imagem do front se o último deploy coincidir
- Security: SECURITY.md se for IDOR / vazamento de token