Skip to content

refactor(dispatch): split provider_loop 808 LoC into resolver + retry + orchestration (T-SP-3 #9)#239

Merged
Destynova2 merged 2 commits intomainfrom
refactor/provider-loop-split
Apr 21, 2026
Merged

refactor(dispatch): split provider_loop 808 LoC into resolver + retry + orchestration (T-SP-3 #9)#239
Destynova2 merged 2 commits intomainfrom
refactor/provider-loop-split

Conversation

@Destynova2
Copy link
Copy Markdown
Contributor

Phoenix audit 2026-04-20 item #9 — provider_loop.rs was a 808 LoC god-file with 3 concerns.

Split

File LoC Owns
resolver.rs 128 Provider selection (registry + scorer/CB + RE-1a endpoint HC) + try_direct_provider_lookup
retry.rs 482 Single-provider dispatch (streaming + non-streaming) + ProviderLoopAction + retry classification + pool rotation + stream middleware layers + encrypted log export
provider_loop.rs 275 (was 808) Outer fallback loop (dispatch_provider_loop) + pre-flight helpers (log_dispatch_attempt, prepare_provider_request, emit_fallback)

Gates

  • cargo build --all-targets
  • cargo test --lib — 949 passed, 0 failed
  • cargo clippy --all-targets -- -D warnings
  • RUSTFLAGS="-D warnings" cargo check --no-default-features
  • Public API unchanged — dispatch/mod.rs:349 unchanged

… + orchestration (T-SP-3 #9)

provider_loop.rs was hosting three distinct concerns in a single file:
1. Provider selection (registry + CB + HC + RE-1a endpoint health)
2. Retry + error classification + single-provider dispatch
3. Outer fallback loop orchestration

Split into:
- src/server/dispatch/resolver.rs (~128 LoC) — resolve_provider,
  try_direct_provider_lookup (backward-compat path).
- src/server/dispatch/retry.rs (~482 LoC) — ProviderLoopAction,
  ProviderAttempt, classify_and_handle_error, emit_provider_error_metrics,
  handle_provider_error, try_rotate_and_retry, dispatch_streaming,
  dispatch_non_streaming, wrap_stream_with_middleware, build_encrypted_content.
- src/server/dispatch/provider_loop.rs (~275 LoC down from 808) —
  dispatch_provider_loop (outer loop), log_dispatch_attempt,
  prepare_provider_request, emit_fallback.

No behavior change: public entry point src/server/dispatch/mod.rs:349
(provider_loop::dispatch_provider_loop) keeps the same signature and
callers are unaffected.

Validation:
- cargo build --all-targets green
- cargo test --lib : 949 passed, 0 failed
- cargo clippy --all-targets -- -D warnings clean
- RUSTFLAGS="-D warnings" cargo check --no-default-features clean

Addresses Phoenix audit 2026-04-20 item #9.
@Destynova2 Destynova2 enabled auto-merge April 21, 2026 06:32
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Destynova2 Destynova2 merged commit 2503979 into main Apr 21, 2026
43 checks passed
@Destynova2 Destynova2 deleted the refactor/provider-loop-split branch April 21, 2026 07:02
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