Local
Laboratório no seu computador. Serve para quebrar, aprender, reiniciar e repetir sem usuário, dinheiro ou reputação em jogo.
Antes da gente falar de qualquer comando, de qualquer setup, de qualquer configuração de DevOps, eu preciso que tu entenda uma coisa: o ambiente Local existe pra tu errar. É o teu laboratório. É o teu computador. Erra muito ali, porque sem consequência o aprendizado é grátis. Essa é a filosofia que o Pedro repete sempre, e ele tem razão. O Pedro fala assim, com todas as letras: "sempre a pessoa que erra mais vezes e mais rápido aprende mais do que a pessoa que tenta fazer uma coisa perfeita." Isso muda completamente o jogo. Porque o medo de errar é o que faz a galera ficar olhando o Cloud Code rodar, paralisada, conferindo cada caractere. E aí não erra, e também não aprende. Ambiente Local não tem usuário do outro lado. Não tem consequência financeira. Não tem twitter postando print. Erra à vontade. A regra geral é simples: se o erro pode quebrar alguma coisa real, ele precisa ter passado por Staging antes. Se o erro só quebra o teu computador, é só restart. Local é onde tu compra coragem barata.
Use este mapa para entender a sequência da aula antes de entrar nos detalhes.
Cada ambiente tem um papel diferente. Não dá pra confundir.
Local é o teu computador: laboratório onde pode errar. Staging é o teu computador na nuvem pra testar: mesmo ambiente de Production, mas só pra você e teu time. Production é o que os usuários acessam. Essa sequência tem uma ordem inegociável: o que sai de Local vai pra Staging, e só depois pode subir pra Production. Quem pula essa ordem vira a piada de "subiu direto produção, deu merda, ninguém viu". Pensa no jogo que faz beta: o estúdio libera primeiro pra um grupo pequeno de Beta Testers. Eles entram no jogo, jogam, reportam bugs. Quando o jogo aguenta a galera de beta, aí sim ele abre pra todo mundo. Staging é isso. Production é todo mundo.
Laboratório no seu computador. Serve para quebrar, aprender, reiniciar e repetir sem usuário, dinheiro ou reputação em jogo.
Ensaio parecido com Production. Serve para validar fluxo, dado realista e comportamento antes de expor o usuário.
Ambiente do usuário. Serve para entregar valor real, com banco isolado, deploy governado e rollback pensado antes.
Decida o ambiente pelo custo do erro, não pela pressa de ver no ar.
É experimento, teste ou quebra reversível só na sua máquina?
Passou no Local e precisa de validação realista antes de publicar?
Tem usuário real, dado real ou dinheiro do outro lado?
Se não consegue, ainda não é hora de Production.
Código separado sem banco separado vira ilusão de segurança.
Tem um erro muito comum que destrói projeto inteiro: separar o código em três ambientes e deixar todo mundo conectando no mesmo banco. Aí basta um migration mal escrita rodando em Local pra arrastar dados de Production junto. Banco de dados segue a mesma lógica que o código: dev tem banco próprio, staging tem banco próprio, production tem banco próprio. Nunca compartilhe. Se tu está usando Supabase: que é o stack que a gente recomenda muito no AIOX: o Supabase tem essa função de Branch. Usa. Cada branch é um banco isolado, com schema próprio, dados próprios, RLS próprio. Tu consegue dar push da migration em Staging, validar, e só depois subir pra Production. Isso evita o caso clássico do "rodei o migration em prod sem querer". Com Branch, tu literalmente não consegue rodar em prod sem mudar de branch consciente. O @devops é o guardião disso. Ele cuida do teu Local pra tu ter Docker Desktop, MCPs, tudo configurado. Ele cuida do Staging pra teu time validar. Ele cuida do Production pra o usuário ter experiência boa. Três ambientes, três bancos, um guardião.
código separado com banco compartilhado ainda é risco
Você testa no computador.
Dados descartáveis, schema livre para quebrar.
Dados realistas e validação antes de usuário real.
Isolado, protegido, alterado só com deploy governado.
Patch, Minor, Major: Pedro explica a regra que ele demorou pra entender.
O Pedro conta essa história aberta, ele ficava na dúvida de fazer versionamento. "Isso aqui é 2.0? Isso é 2.0.1?" Aí ele descobriu que existe uma metodologia: Semantic Versioning, semver, e ela é simples: três números, sempre. Tipo 1.1.2. A regra do Pedro, na linguagem dele: "Patch é mudança pequenininha. Minor é incremento de feature. Major é mudança agressiva, vira 2.0.0." Quando muda só o último número (1.1.2 → 1.1.3), tu está dizendo: "consertei bug, comportamento é o mesmo." Quando muda o do meio (1.1.2 → 1.2.0): "adicionei feature, nada quebra." Quando muda o primeiro (1.x.y → 2.0.0): "mudei coisa séria, prepare-se." Isso importa porque o AIOX usa semver no próprio framework. Quando o Pedro fala que "o AIOX estava no 2.3 e agora a gente está no 3.11", ele está te contando uma história de evolução. O @devops cuida desse versionamento via comando version-check antes do release.
Por que o @devops exige Docker Desktop ligado durante os ciclos de teste.
Antes de qualquer push, o @devops faz uma sequência de testes: lint, testes unitários, verificação de tipos, build. Em muitos desses passos ele usa o Docker Desktop pra simular Production no teu Local: cria um container, sobe a aplicação, roda os testes, mata o container. Tudo sem tu ver. Por isso quando tu roda o environment-bootstrap, uma das obrigatoriedades é Docker Desktop instalado. E não basta instalado - precisa estar aberto. O Pedro fala: "Ele tem que estar com ele aberto no computador para que o agente possa ir lá e fazer os testes sem nem você saber." Se tu esquece de abrir, o build falha sem explicação óbvia. Detalhe de governança: Story termina no QA. Deploy é do @devops. Tu não dá push direto. Tu pede pro @devops empurrar. Essa separação não é capricho. É a mesma lógica de ter @db-sage pra banco e @architect pra arquitetura: cada agente tem autoridade exclusiva sobre o que governa. Push pertence ao @devops, ponto.
o que acontece antes do push
Permite simular parte do ambiente real no computador.
Lint, types, unit tests e build rodam antes de qualquer subida.
A validação técnica aprova a entrega, mas ainda não publica.
Push, PR, CI/CD e deploy pertencem ao agente com autoridade.
A diferença entre Local, Staging e Production fica óbvia quando você pensa no custo do erro em cada ambiente.
Todo aluno entende a ideia dos três ambientes quando escuta a definição. O problema é que, na prática, muita gente ainda trata Local, Staging e Production como nomes bonitos para a mesma coisa. Aí o erro barato vira incidente caro. O modelo mental correto é simples: Local é onde eu posso quebrar sem vergonha. Staging é onde eu provo que a mudança se comporta parecida com Production. Production é onde existe usuário, dado, reputação e dinheiro real. A mesma falha muda completamente de gravidade conforme o ambiente onde acontece.
Um ajuste que quebra no Local ensina; o mesmo ajuste quebrando em Production vira crise.
Exercício curto pra sair da teoria: pega um projeto teu e responde as cinco perguntas.
Pega um projeto que tu está tocando agora. Não inventa um: usa um que tu realmente conhece. Responde as cinco perguntas abaixo por escrito. Se tu não souber a resposta de alguma, esse já é o primeiro diagnóstico do que falta no teu setup de DevOps.
Use antes de considerar qualquer projeto pronto para usuário real.
local→staging→production→banco→devopsLocal — Onde posso quebrar sem afetar usuário?Staging — Onde valido parecido com Production?Production — Onde existe usuário, dado e dinheiro real?Banco — Os bancos estão isolados por ambiente?DevOps — Quem tem autoridade para publicar?O aluno precisa enxergar a separação de risco em formato copiável.
01local:02risco: "baixo"03uso: "errar, testar e aprender"04staging:05risco: "médio"06uso: "validar parecido com produção"07production:08risco: "alto"09uso: "usuário, dado e dinheiro real"