Dá para pôr em produção?
A resposta é "depende de quê", e as condições são concretas: o que falta no Kiln, o que o DevOps gera, e o que precisa vir de fora.
A resposta curta: para ferramenta interna, painel e serviço atrás de um proxy, sim. Para um serviço público exposto direto na internet, não sem um servidor na frente. As condições abaixo são todas concretas.
O que o Kiln não tem, e por quê#
| Falta | Motivo | O que fazer |
|---|---|---|
| TLS | refazer TLS em Python puro seria a pior escolha de segurança possível | nginx, Caddy ou o proxy da nuvem |
| HTTP/2 | ele roda sobre o http.server do Python | o mesmo proxy resolve |
| sincronização automática | a linguagem não aplica trava por você | Arcane.Concurrent, e leia o aviso do check |
O que tem, e costuma surpreender: WebSocket com o RFC 6455 falado à mão, Server-Sent Events, streaming de resposta, upload multipart com nome e extensão conferidos, CSRF, cabeçalhos de segurança e limite de corpo como middleware.
O que o `devops` gera#
$ dataforge devops dockerfile
$ dataforge devops compose
$ dataforge devops ci github
$ dataforge devops k8s
$ dataforge devops doctorEle gera texto e sai da frente. Um deploy que falasse com Docker e Kubernetes por dentro esconderia o que a imagem é, e no dia em que alguém precisa mudar uma camada não haveria onde mexer.
| No artefato | Sem ele |
|---|---|
USER forge | um escape de contêiner vira root no host |
| o manifesto copiado antes do código | um commit numa linha reinstala tudo (8 s → 2 min) |
.env no .dockerignore | o segredo fica na camada, e docker history o mostra |
resources + as duas sondas no Deployment | um pod come o nó; o Service manda tráfego antes da hora |
depends_on: service_healthy | a app falha na primeira consulta, de forma intermitente |
O banco sobe depois da aplicação#
Forge.esperar(url) espera o banco aceitar conexão e devolve a conexão aberta. O recurso dela é o que ela não repete: só erro passageiro entra na retentativa; credencial errada levanta na hora. Repetir uma senha errada por quarenta segundos troca um erro claro por um travamento, e o programa não fica mais certo por esperar.
Medido: 0,51 s contra um contêiner recém-subido, 4 ms para recusar uma senha errada.
Antes de dizer que está no ar#
dataforge check .limpo, edataforge test --cobertura --minimo=…no CI.dataforge seguranca— ele varre o projeto, e não só os.df: um segredo vaza do arquivo de configuração muito mais do que do código.dataforge abientre a versão publicada e a nova — é o que decide o número, em vez de escolhê-lo a olho.- Um smoke-test de verdade: site 200, rota protegida 401, admin 403, webhook 400.