Pular para o conteúdo

audit-verification

Um agente termina uma task e diz “pronto — os testes passam.” Ele nunca rodou. Ou escreve código que chama uma função que ninguém definiu. audit-verification é o sinal que pega exatamente isso: uma conclusão alegada sem o trabalho ter sido verificado.

O que resolve

O Octopus já guarda dois dos três jeitos do “pronto” de um agente ser mentira:

  • o bloqueio sintático (o bundle guardrails) barra código sem formatar, sem tipo ou com segredo — mas só no commit, e um agente pode parar sem commitar;
  • o sinal semântico (audit-grounding) sinaliza convenções inventadas e fatos de domínio sem suporte — mas julga significado, não se o trabalho rodou.

Sobra a terceira lacuna: alegou pronto sem rodar. O type checker pegaria uma chamada a uma função inexistente — mas só se for de fato invocado. audit-verification é o lado do tripé que pergunta “isto foi verificado?” e relata quando a resposta é não.

Como resolve

O design mantém o custo recorrente em zero.

  • Um Stop hook em bash puro (verification-check) roda no fim de toda task — sem LLM, sem tokens. Num diff de código, varre o transcript da sessão por evidência de execução (um test / build / typecheck realmente rodou?), detecta referências a arquivo inexistente de forma determinística, e enfileira uma proposal em .octopus/proposals/ só quando o trabalho parece não-verificado.
  • O julgamento fuzzy unverified-completion-claim — comparar o que a sessão alegou contra o que de fato rodou — é esta skill, rodada sob demanda via /octopus:review-proposals, no tier de modelo mais barato. Confrontar uma alegação com evidência é mecânico, não raciocínio.

É signal-only — nunca bloqueia commit, task ou merge. O gate sintático já bloqueia; isto revela a lacuna e deixa a decisão com você.

Uso

O gatilho é automático — o Stop hook verification-check enfileira uma proposal *-verification.md sempre que uma task termina com trabalho não-verificado. Você chega na auditoria pela fila de proposals:

/octopus:review-proposals

Não há chamada de LLM por task: o hook é determinístico, e a skill só roda quando você revisa a fila.