Comentários Resíduo de Prompt.
Comentários que são artefatos da conversa de geração — prompts reformulados, narração passo a passo, comentários de bate-papo e elisões com placeholders como `// ... resto do código aqui` — versionados no código-fonte em vez de documentação real.
##Signs and Symptoms
Um revisor identifica Comentários Resíduo de Prompt quando os comentários documentam a conversa que produziu o código em vez do próprio código. Quatro indícios, muitas vezes coocorrendo:
- Prompt reformulado — um comentário que parafraseia o pedido literalmente (
// Função para somar dois números) acima de uma função literalmente chamadaadd. - Narração de passos — narração linha a linha de operações óbvias (
// Passo 1: percorrer o array,// incrementa i em 1acima dei++). - Comentários de bate-papo — observações em segunda pessoa, no presente, dirigidas a você, o solicitante (
// Conforme solicitado, aqui está o handler atualizado,// Claro! Aqui está a correção,// Nota: substitua pela sua chave de API real). - Resíduo de elisão / placeholder —
// ... resto do código aqui,// mantenha sua lógica existente,// seu código aqui,// TODO: implementar tratamento de errosdeixados no código-fonte versionado.
// Função para somar dois números e retornar o resultado <- reformula o prompt
function add(a: number, b: number): number {
// Passo 1: somar os dois números <- narra o óbvio
const sum = a + b;
return sum; // retorna a soma
}
// Conforme solicitado, aqui está o handler atualizado <- comentário de bate-papo para "você"
export async function handler(req: Req, res: Res) {
// ... mantenha sua lógica de validação existente aqui ... <- elisão: código real descartado
// TODO: implementar tratamento de erros <- placeholder entregue como está
const user = await db.users.find(req.params.id);
res.json(user);
}
A linha de elisão é a perigosa: ela lê como documentação, mas na verdade é uma instrução para um humano colar código que o modelo omitiu — aplique o bloco literalmente e a validação existente desaparece silenciosamente. A OX Security encontrou "Comentários por Toda Parte" em 90–100% do código gerado por IA em seu estudo de mais de 300 repositórios, descrevendo-os como marcadores que "parecem úteis, mas principalmente apoiam a própria IA, entulhando os repositórios".
##Reasons for the Problem
Por que os modelos os emitem
- Mimetismo de próximo token dos corpora de tutorial. A mistura de treinamento está saturada de posts de blog, respostas do StackOverflow e documentação onde cada linha é explicada para um aprendiz. O modelo reproduz esse registro didático — narração e intenção reformulada — porque é a continuação estatisticamente provável, não porque o repositório ao redor precisa dela.
- Vazamento do registro de bate-papo / bajulação. O RLHF ajusta os assistentes para serem explicativos e agradáveis no canal de bate-papo. Esse tom conversacional e em segunda pessoa vaza para o canal de código, produzindo comentários como "Conforme solicitado…" e "Nota: você deveria…" que não fazem sentido algum quando o código é destacado da conversa.
- Raciocínio narrado como comentários. Os modelos externalizam seu plano ("Passo 1… Passo 2…") como comentários inline — vazamento de cadeia de raciocínio congelado no arquivo.
- Elisão é um recurso de bate-papo, mal aplicado. Em uma resposta de bate-papo,
// ... resto inalterado ...é uma forma educada de evitar reimprimir um arquivo. Quando essa resposta é colada ou aplicada automaticamente a um arquivo real, o recurso se torna resíduo literal — e perda literal de dados. - Sem contexto do repositório, então ele reformula o prompt. Faltando o ticket, o domínio e o "porquê" real, o modelo não tem nada verdadeiro a dizer em um comentário, então recorre a parafrasear a única coisa que tem: o seu prompt. A OX caracteriza os comentários como "marcadores internos para navegar pelos limites de contexto… dependência de memória de curto prazo em vez de compreensão verdadeira".
Por que isso prejudica
- Carga de revisão. Cada linha de narração é ruído pelo qual um humano precisa passar. O enquadramento da OX: a IA "programa como um dev júnior" em velocidade de máquina, e a revisão humana "não consegue escalar para acompanhar a produção da IA" — comentários de resíduo tornam cada diff mais caro de revisar justamente quando há mais diffs.
- Correção / perda de dados. Placeholders de elisão (
// ...código existente...) fazem com que código real seja descartado quando blocos são aplicados às cegas. - Apodrecimento de comentários. Comentários de prompt reformulado duplicam a intenção do código em prosa; a prosa deriva conforme o código muda, deixando documentação ativamente enganosa — o clássico smell de Comentários-como-desodorante de Fowler.
- Incompletude oculta.
// TODO: implementar tratamento de errosé o modelo sinalizando que trabalhou no limite de sua competência; entregue como está, é lógica inacabada disfarçada de tarefa rastreada. - Indícios de segurança.
// substitua pela sua chave de API realnormalmente fica ao lado de uma credencial placeholder codificada — o resíduo marca exatamente a linha com que um scanner (e um atacante) se importa.
##Treatment
Táticas de prompting / geração
- Restrinja o registro: "Produza o arquivo completo. Nunca abrevie com
// ...,// resto do códigoou// código existente. Não narre passos — comente apenas o raciocínio não óbvio (o porquê). Sem comentários conversacionais; isto vai direto para um repositório." - Peça um diff unificado em vez de um trecho embrulhado em prosa, para que as omissões sejam explícitas e aplicáveis em vez de dissimuladas com um comentário de elisão.
- Exija que o modelo rode o formatador e sua configuração de lint (por exemplo,
no-warning-commentscom termos personalizados) e relate o resultado — fechar o loop de "valide com o linter" captura resíduos de placeholder/TODO automaticamente. - Adicione um portão de grep pré-commit / CI para marcadores de resíduo (
rest of the code,your code here,existing code,As requested,Step \d) e trate os marcadores de elisão como um bloqueador rígido, já que eles muitas vezes significam que código foi silenciosamente descartado.
A refatoração
Apague comentários de bate-papo e narração de imediato. Onde um comentário apenas reformula o que o código faz, esse é o sinal para tornar o código autodocumentado — aplique Extrair Função e Renomear para que o nome carregue a intenção, e então mantenha apenas comentários que expliquem um porquê não óbvio (Fowler: Remova comentários que são desodorante para nomes ruins).
// antes — resíduo de prompt
// Crie uma função que valida um endereço de e-mail usando uma regex
function validateEmail(input) {
// verifica se a entrada corresponde ao padrão de e-mail
const re = /^[^@]+@[^@]+\.[^@]+$/;
// retorna verdadeiro ou falso
return re.test(input);
}
// depois — o nome carrega a intenção; o único comentário explica o porquê não óbvio
const EMAIL_RE = /^[^@]+@[^@]+\.[^@]+$/; // intencionalmente frouxo: só pegamos erros de digitação antes do envio, não RFC 5322
const isValidEmail = (input: string): boolean => EMAIL_RE.test(input);
Para resíduo de elisão, nunca aplique o bloco como está escrito — faça diff dele contra o arquivo atual e restaure o que o modelo descartou. Para // TODO: implementar …, ou finalize a lógica ou converta-a em uma issue rastreada e faça o build falhar no termo placeholder para que ele não possa ser entregue como está.
##Detected by
- ESLint no-warning-comments — Sinaliza TODO/FIXME/XXX e termos configuráveis personalizados — defina `terms` para capturar resíduos de placeholder como "your code here" ou "rest of the code"
- SonarQube / SonarSource S125 — Seções de código não devem ser comentadas — sinaliza blocos comentados/elididos deixados para trás
- SonarQube / SonarSource S1135 — Rastreia usos de tags "TODO" — expõe resíduos de placeholder TODO entregues como código
- SonarQube / SonarSource S1134 — Rastreia usos de tags "FIXME"