AUR-603: achado bloqueante do modelo passa por verificação adversarial
Medido antes
Na PR #112 (lote dev -> main, 2026-10-08) a autorrevisão bloqueou a cada
rodada com achados do modelo que o código refuta. Exemplo: "Validate chamado
sem guarda de nil" (internal/config/config.go:365/368), quando os dois
métodos começam com if c == nil { return nil }. O achado citava a skill de
falha fechada com severidade error, e o gate reprovava. Não havia nenhum
passo entre a resposta do modelo e o gate que conferisse a afirmação contra o
código.
O que mudou
internal/review/verify(pacote novo):Verifier.Verifyenvia ao verificador cada achado do modelo (Originvazio, semAssessment) que bloquearia. A janela da linha citada e as ocorrências dos símbolos que o achado nomeia (declarados, segundo a gramática, em arquivos do mesmo diretório) são lidas da revisão revisada (tools.Revision). A resposta JSON{"verdict","reason","quote"}é lida com veredito fechado. Sórefutedcom citação não vazia, presente literalmente num arquivo mostrado (normalizando só CRLF e espaços no fim da linha), rebaixa o achado. Qualquer outro desfecho mantém o bloqueio, com o motivo registrado:confirmed,uncertain,quote_not_found,invalid_answer,provider_error,call_limitousource_unavailable.internal/prompt/templates/verify.md+BuildVerificationPrompt: o prompt próprio do verificador. Ele não pode criar achado nem mudar severidade.internal/config:review.verification(enabled, padrão ligado;max_calls, padrão 8, negativo recusado emLoad), classificado como escolha do repositório na governança.cmd/aurumcode:runGatechamaverifyModelFindingsantes do pipeline. "Bloquearia" (modelFindingBlocks) é--fail-on, a decisão do própriogate.EvaluateGatesobre o achado isolado, com exceções, ou, sem gate,error/warning. O chamador é o orquestrador da revisão, então o custo conta no--limite. O achado refutado sai deresult.Issues(gate,--fail-on, contagem sem gate) e vira sugestão não bloqueante "Refutado pela verificação", limitação marcada, linha no stderr e entrada da chaveverificationda auditoria. O mantido é dito no stderr com o motivo. Os textos estão no catálogo i18n (pt-BR e en).- Os testes que contam as chamadas do provedor (AUR-524 e AUR-553, via
aur524GateConfig) desligamreview.verification, porque medem a chamada da própria revisão. O provedor offline grava o prompt de verificação em<captura>.verificacao, ao lado da captura. Assim a captura continua sendo o prompt da revisão (tutoriais memoria, skills e qualquer-linguagem; AUR-432/593), e o prompt da verificação também pode ser observado. - Tutorial
revisao, casoachado-refutado: a refutação com citação literal aprova e audita; a citação parafraseada reprova (exit 3).
Prova
Cenário realista: internal/review/verify/testdata, com o achado do modelo
de revisão (review-finding.json) e as respostas do verificador (literal e
parafraseada) sobre o código Validate com guarda de nil.
| Item | Teste | Comando |
|---|---|---|
| AC-001 | TestAC001RefutedWithLiteralQuoteIsDemotedAndRecorded, TestVerificationDemotesRefutedModelFindingBeforeTheGate |
bash tests/acceptance/AUR-603.sh AC-001 |
| AC-002 | TestAC002RefutedWithQuoteNotInRevisionKeepsBlocking, TestAC002TrailingSpacesAreTheOnlyForgivenDifference, TestVerificationKeepsBlockingWhenTheQuoteIsNotTheCode |
... AC-002 |
| AC-003 | TestAC003EveryOtherOutcomeKeepsBlocking |
... AC-003 |
| AC-004 | TestAC004DeterministicFindingsAreNeverSent, TestVerificationDemotesRefutedModelFindingBeforeTheGate |
... AC-004 |
| AC-005 | TestAC005NonBlockingFindingsAndTheCeiling, TestVerificationDisabledSendsNothing, TestReviewVerificationDefaultsAndValidation |
... AC-005 |
| MUT-001 | quoteFound aceita qualquer citação não vazia: TestAC002... cai |
... MUT-001 |
| MUT-002 | erro do provedor rebaixa: TestAC003... cai com Outcome:refuted Demoted:true |
... MUT-002 |
Saída de bash tests/acceptance/AUR-603.sh all (go-shared):
AUR-603/AC-001/pass
AUR-603/AC-002/pass
AUR-603/AC-003/pass
AUR-603/AC-004/pass
AUR-603/AC-005/pass
--- FAIL: TestAC002RefutedWithQuoteNotInRevisionKeepsBlocking (0.00s)
AUR-603/MUT-001/rejected
--- FAIL: TestAC003EveryOtherOutcomeKeepsBlocking (0.00s)
AUR-603/MUT-002/rejected
AUR-603/all/pass
Tutorial: AURUMCODE_TUT_IMAGE=aurum-tutoriais:aur603 bash demo/tutoriais/revisao/run.sh all
e --check em todos os tutoriais.
Limites
- Sem checkout git da revisão revisada (
--prcom checkout não verificado, raiz sem.git), nada é verificado e o stderr diz por quê: o achado continua bloqueando. - O resultado da verificação não entra em cache. Um achado servido do cache por arquivo é verificado de novo, com uma chamada nova.
- As ocorrências dos símbolos são buscadas só no diretório do arquivo citado. Uma definição em outro pacote não é mostrada, e a citação dela não conta.