feat(retry): circuitforge_core.retry wrapper over backon #71

Closed
pyr0ball wants to merge 0 commits from feat/65-retry-wrapper into main
Owner

Summary

  • Add circuitforge_core.retry: on_exception() decorator and retry() function, both with CF-standard defaults (full-jitter exponential backoff, max_tries=3, max_time=30s).
  • Re-export backon's disable_retries()/enable_retries() context managers and disable()/enable() process-wide toggles under the circuitforge_core.retry namespace.
  • New core dependency: backon>=4.0 (MIT, zero stdlib deps) - chosen over tenacity/backoff per the eval in #65.
  • Scope: ships the standalone wrapper only. Wiring it into llm/affiliates/reranker/activitypub (the call sites named in #65) is intentionally left as follow-up work per module, rather than retrofitting LLMRouter's existing 500+ line fallback-chain error handling in the same change.

Closes #65

Test plan

  • pytest tests/test_retry -v - 9/9 passed
## Summary - Add circuitforge_core.retry: on_exception() decorator and retry() function, both with CF-standard defaults (full-jitter exponential backoff, max_tries=3, max_time=30s). - Re-export backon's disable_retries()/enable_retries() context managers and disable()/enable() process-wide toggles under the circuitforge_core.retry namespace. - New core dependency: backon>=4.0 (MIT, zero stdlib deps) - chosen over tenacity/backoff per the eval in #65. - Scope: ships the standalone wrapper only. Wiring it into llm/affiliates/reranker/activitypub (the call sites named in #65) is intentionally left as follow-up work per module, rather than retrofitting LLMRouter's existing 500+ line fallback-chain error handling in the same change. Closes #65 ## Test plan - [x] pytest tests/test_retry -v - 9/9 passed
pyr0ball added 1 commit 2026-07-10 17:56:43 -07:00
feat(retry): add circuitforge_core.retry — standard backoff wrapper over backon
Some checks failed
CI / test (pull_request) Has been cancelled
b812943ed1
Standardizes retry/backoff behavior for cf-core modules and products that
make external calls, replacing ad-hoc per-product retry loops. Wraps
backon (MIT, zero stdlib deps) — chosen over tenacity/backoff per the
eval in #65 for native async support, circuit breaker/hedging primitives,
and a process-wide enable/disable toggle ideal for tests.

Ships the standalone wrapper only; wiring it into llm/affiliates/reranker/
activitypub is left as follow-up work per module rather than retrofitting
LLMRouter's existing fallback-chain error handling in the same change.

Bump to 0.22.0.

Closes: #65
pyr0ball added 1 commit 2026-07-10 18:00:35 -07:00
docs(retry): add CHANGELOG entry and README module row
Some checks failed
CI / test (pull_request) Has been cancelled
ed1ee6a489
Follow-up to b812943 — these were authored alongside the retry module
but not staged in the original commit.
Author
Owner

Merged into main via the freeze/0.22.0 integration branch (fast-forward) and released as v0.22.0: https://git.opensourcesolarpunk.com/Circuit-Forge/circuitforge-core/releases/tag/v0.22.0. Closing since the commits are already on main.

Merged into main via the freeze/0.22.0 integration branch (fast-forward) and released as v0.22.0: https://git.opensourcesolarpunk.com/Circuit-Forge/circuitforge-core/releases/tag/v0.22.0. Closing since the commits are already on main.
pyr0ball closed this pull request 2026-07-10 19:20:07 -07:00
Some checks failed
CI / test (pull_request) Has been cancelled

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/circuitforge-core#71
No description provided.