Skip to content

fix: make execGh's gh-failure backoff cap configurable per caller - #6349

Merged
atomantic merged 1 commit into
mainfrom
fix/gh-backoff-configurable-cap
Sep 5, 2026
Merged

fix: make execGh's gh-failure backoff cap configurable per caller#6349
atomantic merged 1 commit into
mainfrom
fix/gh-backoff-configurable-cap

Conversation

@atomantic

Copy link
Copy Markdown
Owner

Summary

  • Follow-up to fix: back off repeated GitHub CLI reads #6345: that PR added an opt-in backoffKey to execGh() so a caller polling the same gh read on every scheduler tick doesn't re-fire it after a failure with no cooldown — but hardcoded a 15-min cap.
  • updateChecker's scheduler ticks every 30 minutes, which always exceeds that 15-min cap — the cooldown from a failed release check expires before the next tick every time, so the backoff there was a silent no-op for its only production caller.
  • execGh() now takes an optional backoffMaxMs override. branchReconcile/prWatcher/issueReconcile/blockedIssueReconcile keep the default (appropriate for their much faster tick rate); updateChecker passes 3x its own interval so repeated failures actually widen the gap between real attempts.

Test plan

  • cd server && NODE_ENV=test npx vitest run services/github.test.js services/updateChecker.test.js services/branchReconcile.test.js routes/update.test.js services/prWatcher.test.js services/issueReconcile.test.js services/blockedIssueReconcile.test.js — 448 passed, including a new regression test pinning the exact cap-vs-interval defect.
  • Full server suite green except one pre-existing, unrelated load-flaky test (eidoverseWorld.runtime.test.js, passes in isolation).

updateChecker's 30-min scheduler interval always exceeds the 15-min
backoff cap #6345 hardcoded, so the cooldown from a failed release
check expires before every subsequent tick and never actually
suppresses a retry -- a silent no-op for its only production caller.

execGh now takes an optional backoffMaxMs override; branch-reconcile
and the other pollers keep the default (appropriate for their much
faster tick rate), and updateChecker passes 3x its own interval so
repeated failures actually widen the gap between real attempts.
@atomantic
atomantic enabled auto-merge (rebase) September 5, 2026 23:11
@atomantic
atomantic merged commit a440199 into main Sep 5, 2026
7 checks passed
@atomantic
atomantic deleted the fix/gh-backoff-configurable-cap branch September 5, 2026 23:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant