The dangerous part of a timeout is not the error message. It is the missing fact. Did the operation fail before committing — or did it commit and lose the response? Treating those two states as the same can duplicate durable actions.

attempttimeoutUNKNOWNreconciledecide

Blind retry reproduced the failure.

The first synthetic charge committed successfully, then deliberately raised a timeout before the caller received the response. The deterministic model then called the charge tool again without reconciling state.

01Charge attempt

The backend accepts one intended synthetic operation.

02Commit

The durable effect is recorded.

03Response lost

The caller sees a timeout and cannot infer commit state.

04Blind retry

A second tool call commits a second effect.

A timeout is a statement about what the caller observed — not necessarily about what the system committed.
×2

Blind retry after timeout-after-commit2 effects from one intended operation.

×1

Reconcile after timeout-after-commitStatus returned committed; retry was suppressed.

×1

Reconcile after timeout-before-commitStatus returned absent; one retry was then allowed.

The safe path makes UNKNOWN a real state.

Instead of mapping an error directly to retry, the recovery-aware trajectory maps the ambiguous result to UNKNOWN. That state has only one legal next step in this protocol: reconcile durable state.

UNKNOWN outcome
RECONCILE durable operation state
COMMITTED → complete, no retry
ABSENT → retry allowed
UNKNOWN → keep reconciling / escalate

Scenario A: the commit already happened.

The first call committed, then lost its response. The next tool call queried operation state and observed committed. The run stopped without issuing another charge.

Observed: one attempt, one commit, one reconcile, one final effect.

Scenario B: the commit never happened.

The first call timed out before commit. Recovery still did not assume failure. It reconciled first, observed absent, and only then issued one retry. The retry committed exactly once.

Observed: two attempts, one reconcile, one commit, one final effect.

What the SDK did — and did not do.

The pinned OpenAI Agents SDK tool loop faithfully executed all three deterministic trajectories using the upstream FakeModel. That is important because it separates framework capability from application policy.

The benchmark does not claim the SDK automatically enforces idempotency, reconciliation or retry safety. It demonstrates that an application can encode either an unsafe or safe recovery trajectory on top of the same framework primitives.

01

Ambiguity hazard reproduced · 2/2Blind retry created two effects.

02

Reconcile before retry · 2/2Unknown-after-commit transitioned to status check, not retry.

03

No duplicate after confirmed commit · 2/2One attempt, one effect.

04

Retry only after confirmed absence · 2/2Retry occurred only after durable state returned absent.

05

Pinned reproducible evidence · 2/2Exact upstream SHA + synthetic local effects + durable artifact.

The engineering implication

For payments, orders, deployments, messages, access changes and resource creation, the application should not equate transport failure with state failure. A robust design can combine durable operation IDs, service-side idempotency, read-after-error reconciliation, explicit UNKNOWN states and evidence showing why a retry was permitted or blocked.

The next interesting failure is one layer deeper: what if reconciliation itself is ambiguous? A mature state machine should not collapse that condition back into blind retry. It should preserve uncertainty until stronger evidence arrives or a human takes over.

Interpretation boundary

This is an application-level recovery experiment using synthetic local side effects. It is not a payment-processor test, not a vulnerability claim, not evidence that every timeout requires this exact policy, and not a safety certification for applications built with the SDK.

  1. Pinned upstream commit
  2. Canonical GitHub Actions run
  3. Recovery harness
  4. Machine-readable result

Evidence artifact digest: sha256:9d0141eb981822e14e14ca51721e5b01affd4a3fb26efbe73128b5e199ecfb8d. No production API key, live model, real payment rail or external service was used.

Verdict: blind retry reproduced a duplicate side effect; reconciling durable state before deciding whether retry was legal preserved exactly one intended effect in both ambiguous branches.

RESONANCE Verified Report #003

attempt → ambiguity → reconciliation → legal transition → evidence.

Back to Issue 001