Quem assina embaixo do código que a máquina escreveu

Responsabilidade não transfere pro modelo. Um post-mortem com 'o agente errou' no relatório, e a decisão de banir a voz passiva em todo PR gerado por IA.

Capa do artigo Quem assina embaixo do código que a máquina escreveu

Um relatório de incidente chegou na minha mesa com uma frase que eu já tinha visto mil vezes, só que de roupa nova: “o agente gerou uma query sem índice e o banco caiu em produção”. Técnico, educado, e sem um único responsável dentro dele. Antes a gente escrevia “o script falhou” ou “a biblioteca tinha um bug”. O modelo só ofereceu um sujeito mais convincente pra uma manobra antiga: transformar quem aprovou o merge em espectador do próprio código.

Bani a frase. Não por capricho de processo, e sim porque ela reescreve a verdade do incidente. “O agente errou” narra um evento sem dono, e código em produção não tem evento sem dono. Tem alguém que leu, ou que fingiu ter lido, e apertou o botão.

A voz passiva é onde a responsabilidade vaza

Existe um padrão de linguagem que eu aprendi a tratar como cheiro de fumaça: a frase em que a ação acontece mas ninguém a comete. “Foi mergeado um código com credencial hardcoded.” Por quem? “Decidiu-se usar o output do modelo direto no banco.” Quem decidiu? Toda vez que o sujeito some da oração, a conta some junto.

Com agentes, esse apagamento ficou barato demais. O modelo virou o sujeito universal de qualquer erro, o funcionário fantasma que aceita qualquer culpa porque não sente nenhuma. Então a regra no relatório passou a ser trivial e inegociável: sujeito humano, verbo na ativa. Não “o agente introduziu a regressão”, mas “aprovei o PR que introduziu a regressão”. A mudança gramatical parece cosmética. Ela não é. Ela devolve o nome pra dentro da frase, e o nome é a única coisa que aciona vergonha, aprendizado e correção.

O modelo não assume o pager às duas da manhã

O argumento que fecha a discussão é operacional, não moral. Quando o alerta dispara às duas da manhã, quem abre o notebook é uma pessoa. O modelo que escreveu a função não acorda, não é paginado, não perde o domingo, não responde ao cliente na segunda. A responsabilidade acompanha quem carrega o pager, e o pager não é gerável.

Por isso todo PR gerado por IA no meu time leva nome humano de autor e nome humano de revisor, sem exceção. O modelo pode ter escrito cada linha. A assinatura continua sendo de gente. Isso não é burocracia: é o reconhecimento de que aprovar é um ato, e atos têm autor. Quem clica em “merge” está dizendo “eu li isto, entendi isto, e banco meu nome nisto”. Se essa frase for mentira, o problema não é o modelo.

Delegar a escrita é legítimo. Delegar a leitura é abandonar o posto.

“Não li, o agente escreveu” é falha de ownership, não desculpa

A frase mais perigosa que ouvi neste ano não veio de um júnior. Veio de gente experiente, no tom mais casual possível: “não revisei com calma, foi o agente que escreveu”. Dita assim, soa como explicação. Na verdade é uma confissão de que a pessoa parou de fazer o trabalho e não avisou ninguém.

Ler o que entra no seu sistema sempre foi parte do trabalho, muito antes de existir agente. O que mudou é o volume: a máquina produz diff mais rápido do que qualquer humano consegue produzir, e a tentação é aprovar na mesma velocidade. Mas velocidade de geração não compra dispensa de leitura. Se você não tem tempo de entender o que aprova, você não tem tempo de aprovar. Gera menos, ou lê mais. Não existe terceira opção que não seja empurrar risco pra frente com o nome de outra pessoa.

O agente estende o alcance de quem o usa, e alcance estendido também estica a omissão de quem não lê. Um time que aprova sem ler com o modelo é o mesmo time que aprovava sem ler antes dele, só que agora mais rápido e com uma desculpa mais bem-acabada.

Voltei o relatório daquele incidente pra reescrita. A versão final dizia: “aprovei uma query sem índice porque não revisei o plano de execução”. Menos confortável, e verdadeira. Autoria de código a gente delega à vontade. Autoria da decisão de colocá-lo no ar, nunca.