Render — P5 no ar, o resto da trilha na fila
O que foi para produção em 2026-10-15 (commit cc69555), com que gates, e o que continua fora. Verde = no ar. Âmbar = espera decisão sua. Cinza = fora.
Trilha: 15 pacotes, 6 fechados
Cada pacote entra por merge --no-ff no integ/render-fase-a, com gates com log. P0..P4 foram entregues na sessão anterior (fase A, commit 3c2aaed); P5 foi fechado e publicado agora; P6..P14 continuam na fila do desenho. Os números das ondas que faltam são o tamanho medido no AgentPack de onde o código sai.
Vereditos
P5 em produção — commit cc69555
Deploy t5OiAPuh_PI271BNnyEiR no render-backend-ws, commit cc695553e717 da main, container 657f8d4b2572. Prova ao vivo: /health 200 com banco ok (latência 1 ms), /api/render/schemas 200 público (o contrato JSON Schema do Render), e as 47 rotas respondendo 401 — existe e exige credencial, o deny-by-default de sempre. O render-frontend-ws continua sem container.
Gates 18/18 — o log está em .sbcache/wf-render-build/P5/logs/
prisma-validate, prisma-format-check, typecheck, lint-ratchet (129 avisos no teto, 0 erros), cycles, knip (0 erros), docs-check, env-example-check, test-db-migrate, test-db-drift, test-pedacos (58 suítes, 987 testes, 5 pulados), cobertura-pedacos (5 pedaços juntados), coverage-floor (8/8 diretórios), test-env-ci, build, gitleaks-git e gitleaks-dir. Os dois gates que reprovavam foram corrigidos, não contornados.
Os dois gates que reprovavam
knip: o ramo do P5 tinha nascido 7 commits antes da main e não levava os 2.162 linhas de teste do P4 — cinco arquivos de domínio ficavam sem uso aparente. Com os testes de volta, o knip fecha sem ninguém inventar entrada. coverage-floor: a medida era de uma árvore incompleta (82,69%). Com os testes do P4: src 87,63% e src/services 86,58%, e os pisos subiram para os medidos, como a regra da casa manda ("subiu a cobertura, suba o piso no mesmo PR").
Espera você — a Conta
Dois movimentos fora do painel, já descritos no runbook: recriar/deployar o conta-backend-ws para o CONTA_PROVISIONING_SECRET_RENDER entrar no processo (um restart não aplica env), e disparar o resync do estado da empresa para o Render. Sem o resync, o Render nasce sem espelho de empresa/membros e o login por SSO não tem para onde provisionar.
Frontend — fora desta entrega
Não é falha de operação: frontend/ tem 3 arquivos gerados e mais nada. Não há package.json nem Dockerfile em nenhuma branch (main, integ, pkg/p0..p5, nem nos 7 worktrees). O P8 traz a casca (Vite + React + @nomad/ui + TopBar + nginx) e é o que destrava o deploy do render-frontend-ws; P9…P11 trazem o motor, o editor e as 112 telas. Até lá o domínio responde 502 com TLS válido.
P6…P14 — fora desta entrega
Onze pacotes do desenho seguem intocados: tools MCP (59 tools, ~5.000 linhas), portão de upgrade, frontend inteiro, serviço de captura, migração da suíte e o script de corte de dados. O código de origem está no sandbox (AgentPack) e o desenho detalha o que sai de lá e o que não sai. Cada onda tem revisão adversarial, gates com log e merge --no-ff no integ/render-fase-a — o mesmo processo do P5.
Detalhe
O que foi para a main nesta tarefa
| Commit | O que é | Tamanho |
|---|---|---|
| 1b63972 | Integra pkg/p5 (rotas REST do Render) no integ/render-fase-a | 27 arquivos, +3.816 / −98 |
| cc69555 | Integra a fase A do Render (P0..P5) na main — o que foi publicado | merge --no-ff |
| 442eac5 | fix(test): handler de mentira sem async (fecha a catraca em 129) | 1 arquivo |
| 1d032cd | fix(backend): o merge duplicou 3 funções do auth — fica a do P5 | −54 linhas |
| 9fea358 | chore(backend): piso de cobertura sobe para o medido | 8 pisos |
| 8e11b00 | Merge main em pkg/p5 (traz os testes do P4 que o ramo não tinha) | 3 conflitos resolvidos à mão |
| a8401d6 | docs(runbook): o que a subida de 2026-10-14 mostrou que o roteiro errava | +125 / −17 |
Gates do P5 — o que cada um mede
| Gate | Resultado | Número |
|---|---|---|
| typecheck + build | passou | tsc limpo, dist/server.js gerado |
| lint:ratchet | passou | 129 avisos no teto (não subiu), 0 erros |
| knip | passou | 0 erros; 223 exports e 99 tipos sem uso só como aviso |
| cycles + prisma + docs + env | passou | sem ciclo, schema válido, .env.example em dia |
| testes (pedaços) | passou | 58 suítes · 987 testes · 5 pulados · 0 falhas |
| cobertura + piso | passou | src 87,63% · services 86,58% · routes 92,53% · 8/8 diretórios |
| gitleaks (git + árvore) | passou | nenhum segredo na árvore nem nos commits |
O que ficou de fora — e o que destrava
| Onda | Tamanho medido | O que destrava |
|---|---|---|
| P6 · tools MCP | ~5.000 linhas + 11 suítes | Portar tools/render e mcp/ do AgentPack e trocar o stub do /mcp (hoje responde 403 MCP_NOT_AVAILABLE para chave restrita) |
| P7 · portão de upgrade | 2 services + 1 CLI | Tabela render_approvals no lugar da leitura de task_decisions |
| P8 · casca do frontend | ~35 arquivos | É o que faz o render-frontend-ws compilar e o domínio deixar de responder 502 |
| P9…P11 · motor, editor e telas | ~200 arquivos | O editor de telas que a regra "config nova tem tela" pede |
| P12 · serviço de captura | 4 arquivos + credencial | shot/ com token próprio, depois do frontend |
| P13 · suíte migrada | ~95 arquivos de teste | É o que faz a cobertura voltar aos pisos do AgentPack (90/93) |
| P14 · corte de dados | 1 script + 2 runbooks | Migração do AgentPack com --dry-run obrigatório |
Próximo
- Runbook de produção — topologia, env sem valores, ordem de subida, verificação e rollback
- API do Render em produção — health com banco ok; /api/render/schemas é o contrato público
- Repositório — main em cc69555; integ/render-fase-a em 1b63972