Kuberwastaken/claurst · error · anyhow::Error

post_bridge_response: server returned HTTP

Error message

post_bridge_response: server returned HTTP {} for msg {}

What it means

The PUT that uploads a response message to the bridge server completed at the HTTP level but returned a non-2xx status. The message identified by msg_id was not accepted; common causes are an expired session token (401), a session the server no longer knows (404), or server-side errors (5xx).

Solutions

  1. Retry the POST/PUT once — transient failures may succeed on a second attempt
  2. If 401/403, re-authenticate and re-register the bridge session before retrying
  3. If 404, the remote session may have ended; check that the session_id is still valid
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src-rust/crates/bridge/src/lib.rs:1169 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Kuberwastaken/claurst@b0637c97ec (2026-09-10). Data as JSON: /api/errors/0cc7d8910a7eaf54. Report an issue: GitHub.

Appendix: source

Thrown at src-rust/crates/bridge/src/lib.rs:1169

        done = done,
        "Posting bridge response"
    );

    let resp = http
        .put(&url)
        .bearer_auth(&info.token)
        .header("anthropic-version", "2023-06-01")
        .json(&body)
        .send()
        .await
        .context("post_bridge_response: HTTP PUT failed")?;

    let status = resp.status().as_u16();
    if resp.status().is_success() {
        debug!(session_id = %info.session_id, msg_id = %msg_id, "Bridge response posted");
        Ok(())
    } else {
        anyhow::bail!(
            "post_bridge_response: server returned HTTP {} for msg {}",
            status,
            msg_id
        )
    }
}

/// Post a single streaming tool/text event to the bridge server (non-blocking,
/// best-effort).
///
/// POSTs `{"event": <payload>, "ts": <unix_ms>}` to
/// `/api/bridge/sessions/<session_id>/events`.
///
/// Errors are returned to the caller, who should treat them as transient and
/// ignore them so the query loop is never blocked.
pub async fn post_bridge_event(
    info: &BridgeSessionInfo,
    payload: String,

View on GitHub (pinned to b0637c97ec)