fix: /bug não trava mais no cap de recuperação — red_check amarrado à reprodução + ledger de declarações de toda rodada - #57
Merged
Conversation
… reprodução + ledger de declarações de toda rodada Dois bugs vistos no info-move (sessão eb0df857: 2 das 4 recuperações queimadas em 14s cada, 0 tokens, e a 4ª só existiu por sobras sem commit): 1. fda_bug: o gate one-way do red_check usava a existência de build.json como prova de "fix já aplicado". Builder que aplica o fix e reporta status=fail (fase falha não persiste resultado) e verdict --redo build (apaga o arquivo de propósito) deixam o fix na árvore sem build.json → o teste focal passa → "bug not reproduced". Agora a prova é replayada quando red_test foi replayado e o proof_of bate com savedPhaseKey(red_test); um red_test executado (--redo red_test) apaga a prova stale e revalida (gates.replayableRedProof). 2. builderDeclaredFiles lia só phase_results/ (escrito só em sucesso): a rodada que aplicou o reparo e falhou declarou 17 arquivos, a seguinte declarou os 9 que ela tocou, o commit levou 9 e deixou 10 como sujeira "do run". Ledger declared_files.json na sessão, escrito por agents.execute em TODO envelope (gate failure e status=fail inclusos) e unido em builderDeclaredFiles. fda_bug também loga changed_by_run_but_uncommitted como os outros FDAs. Testes: fia-bug-red-gate (runner real: build falho, --redo build, --redo red_test, prova de outra reprodução), fia-declared-files-ledger e pins em fia-bug-repro-guard. DOCS.md atualizado. 1523 verdes + lint. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MWuJUakJ2JzReCFE4vcHtt
elberrd
added a commit
that referenced
this pull request
Aug 25, 2026
… declarações (#58) Fecha o ciclo de release da PR #57: o gate do red_check amarrado à reprodução e o ledger declared_files.json precisam de uma versão nova para o npm publish. Claude-Session: https://claude.ai/code/session_01MWuJUakJ2JzReCFE4vcHtt Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que muda
Diagnóstico do
/goaltravado no info-move em "limite obrigatório de recuperação do FDA eb0df857: 4/4". Peloevents.jsonl, duas das quatro recuperações morreram emred_checkcom "bug not reproduced" (14s, 0 tokens cada) e a quarta só existiu porque o run anterior fechougoal_metdeixando 10 arquivos do próprio run sem commit. Dois bugs reais, com o mesmo código na main.1.
fda_bug: o gate one-way dored_checkusavabuild.jsoncomo chaveO replay da prova RED só acontecia se
phase_results/build.jsonexistisse. Dois caminhos legítimos não têm esse arquivo:status=fail(fase falha não persiste resultado — foi o que aconteceu às 03:29: "implemented all planned M1 QA repairs, but 5 unrelated E2E failures remain");--redo build, que apaga o arquivo de propósito.Nos dois, o teste focal passa (fix na árvore) e o run fecha como "bug not reproduced" — dead-end determinístico que consome uma recuperação a cada resume.
rm verdict_history.json+ "continue" (o que a FIA recomendou) repetiria o loop.Fix: a prova é amarrada à reprodução, não a outra fase.
red_checkreplay o resultado salvo quandored_testfoi replayado (run.replayedantes/depois) e oproof_ofbate comsavedPhaseKey(red_test)(hash do resultado persistido); umred_testexecutado (--redo red_test) apaga a prova stale antes de validar, para uma validação que falhe nunca ser confundida com a prova antiga num resume posterior. Prova legada (sem binding) é aceita numa reprodução replayada. Tudo emgates.replayableRedProof+utils.savedPhaseKey.2. Rodada de builder que falha perdia a declaração — e o commit deixava sobras
builderDeclaredFileslia sóphase_results/, que o runner escreve apenas em sucesso. O envelope da rodada falha declarava 17 arquivos (está no sqlite); a rodada seguinte declarou só os 9 que ela tocou; o commit levou 9 e deixou 10 como sujeira "do run" — que o orquestrador tentou reconciliar gastando o último verdict.Fix: ledger
imp/data/sessions/<id>/declared_files.json, escrito poragents.executeem todo envelope (gate failure estatus=failinclusos, antes do throw);builderDeclaredFilesune ledger +phase_resultscom o mesmo padrão de nome de fase.fda_bugpassa a logarchanged_by_run_but_uncommittedcomo os outros FDAs testados.Verificação
npm test1523/1523 +npm run lintlimpos.test/fia-bug-red-gate.test.js— runner real (Run+phaseParams) na mesma sequência dofda_bug: build falho após aplicar o fix → resume replay a prova e re-executabuild;--redo buildidem;--redo red_testvalida a reprodução nova e a prova stale some para sempre; prova de outra reprodução nunca é replayada; tabela de decisão +savedPhaseKey.test/fia-declared-files-ledger.test.js— ledger, união no commit, pin de fonte noagents.mjs. Pins novos emfia-bug-repro-guard.Fora desta PR
O runtime do info-move (~alpha.20) continua com o bug até
imp updateapós o publish; as 10 sobras lá são commitadas à mão (mesmo reparo já commitado em2eb33a1, suíte verde com elas na árvore).🤖 Generated with Claude Code
https://claude.ai/code/session_01MWuJUakJ2JzReCFE4vcHtt