Code review com GPT-6 Astra: como pedir para ele achar bug de verdade no seu diff

Code review com GPT-6 Astra só acha bug de verdade quando o pedido é montado direito: você declara o que a mudança deveria fazer, delimita o diff, pede uma dimensão por rodada e exige arquivo, linha, entrada que dispara e consequência. Sem isso volta elogio genérico. O Astra foi lançado pela OpenAI em 03/09/2026 com rollout faseado, marcou 74,1% no DeepSWE v1.1 contra 70,8% do GPT-5.6 Sol, e aceita reasoning.effort em low, medium, high, xhigh e max. Comece em medium e filtre achado falso antes de levar pro time
Fala aí, beleza? Você cola o diff, pede uma revisão, e volta aquilo: "LGTM, código bem estruturado, boa separação de responsabilidades" 🙂
Zero bug encontrado
E o bug tá lá, quietinho, esperando a sexta-feira à noite pra aparecer
A OpenAI lançou o GPT-6 Astra em 03/09/2026, apresentado como seu modelo mais capaz para raciocínio complexo, código, uso de computador, pesquisa e criação de documentos
No teste de código DeepSWE v1.1 divulgado pela própria OpenAI, o Astra marcou 74,1% contra 70,8% do GPT-5.6 Sol
Só que benchmark não revisa o SEU diff, quem revisa é o pedido que você monta
E é isso que esse post entrega: a estrutura do pedido (intenção, dimensão, localização exata) e o filtro pra separar achado real de achado inventado antes de você abrir a discussão no time
O que você precisa antes de mandar o diff
Primeiro, o chato: acesso
O rollout do Astra é faseado. Começa por um conjunto limitado de organizações e, nos dias seguintes, chega ao ChatGPT Plus, Pro, Business e Enterprise, além da API da OpenAI e da AWS
As primeiras empresas a receber acesso são as participantes do programa de cibersegurança por inscrição da OpenAI, chamado Daybreak
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 114 aulas
- 4 projetos
- 9h 18min
Ou seja: pode ser que na sua conta ainda não tenha aparecido, e isso é esperado
Onde escolher o modelo:
- ChatGPT e Codex: no seletor de modelos, quando ele estiver disponível pra sua conta
- Codex CLI: o comando
/modeltroca o modelo e ajusta o nível de raciocínio dentro da sessão interativa, e dá pra escolher já na inicialização com--model(alias-m) - API: o model id é
gpt-6-astra, e ele também está disponível no Amazon Bedrock
codex --model gpt-6-astra
# ou, já dentro de uma sessão aberta:
/model
Se o seu caminho for a API, se liga nisso: modelos de raciocínio como o gpt-6-astra são usados com a Responses API, e a documentação indica que eles têm desempenho melhor nela do que em prompts de modelo de chat
Uma nota de escopo que evita frustração:
O Astra é o primeiro modelo que a OpenAI classifica no limiar "Critical" de cibersegurança do seu Preparedness Framework
Na prática isso significa uma linha bem clara: na versão lançada ele ajuda em tarefas de defesa, como revisão segura de código (secure code review) e patching, mas recusa tarefas mais avançadas como criar exploits de prova de conceito
Então monte o pedido como defesa ("onde esse diff pode ser abusado e como eu fecho isso"), não como ataque
Passo a passo: como montar o pedido de revisão do diff
O erro que atravessa TODOS os passos é o mesmo: colar o diff sem dizer qual comportamento era esperado
Sem intenção declarada, o modelo só consegue avaliar estilo. E estilo bonito é exatamente o que gera o "LGTM" inútil
Bora montar isso direito?
1. Declare a intenção da mudança:
Antes do código, duas frases: o que deveria passar a acontecer depois desse diff, e o que não pode quebrar de jeito nenhum
Intenção desta mudança:
- Passa a acontecer: cupom expirado deixa de ser aplicado no checkout e retorna erro 422
- Não pode quebrar: cupom válido continua aplicando desconto; pedido sem cupom segue igual
Revise o diff abaixo procurando lugares onde essa intenção NÃO se cumpre.
O erro comum deste passo: escrever a intenção copiando a descrição da task ("ajustes no checkout"). Isso não é intenção, é rótulo. Intenção tem comportamento observável
2. Delimite o diff e o contexto mínimo:
Mande o diff e, junto, o conteúdo (ou a assinatura) das funções que o diff chama e das que chamam ele
É o contexto mínimo pra ele não chutar. E deixe explícito que a revisão é do diff, não do repositório inteiro
Escopo: revise APENAS as linhas alteradas no diff abaixo e o efeito delas.
Código não alterado entra só como contexto, não como alvo de crítica.
<cole aqui o diff completo>
<cole aqui os arquivos vizinhos que o diff chama, na íntegra ou só as assinaturas>
O erro comum deste passo: mandar só o diff. Aí o modelo não enxerga o validador que já existe duas camadas acima e reporta "falta validação" com toda a confiança do mundo
3. Peça uma dimensão por rodada:
"Revise tudo" devolve um resumão morno
Uma dimensão por rodada devolve achado. É a mesma lógica de mandar um dev olhar concorrência com a cabeça em concorrência, e não em quatro coisas ao mesmo tempo
Nesta rodada, procure SOMENTE regressão de comportamento contra a intenção declarada.
Ignore estilo, nomenclatura, performance e segurança nesta rodada.
O erro comum deste passo: juntar segurança e performance no mesmo pedido. O modelo tende a entregar o achado mais fácil de escrever e abandonar o mais difícil de encontrar
4. Exija formato de achado com localização exata:
Esse é o passo que separa revisão útil de texto motivacional. Todo achado precisa de arquivo, linha, entrada que dispara e consequência
Formato obrigatório de cada achado:
- arquivo:linha (a linha PRECISA existir no diff que enviei)
- entrada concreta que dispara o problema (valor, payload ou sequência de chamadas)
- consequência observável (o que o usuário ou o sistema vê de errado)
- por que o código atual não cobre esse caso
Se você não conseguir preencher os quatro campos, não reporte o achado.
O erro comum deste passo: aceitar achado no formato "pode haver problema de validação aqui". Isso não é achado, é sensação
5. Proíba elogio e exija o "nenhum achado":
O modelo tende a preencher espaço. Se você não der uma saída válida pro caso "tá certo", ele inventa alguma coisa pra dizer
Não escreva elogios, resumo do que a mudança faz, nem sugestões de estilo.
Se não houver nenhum problema nesta dimensão, responda exatamente:
NENHUM ACHADO NESTA DIMENSÃO.
O erro comum deste passo: pedir "seja crítico". Isso não cria rigor, cria dramatização: aparecem achados de severidade alta em código que só mudou de indentação
6. Ajuste o reasoning.effort:
O gpt-6-astra aceita os níveis low, medium, high, xhigh e max, e não suporta o nível none
A orientação da OpenAI é começar no medium como ponto de partida equilibrado
"reasoning": { "effort": "medium" }
O erro comum deste passo: ir direto de medium pra max porque "é o melhor". A recomendação da OpenAI é reservar o max pro trabalho mais difícil, em que qualidade vem primeiro, e subir pra high ou xhigh quando mais raciocínio traz ganho MEDIDO de qualidade. Medido, não sentido
7. Rode uma segunda passada pedindo o que ficou de fora:
Depois da primeira leva, na mesma conversa, vire a pergunta do avesso
Revisando sua própria resposta anterior: qual parte do diff você analisou de forma superficial?
Existe algum caminho de execução que você não percorreu?
Liste apenas o que ficou de fora, sem repetir os achados anteriores.
O erro comum deste passo: perguntar "tem mais alguma coisa?". Pergunta aberta gera achado novo inventado. Perguntar o que ficou SUPERFICIAL gera lacuna real
E quando o achado virar correção, cuidado com o passo seguinte, que é onde a coisa costuma desandar: pedir o conserto sem cercar o raio de ação é receita pra corrigir o bug e quebrar outra coisa
Qual reasoning.effort usar (e quanto custa revisar um diff grande)
Primeiro a parte do esforço, com a orientação oficial traduzida pro dia a dia de revisão:
| Nível | Orientação da OpenAI | Uso típico na revisão de diff |
|---|---|---|
low |
Para cargas sensíveis a latência | Diff pequeno, checagem rápida antes do push |
medium |
Ponto de partida equilibrado | Padrão pra revisar PR do dia a dia |
high |
Quando mais raciocínio traz ganho medido de qualidade | Diff que cruza várias camadas |
xhigh |
Quando mais raciocínio traz ganho medido de qualidade | Concorrência, estado compartilhado, caminho crítico |
max |
Reservado ao trabalho mais difícil, em que qualidade vem primeiro | Migração grande, refactor de core, revisão de segurança do diff |
O nível none não existe aqui, então não tente
E o custo?
O preço por token do gpt-6-astra na API da OpenAI é o mesmo, independente do nível de esforço que você escolher. O que muda de fato é o tamanho do que entra e do que sai:
| Item | Preço (por milhão de tokens) |
|---|---|
| Entrada padrão | US$ 10 |
| Saída padrão | US$ 50 |
| Entrada em cache | US$ 1 |
| Escrita em cache | US$ 12,50 |
| Batch e Flex | 50% do padrão |
| Fast | dobro das tarifas aplicáveis, com até 2x a velocidade do Standard |
Olhando essa tabela, o cache é seu amigo: se você reaproveita o MESMO template de pedido a cada revisão, a parte fixa do prompt é justamente a candidata natural a ficar em cache
Tome cuidado com o diff gigante:
O gpt-6-astra tem 1.050.000 tokens de janela de contexto e até 128.000 tokens de saída
Parece que cabe o repositório inteiro, né? Cabe. Mas tem pegadinha 😀
Requisições com mais de 272 mil tokens de entrada levam sobretaxa aplicada ao request inteiro: 2x nas tarifas de entrada e de cache, e 1,5x na de saída
Ou seja: passar de 272 mil tokens não encarece só o excedente, encarece tudo. Mais um motivo pra delimitar o diff em vez de despejar a base de código
Cinco focos de revisão que rendem achado concreto
Uma dimensão por rodada, lembra? Aqui vão as cinco que costumam render achado com endereço, cada uma com a frase de pedido pronta
1. Regressão contra a intenção declarada:
Dimensão: regressão. Onde este diff faz o sistema deixar de fazer algo que ele fazia
antes e que não está na lista do que deveria mudar?
É a dimensão mais subestimada. O bug clássico de PR não é o código novo estar errado, é o código velho ter parado de rodar
2. Tratamento de erro e caminhos de falha:
Dimensão: caminhos de falha. Para cada chamada externa, timeout, retorno vazio ou
exceção possível neste diff, mostre o que acontece hoje e o que o usuário vê.
3. Concorrência e estado compartilhado:
Dimensão: concorrência. Se duas execuções entrarem neste caminho ao mesmo tempo,
qual estado compartilhado pode ser lido ou escrito fora de ordem? Descreva o intercalamento.
Exigir o intercalamento passo a passo é o que impede a resposta genérica de "pode haver race condition"
4. Borda de dados:
Dimensão: borda de dados. Liste valores concretos (nulo, string vazia, lista vazia,
zero, negativo, limite máximo) que passam por este diff e o resultado de cada um.
5. Revisão segura do código do diff:
Dimensão: segurança defensiva. Nas linhas alteradas, verifique validação de entrada,
controle de autorização e segredo exposto. Aponte arquivo, linha e a correção.
Aqui vale relembrar o limite: o Astra ajuda em secure code review e patching, mas recusa criar exploit de prova de conceito
Então peça a falha e o patch, não a arma
Bônus: a sessão longa de revisão
Revisar uma PR grande é uma sessão que enche a janela rápido, e é aí que o modelo começa a esquecer a intenção que você declarou lá no começo
Com o Astra, o Codex ganhou uma nova forma de preservar e recuperar contexto quando a janela enche, substituindo a resumarização repetida por notas pesquisáveis
É um problema que todo mundo desse mercado está atacando ao mesmo tempo, cada um do seu jeito. Quem também trabalha do outro lado da cerca vale dar uma olhada no que o Ponytail muda no Claude Code e comparar as abordagens
Como filtrar achado falso antes de levar para o time
Agora a parte que ninguém conta: nem todo achado é achado
E não tem nada mais constrangedor do que abrir uma discussão na PR do colega com um bug que não existe. Já me ferrei uma vez por causa disso 😅
Quatro padrões, com a causa e o teste antes de você apertar "comentar":
Sintoma: achado sem arquivo e linha
Causa: o pedido não tinha formato obrigatório, então o modelo respondeu em prosa
Teste: exija a reescrita no formato de quatro campos. Achado que não sobrevive à exigência de localização exata normalmente não sobrevive à leitura do código também
Sintoma: bug "de manual" que não existe no diff
Aquele clássico: "falta tratamento de erro na chamada HTTP", só que existe um wrapper que já trata
Causa: contexto insuficiente dos arquivos vizinhos
Teste: reproduza mentalmente o caminho apontado, de cima pra baixo. Se a proteção existe uma camada acima, mande a camada acima e peça a reavaliação
Sintoma: alerta de segurança sobre código que não mudou
Causa: escopo não delimitado ao diff
Teste: confira se a linha citada aparece de fato entre as linhas alteradas. Se não aparece, não é achado desta PR (pode virar issue depois, mas não trava a revisão)
Sintoma: severidade inflada
Tudo vira "crítico", inclusive log com nível errado
Causa: nenhum critério de impacto foi definido no pedido
Teste: peça ao modelo que tente refutar o próprio achado, com essa frase:
Tente REFUTAR cada achado que você acabou de reportar.
Para cada um, mostre por que ele pode NÃO ser um problema real neste código.
Se a refutação for mais forte que o achado, marque como descartado.
Classifique o que sobrar por impacto: quebra em produção, comportamento errado silencioso,
ou risco teórico.
Como prevenir tudo isso:
Template fixo
Salva os passos 1 a 5 num arquivo, reaproveita a cada revisão e muda só a intenção e o diff
A revisão fica comparável entre PRs, você para de reinventar o prompt às onze da noite, e ainda casa bem com a tarifa de entrada em cache
Conclusão
No fim, code review com GPT-6 Astra é menos sobre o modelo e mais sobre o contrato que você dá pra ele
A estrutura é sempre a mesma: intenção declarada, uma dimensão por rodada, localização exata obrigatória, e filtro de achado falso antes de qualquer comentário público
Próximo passo concreto: salva o template, roda na sua próxima PR em medium e compara lado a lado com uma revisão solta de "dá uma olhada nesse diff"
A diferença aparece na primeira PR, e é meio absurda
Duas notas honestas pra fechar: o acesso ainda é parcial por causa do rollout faseado, então pode variar por conta e região
E o corte de conhecimento do modelo é 30 de abril de 2026, ou seja, o que for lib nova ou API que mudou depois disso, você precisa colocar no contexto na mão
Bora testar? 🙂
até o próximo post!
Perguntas frequentes
Quanto custa revisar código com o GPT-6 Astra pela API da OpenAI?
O preço padrão do gpt-6-astra é US$ 10 por milhão de tokens de entrada e US$ 50 por milhão de tokens de saída, com cache saindo por US$ 1 por milhão de tokens em cache e US$ 12,50 por milhão de tokens de escrita em cache. Diffs muito grandes importam: acima de 272 mil tokens de entrada, o request inteiro leva sobretaxa de 2x em entrada e cache e 1,5x em saída. Batch e Flex custam metade do padrão, e o modo Fast cobra o dobro pra entregar até 2x mais velocidade.
Qual o tamanho máximo de diff que o GPT-6 Astra consegue revisar de uma vez?
A janela de contexto do gpt-6-astra é de 1.050.000 tokens, com saída de até 128.000 tokens. Na prática, dá pra mandar o diff inteiro junto com bastante contexto de arquivos vizinhos sem estourar limite, o que ajuda justamente no passo 2 do pedido (delimitar diff e contexto mínimo).
O GPT-6 Astra pode ser usado para criar exploits durante a revisão de segurança?
Não. O Astra é o primeiro modelo que a OpenAI classifica no limiar Critical de cibersegurança do seu Preparedness Framework, e por isso ele ajuda em tarefas de defesa como secure code review e patching, mas recusa tarefas mais avançadas como criar exploits de prova de conceito. Por isso o pedido de revisão precisa ser montado como defesa, não como ataque.
Qual reasoning.effort usar para revisão de diff: medium ou max?
A orientação da OpenAI é começar com medium como ponto de equilíbrio entre qualidade e custo. Use low quando a latência importa mais que profundidade, high ou xhigh quando mais raciocínio traz ganho medido de qualidade, e reserve max pro trabalho mais difícil, onde qualidade vem antes de tudo. O gpt-6-astra não suporta o nível none.
O GPT-6 Astra já está disponível para todas as contas do ChatGPT e da API?
Ainda não pra todo mundo. O rollout é faseado: começou por um conjunto limitado de organizações, as participantes do programa de cibersegurança Daybreak, e nos dias seguintes chega ao ChatGPT Plus, Pro, Business e Enterprise, além da API da OpenAI e da AWS. Se o seletor de modelo ainda não mostrar o Astra na sua conta, é esperado.
Como o GPT-6 Astra se compara ao GPT-5.6 Sol em benchmarks de código?
No DeepSWE v1.1, o Astra marcou 74,1% contra 70,8% do GPT-5.6 Sol. No SRE-Bench15, benchmark de engenharia reversa de binários, o Astra chegou a 88,0% das tarefas em uma tentativa e 99,2% em até quatro, contra 55,9% e 68,7% do Sol. Mas, como o post reforça, esses números vêm de benchmark: quem decide se a revisão do SEU diff é boa é a estrutura do pedido.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
Como testar o GPT-6 Astra no seu projeto antes de migrar (passo a passo)
Testar o GPT-6 Astra antes de migrar: monte de 10 a 20 tarefas reais do seu produto, compare com seu modelo atual e veja nota, tokens e custo lado a lado.
Por que o GPT-6 Astra corta a resposta no meio? O limite de 128 mil tokens de saída e como fatiar tarefas longas
O GPT-6 Astra lê até 1 milhão de tokens, mas o limite de tokens de saída é 128 mil por resposta. Veja por que ele corta e como fatiar tarefas longas.
Como migrar seu projeto para o GPT-6 Astra sem quebrar o que já funciona: checklist antes de trocar o modelo
Migrar para o GPT-6 Astra sem quebrar o que já funciona: checklist com baseline, rota por vez, parâmetros revisados e rollback pronto antes de trocar o modelo.
