ops(OPS67): retry com backoff nos fetchs do forgejo-api #84
Loading…
Reference in a new issue
No description provided.
Delete branch "OPS67-forgejo-retry-com-backoff-nos-fetchs-do-forgejo-api-fe"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #73
OPS67 — retry com backoff nos fetchs do forgejo-api. Um
fetch failedtransitório (rede/DNS/reset — o sintoma que matava o run do safety netagent-pr-ready-automerge.ymlno meio da espera de checks) agora retenta dentro dorequest()descripts/lib/forgejo-api.mjs— o choke point único do transporte Forgejo (19 call sites: safety net, claim/status, issue-transition, branch-protection, pool, worktree), zero-dep mantido.Política (aprovada no gate humano, impl plan
docs/plans/ops67-forgejo-api-retry-backoff-impl.md):waitForCheckscontra blip do Cloudflare; body do 5xx cancelado antes do retry para liberar o socket). Escrita com 5xx falha na hora — sem risco de duplicar efeitos colaterais.console.warnpt-BR por retry (tentativa N/4); validaçãoretries >= 0/backoffMs >= 0.createApi(retries,backoffMs,jitter,sleepImpl) espelhando ofetchImplinjetável — defaults preservam o comportamento de todos os callers; testes determinísticos (sem espera real).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% comMath.randompinado, 4xx sem retry, 5xx-GET retry/exaustão, 5xx-POST sem retry) + pin no spec 403 existente. Verificação: unit 2403 verdes; lint/format/typecheck/knip/cycles verdes./simplify absorvido: body-drop em GET retentável (P2), cancel do body do 5xx (P2), código morto removido + validação de parâmetros, closure
retryAfterúnica,describeem inglês, restore de mocks, 5 specs de borda adicionadas. Sem migration/access/Consent/UI/DB.Changelog:
docs/changelog/2026-08-19-ops67.md.