AUR-477 — Diff grande não vira review zero
Problema
Acima de certo tamanho, um pull request recebia review nenhuma. A reserva de pior caso que o AUR-467 introduziu (necessária — antes a declaração de cobertura era anexada fora do orçamento e estourava o teto) era proporcional ao total de arquivos de código do diff, não ao que a declaração de cobertura efetivamente lista.
Medido: com 200 arquivos e MaxTokens entre 1500 e 3000, a reserva sozinha
(~1674 tokens) somada ao prompt base e à reserva de resposta excedia o
orçamento, BuildPrompt retornava erro, e o reviewer propagava isso como
falha dura com review zero.
Causa raiz
renderCoverageDeclaration listava todos os arquivos omitidos, um por
linha. O pior caso (todos omitidos) era reservado inteiro antes do TrimToFit
(maxCoverageDeclarationTokens), então o teto era consumido pela própria
declaração antes de sobrar espaço para qualquer código.
Correção (duas partes)
-
Lista de omitidos limitada (
maxOmittedBullets = 20): a declaração lista até 20 arquivos omitidos e, além disso, troca para a contagem exata (... and N more code files not reviewed). A contagem de "quantos ficaram de fora" nunca é limitada — a lista de nomes é que tem tamanho fixo e orçável. Arquivos parciais continuam listados na íntegra, porque cobertura parcial é exatamente o silêncio que o AUR-467 existe para matar. -
Reserva pelo que é declarado, não pelo total: a reserva da declaração converge medindo o texto real montado (
System + User), e não uma soma de estimativas por parte. Isso também fecha o arredondamento do estimator (len/4arredonda cada parte para baixo, então a soma subestimava a concatenação em até um token por parte).
Critérios de aceite
- AC-001 (nominal): 200 arquivos de código e
MaxTokens=1500→ prompt válido dentro do orçamento, pelo menos um arquivo revisado, e a declaração informa quantos ficaram de fora. - AC-002 (o teto continua sendo teto): o prompt montado nunca excede
MaxTokens, medido sobre o texto final incluindo a declaração. - AC-003 (recusa quando é mesmo impossível): se nem um único arquivo cabe depois da reserva mínima, a montagem recusa em alto e bom som.
Mutações
- MUT-001: desfazer o limite da lista de omitidos (reserva volta a ser dimensionada pelo total de arquivos) → AC-001 cai.
- MUT-002: excluir a declaração de cobertura da medição do teto (a reserva não cresce para cobri-la) → AC-002 cai.