From 0b992c294750ea0977281a4ff19b0aee15e58995 Mon Sep 17 00:00:00 2001 From: rubenmarcus Date: Sat, 22 Aug 2026 01:23:34 +0100 Subject: [PATCH] fix(regua): DOCSAUT deixa de reprovar branch de PR com autor novo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DEFEITO MEU, do #398: a linha de base rodava `gen-docs --check --autoria`, mas `--autoria` só é derivável na MAIN — é exatamente o contrato que o #398 estabeleceu. Qualquer branch com autor novo no histórico reprovava, e a régua passou a cobrar o contrário do que guarda. Bateu em #375, #372, #399 e na pilha de CI de outra sessão, que precisou de PREPUSH=0 para empurrar. Conserto: linha de base sem `--autoria`. A DOCSAUT2 (que pergunta se `--autoria` MORDE a autoria torta) só roda quando a autoria está medível; numa branch onde ela já está torta por si, a régua AVISA que pulou em vez de reprovar. Na main continua valendo integralmente. Conferido: os dois mutantes seguem mordendo na main, e com autoria torta commitada numa branch a régua passa imprimindo o aviso. Co-Authored-By: Claude Opus 5 Signed-off-by: rubenmarcus Agent: Claude Code --- tools/eval/docs-autoria-check.mjs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/eval/docs-autoria-check.mjs b/tools/eval/docs-autoria-check.mjs index f5d27c42..fa6743ea 100644 --- a/tools/eval/docs-autoria-check.mjs +++ b/tools/eval/docs-autoria-check.mjs @@ -46,12 +46,18 @@ if (sujo) { process.exit(1); } -// Linha de base: medir mutação sobre árvore já desatualizada dá veredito sem valor. -if (spawnSync('node', [GERADOR, '--check', '--autoria'], { encoding: 'utf8' }).status !== 0) { +/* Linha de base SEM `--autoria`: com ele, qualquer branch de PR que traga autor novo no + histórico reprovava aqui — o contrato do #398 é que autoria só é derivável na main, e a régua + estava cobrando o contrário do que guarda (bateu em #375, #372, #399). */ +if (spawnSync('node', [GERADOR, '--check'], { encoding: 'utf8' }).status !== 0) { console.log(' \x1b[31m✗\x1b[0m DOCSAUT não dá para medir: os blocos gerados já estão desatualizados (rode: npm run docs)'); process.exit(1); } +/* A DOCSAUT2 pergunta se `--autoria` MORDE a autoria torta. Numa branch onde ela já está torta + por si, a pergunta não tem resposta: pular dizendo isso é honesto, cobrar não. */ +const autoriaMedivel = spawnSync('node', [GERADOR, '--check', '--autoria'], { encoding: 'utf8' }).status === 0; + const original = readFileSync(ALVO, 'utf8'); const geradorOriginal = readFileSync(GERADOR, 'utf8'); const rodar = (args) => spawnSync('node', [GERADOR, '--check', ...args], { encoding: 'utf8' }).status === 0; @@ -75,7 +81,8 @@ try { if (comAutoriaTorta === original) throw new Error('não achei a frase de autoria para mutar'); writeFileSync(ALVO, comAutoriaTorta); if (!rodar([])) falhas.push('DOCSAUT1 autoria torta REPROVOU o PR — cobra de quem não pode consertar (só é derivável após o squash)'); - if (rodar(['--autoria'])) falhas.push('DOCSAUT2 autoria torta PASSOU com --autoria — o portão da main está cego para o único lugar onde o número é derivável'); + if (!autoriaMedivel) console.log(' \x1b[33m⚠\x1b[0m DOCSAUT2 pulada: a autoria já está torta nesta branch (autor novo no histórico), então a mutação não é medível aqui'); + if (autoriaMedivel && rodar(['--autoria'])) falhas.push('DOCSAUT2 autoria torta PASSOU com --autoria — o portão da main está cego para o único lugar onde o número é derivável'); writeFileSync(ALVO, original); // ---- mutação de OUTRO bloco: a tolerância não pode ter vazado para o resto