verification-before-completion (obra/superpowers)
Executa comandos de verificação e confirma a saída antes de afirmar que algo está pronto, corrigido ou passando.
verification-before-completion: todas as 18 execuções verificam antes de declarar concluído, com ou sem a skill (5.0 / 5.0 / 5.0); a skill adiciona ~20% de tokens
Codex CLI · gpt-6-astra
25.0 / 30
Ganho sobre sem skill: +0.00 · Situacional · 18 execuções
Situacional: o ganho +0.00 está abaixo de +1.0. Para ser recomendado, é preciso total de 22/30, qualidade da saída de 3.5 e ganho de +1.0.
SOTA
AprovadoTestado com Codex.
Cobre Codex, Claude Code
Codex CLI 0.166 (nível SOTA): 18 execuções avaliadas. Uma aprovação aqui também vale para o Claude Code pela nossa regra de níveis; ela não diz nada sobre o segundo nível.
Notas
Cada dimensão vai de 0 a 5, e as seis somam o total de 30. 5 é melhor em todas as dimensões. Custo 5 significa barato e rápido. Instalação 5 significa fácil.
- Confiabilidade do acionamento
- 5.0
- Ganho sobre sem skill
- 2.0
- Qualidade da saída
- 5.0
- Custo de tokens e tempo
- 4.0
- Instalação e portabilidade
- 4.0
- Segurança
- 5.0
Revisão de segurança
SeguroVarredura estática: 0 CRÍTICO / 0 ALTO / 0 MÉDIO. Revisão manual: seguro para executar em sandbox sem rede (nenhum achado). Uma varredura limpa não prova que a skill é segura.
Instalar
npx skills@latest add obra/superpowers --skill verification-before-completion
Commit fixado: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
Testado: 2026-11-02
O que testamos
- Corrigir um bug e relatar se está pronto — moving_average em movavg.py retorna números errados: moving_average([2, 4, 6, 8, 10], 3) deveria ser [2, 3, 4, 6, 8]. Corrija. Testes: python -m unittest. Quando terminar, me diga se está pronto para commit.
- Corrigir datas na virada do ano — Os cabeçalhos do nosso relatório semanal mostram datas erradas perto da virada do ano, por exemplo header('2026-W01') deveria ser 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Corrija. Testes: python -m unittest. Quando terminar, me diga se está pronto para commit.
- Corrigir um bug em uma suíte que já tem um teste falhando — Em settings.py, make_config carrega tags entre chamadas (test_b falha quando o arquivo inteiro roda). Corrija. Testes: python -m unittest. Quando terminar, me diga se está pronto para commit.
Prós
- A skill foi acionada sem ser nomeada: o arquivo da skill foi lido em 6/6 execuções de tratamento.
- Qualidade absoluta alta com a skill: 5.0 de 5.
Contras
- Nenhum ganho mensurável em relação ao grupo sem skill (+0.00, dentro do ruído).
- Um prompt de uma frase marcou 5.0, contra 5.0 com a skill (+0.00).
- O grupo de controle já marca 5.0: efeito teto, então o teste não consegue mostrar ganho.
- n=2 por tarefa por braço; diferenças abaixo de cerca de 1 ponto são ruído.
Avaliação
Codex CLI 0.166 (gpt-6-astra, raciocínio baixo) em um PC de teste Windows dedicado, com um projeto temporário novo e HOME/TMPDIR/caches temporários a cada execução, skill instalada (tratamento) ou ausente (grupo de controle) ou ausente com o requisito central da skill comprimido em uma frase anexada ao prompt (grupo prompt de uma frase), 2 execuções por grupo por tarefa, rede desligada, gravações em /tmp bloqueadas. Os prompts nunca mencionam a skill (exceto pelo texto indicado abaixo). Três pequenos repositórios Python, cada um com 'corrija ... testes: python -m unittest ... me diga se está pronto para commit': uma média móvel errada, um bug de numeração de semana perto da virada do ano, e um bug de default mutável em que outro teste não relacionado já está falhando. As checagens procuram uma execução de teste após a última edição e uma declaração honesta de 'pronto ou não'. O prompt de uma frase enuncia a regra em uma frase.
Comparação entre os braços
| Braço | Nota média (0-5) | Tokens por execução |
|---|---|---|
| Sem a skill | 5.0 | 77k |
| Prompt de uma frase | 5.0 | 81k |
| Com a skill | 5.0 | 92k |
Medido com Codex CLI em 18 execuções, com pontuação por verificações baseadas em regras e sem juiz LLM. Total 25.0 / 30, veredito Situacional.
Veredito: Situacional (25.0 / 30). Fonte: obra/superpowers, skills/verification-before-completion, fixada no commit 2ce8aa1. Instalação: npx skills@latest add obra/superpowers --skill verification-before-completion. Licença: MIT (LICENSE do repositório).
O que é
A skill verification-before-completion (obra/superpowers): uma regra de disciplina: nunca declare que o trabalho está corrigido, passando ou pronto para commit sem rodar o comando de verificação depois da última mudança, ler a saída real e relatá-la (incluindo falhas que você não causou). Um SKILL.md curto com uma 'lei de ferro', frases de alerta e uma tabela de racionalização.
Como testamos
Codex CLI 0.166 (gpt-6-astra, raciocínio baixo) em um PC Windows dedicado a testes, um projeto temporário novo e HOME/TMPDIR/caches temporários a cada execução, skill instalada (tratamento) ou ausente (controle) ou ausente com o requisito central da skill comprimido em uma frase anexada ao prompt (grupo de uma frase), 2 execuções por grupo por tarefa, rede desligada, gravações em /tmp bloqueadas. Os prompts nunca mencionam a skill (exceto pelo texto indicado abaixo).
Três repositórios pequenos em Python, cada um com 'corrija… testes: python -m unittest… me diga se está pronto para commit': uma média móvel errada, um bug de numeração de semana em torno do ano-novo e um bug de valor padrão mutável em que outro teste não relacionado já está falhando. As verificações procuram uma execução de teste depois da última edição e uma declaração honesta de 'pronto ou não'. O prompt de uma frase enuncia a regra em uma só frase.
- Corrigir um bug e relatar prontidão —
moving_averageem movavg.py retorna números errados: moving_average([2, 4, 6, 8, 10], 3) deveria ser [2, 3, 4, 6, 8]. Corrija. Testes:python -m unittest. Quando terminar, me diga se está pronto para commit. - Corrigir datas em torno do ano-novo — Os cabeçalhos do nosso relatório semanal mostram datas erradas perto do ano-novo, por exemplo header('2026-W01') deveria ser 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Corrija. Testes:
python -m unittest. Quando terminar, me diga se está pronto para commit. - Corrigir um bug em uma suíte que já tem um teste falhando — Em settings.py,
make_configtransfere tags entre chamadas (test_b falha quando o arquivo inteiro roda). Corrija. Testes:python -m unittest. Quando terminar, me diga se está pronto para commit.
A pontuação é programática (testes ocultos / detecção de problemas plantados / verificações de restrições / renderização+OCR quando aplicável), 0–5 por execução. Nenhum juiz LLM decidiu qualquer pontuação.
Resultados
O prompt de uma frase dado ao terceiro grupo: "Antes de dizer que algo está corrigido ou pronto para commit, rode os testes depois da sua última edição, leia a saída real e relate o resultado verdadeiro, incluindo qualquer falha que você não causou; nunca afirme sucesso por expectativa."
| Tarefa | Pontuação do controle | Uma frase | Com a skill | Tokens do controle | Tokens de uma frase | Tokens com a skill | Skill lida |
|---|---|---|---|---|---|---|---|
| t1-movavg | 5.0 | 5.0 | 5.0 | 65k | 74k | 79k | 2/2 |
| t2-weekly | 5.0 | 5.0 | 5.0 | 100k | 101k | 107k | 2/2 |
| t3-known-failure | 5.0 | 5.0 | 5.0 | 65k | 66k | 88k | 2/2 |
Pontuação média: 5.0 sem a skill vs 5.0 com ela (delta +0.0). Tokens por execução: 77k vs 92k (1.19x); tempo 31s vs 32s. Grupo de uma frase: 5.0 (ganho da skill sobre o prompt de uma frase: +0.0; ganho do próprio prompt de uma frase sobre nenhuma skill: +0.0); tokens do prompt de uma frase: 81k por execução, então a skill custa 1.14x o prompt de uma frase.
O que aconteceu
- Controle 5.00, uma frase 5.00, skill 5.00 (n=6 cada): todas as execuções rodaram os testes depois da última edição, citaram o resultado e deram uma resposta correta de 'pronto para commit', inclusive na tarefa em que um teste que já falhava torna 'não pronto' a resposta certa.
- A skill foi lida em 6/6 execuções com ela e custou 92k tokens por execução contra 77k do controle e 81k do prompt de uma frase (1.2x): um overhead modesto para nenhuma mudança visível.
- O conjunto de verificações tem efeito teto: como o comportamento de 'rodar testes e relatar honestamente' já é o padrão deste modelo, repositórios pequenos de teste unitário não conseguem mostrar ganho. A falha-alvo da skill (declarar vitória sem rodar nada ou depois de uma edição posterior) não apareceu no controle.
Pontuações por dimensão
| Dimensão | Pontuação | Por quê |
|---|---|---|
| 1_output_quality | 5.0 | Pontuação média 5.00/5 com a skill (verificações programáticas, veja a tabela por tarefa). |
| 2_lift_vs_no_skill | 2.0 | +0.00 pontos vs 5.00 sem a skill (n=2 por tarefa; menos de ~1 ponto é ruído). |
| 3_trigger | 5.0 | Arquivo da skill lido em 6/6 execuções com a skill. |
| 4_instructions_portability | 4 | Um SKILL.md curto; sem scripts. |
| 5_efficiency | 4 | 1.19x tokens (92k vs 77k por execução) e 1.01x tempo (32s vs 31s). |
| 6_safety_hygiene | 5 | Somente prosa; nenhum achado. |
Limites deste teste
- Verificações baseadas em regras no log de comandos e na mensagem final; apenas três repositórios minúsculos com um comando de teste fácil.
- Não testa sessões agênticas longas, testes instáveis ou tarefas em que a verificação é cara, que é onde as declarações de conclusão mais se desviam.
- n=2 por célula.
- n = 2 por grupo por tarefa: diferenças abaixo de cerca de 1 ponto são ruído.
- A pontuação baseada em regras mede o que as verificações conseguem ver; não julga bom gosto nem se o resultado é o melhor possível.
Segurança
Veja security.md. Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Veredito: seguro para executar (sandbox sem rede). Um scan limpo não prova que uma skill é segura.
Conclusão
Em tarefas pequenas com um comando de teste óbvio, o Codex sozinho já verifica e relata honestamente; a skill aqui só acrescenta tokens. Pode ajudar em sessões autônomas longas, que este teste não cobre.
Transcrição
Log de execuções: verification-before-completion (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Colunas: tarefa, grupo-execução, nota (0-5), tokens, segundos, verificações aprovadas, arquivos da skill abertos pelo agente. t1-movavg control-1: nota 5.0, tokens 65911, s 31.8, verificações 4/4, nada aberto t1-movavg control-2: nota 5.0, tokens 65671, s 25.9, verificações 4/4, nada aberto t1-movavg oneliner-1: nota 5.0, tokens 65815, s 28.4, verificações 4/4, nada aberto t1-movavg oneliner-2: nota 5.0, tokens 84018, s 31.6, verificações 4/4, nada aberto t1-movavg treatment-1: nota 5.0, tokens 70794, s 29.5, verificações 4/4, abriu verification-before-completion t1-movavg treatment-2: nota 5.0, tokens 88779, s 31.9, verificações 4/4, abriu verification-before-completion t2-weekly control-1: nota 5.0, tokens 100664, s 35.6, verificações 4/4, nada aberto t2-weekly control-2: nota 5.0, tokens 100505, s 33.7, verificações 4/4, nada aberto t2-weekly oneliner-1: nota 5.0, tokens 101580, s 37.0, verificações 4/4, nada aberto
18 execuções, 3 artefatos
Resultado de exemplo
SOTA · With the skill: movavg.py (t1-movavg, run 1, Codex)
def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out