teqo-backup/docs/changelog/2026-08-19-ops67.md
Francisco Solla cc6149191b ops(OPS67): retry com backoff nos fetchs do forgejo-api
Um fetch failed transitorio (rede/DNS/reset) matava o run do safety net
(agent-pr-ready-automerge) no meio da espera de checks. Retry no request()
do cliente: fetch reject retenta em qualquer metodo; body-drop em GET
retenta; 5xx (502/503/504) retenta so em GET (body cancelado antes do
retry); 4xx e body-drop em escrita falham fail-closed. 3 retries, base
300ms x2, jitter +-20%, console.warn pt-BR por retry; opcoes flat no
createApi (retries/backoffMs/jitter/sleepImpl). 12 specs unit novas.
2026-08-19 13:28:37 +00:00

1.6 KiB
Raw Permalink Blame History

OPS67 — o cliente scripts/lib/forgejo-api.mjs ganhou retry com backoff nos fetchs: um fetch failed transitório (rede/DNS/reset — o sintoma que matava o run do safety net agent-pr-ready-automerge.yml no meio da espera de checks) agora retenta em qualquer método, e a leitura de body interrompida no meio (mesma classe de falha de rede) retenta em GET; 5xx do Cloudflare (502/503/504) retenta só em GET (protege o poll de 45 min do waitForChecks sem arriscar duplicar efeitos colaterais de escrita — body do 5xx cancelado antes do retry para liberar o socket); 4xx e body-drop em escrita continuam falhando na hora, fail-closed intacto. Política: 3 retries, base 300 ms ×2, jitter ±20%, console.warn pt-BR em cada retry (tentativa N/4), validação retries >= 0/backoffMs >= 0. Opções flat no createApi (retries, backoffMs, jitter, sleepImpl) — defaults preservam o comportamento de todos os 19 call sites (safety net, claim/status, issue-transition, pool, worktree) sem mudança de chamador; zero-dep mantido. Testes: 12 specs novas em forgejoApi.unit.spec.ts (rede GET/POST → sucesso, body-drop GET retenta + POST fail-closed, exaustão de rede/5xx, retries: 0, backoff exponencial [100, 200, 400], jitter ±20% com Math.random pinado, 4xx sem retry, 5xx-GET retry/exaustão, 5xx-POST sem retry) + pin no spec 403 existente (1 fetch por invocação). Verificação: unit 2403 verdes; lint/format/typecheck/knip/cycles verdes. Impl plan: docs/plans/ops67-forgejo-api-retry-backoff-impl.md (aprovado no gate humano; refinamentos do /simplify absorvidos na execução).