Skip to content

fix: do not cache transient HTTP read failures (WI-1802) - #427

Merged
stefan-ernst merged 1 commit into
mainfrom
wi-1802-agent
Nov 2, 2026
Merged

stefan-ernst merged 1 commit into
mainfrom
wi-1802-agent

Conversation

@stefan-ernst

Copy link
Copy Markdown
Contributor

The agent read cache treated any nil-error result without a top-level error field as reusable. The HTTP tool returns 429/503 as ordinary JSON with a status_code and body, so a transient failure was cached: the model's retry was suppressed as a duplicate and the loop could stop as no_progress without the provider ever being retried.

Change

Cache a read only when its observable result is reusable; a transient HTTP status (408/429/5xx) is not.

Tests

Windshiftapp/core-tests-internal#28 — a 429/503 read is re-executed and the loop finishes done; a 200 read is still cached.

The agent read cache treated any nil-error result without a top-level error
field as reusable. The HTTP tool returns 429/503 as ordinary JSON with a
status_code and body, so a transient failure was cached: the model's retry was
suppressed as a duplicate and the loop could stop as no_progress without the
provider ever being retried.

Cache a read only when its observable result is reusable; a transient HTTP
status (408/429/5xx) is not.
@stefan-ernst
stefan-ernst merged commit 74d0e34 into main Nov 2, 2026
18 checks passed
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