Skip to content

fix(account-pool): recover failed requests before streaming - #3116

Closed
smsunarto wants to merge 6 commits into
get-bb:mainfrom
smsunarto:scott/pool-request-recovery
Closed

fix(account-pool): recover failed requests before streaming#3116
smsunarto wants to merge 6 commits into
get-bb:mainfrom
smsunarto:scott/pool-request-recovery

Conversation

@smsunarto

@smsunarto smsunarto commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Human comments

What was wrong

A stale access token or temporary upstream failure could stop a session even when another pooled account was healthy.

What changed

Refresh stale credentials and try eligible fallback accounts before returning an error. Once output reaches the user, do not replay the request. Retries are bounded and stop on cancellation; they cannot guarantee exactly-once generation.

How you verified

All 28 new regressions pass, alongside the existing no-replay check. All 130 plugin tests, typecheck, lint, and formatting passed.

Fork branches are stacked; upstream PR diffs are cumulative.

AGENT GENERATED


This is part 3 of 4 in a stack made with GitButler:

@smsunarto
smsunarto force-pushed the scott/pool-request-recovery branch from a72ef3d to 2656b82 Compare September 5, 2026 07:04
SawyerHood pushed a commit that referenced this pull request Sep 5, 2026
## Human comments

## What was wrong

Conversations could switch accounts under load even while their current
account was healthy. Losing a warm prompt cache can increase uncached
input and latency. Child sessions also missed their parent’s account
affinity, and Codex session headers were dropped.

## What changed

Keep conversations on eligible accounts and let children inherit an
eligible parent’s account. A child can fail over independently. Preserve
native session headers, cache keys, and encrypted payloads so routing
does not unnecessarily disrupt cache reuse.

## How you verified

Quota tests cover failover, staying on the replacement account, and
recovery after all accounts exhaust. Both providers’ tests fail with
affinity disabled. All 229 plugin tests, typecheck, lint, and formatting
passed. Synthetic tests do not measure live cache improvement.

Fork branches are stacked; upstream PR diffs are cumulative.

<!-- GitButler Footer Boundary Top -->
---
This is **part 4 of 4 in a stack** made with GitButler:
- <kbd>&nbsp;4&nbsp;</kbd> #3117 👈 
- <kbd>&nbsp;3&nbsp;</kbd> #3116
- <kbd>&nbsp;2&nbsp;</kbd> #3115
- <kbd>&nbsp;1&nbsp;</kbd> #3112
<!-- GitButler Footer Boundary Bottom -->

> AGENT GENERATED
@SawyerHood

Copy link
Copy Markdown
Collaborator

Closing as already included in #3117, which was squash-merged into main as 4a5e755. Verified that this PR head is included in the top of the stack and that the merged tree matches that stack head. No additional merge is needed.

@SawyerHood SawyerHood closed this Sep 5, 2026
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.

2 participants