diff --git a/CHANGELOG.md b/CHANGELOG.md index ce4a703..5ca4c66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to webclaw are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/). +## [0.3.10] — 2026-04-10 + +### Changed +- **Fetch timeout reduced from 30s to 12s**: prevents cascading slowdowns when proxies are unresponsive. Worst-case per-URL drops from ~94s to ~25s. +- **Retry attempts reduced from 3 to 2**: combined with shorter timeout, total worst-case is 12s + 1s delay + 12s = 25s instead of 30s + 1s + 30s + 3s + 30s = 94s. + +--- + ## [0.3.9] — 2026-04-04 ### Fixed diff --git a/Cargo.toml b/Cargo.toml index 6496c18..f7835b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/*"] [workspace.package] -version = "0.3.9" +version = "0.3.10" edition = "2024" license = "AGPL-3.0" repository = "https://github.com/0xMassi/webclaw" diff --git a/crates/webclaw-fetch/src/client.rs b/crates/webclaw-fetch/src/client.rs index d8b35b5..c60554a 100644 --- a/crates/webclaw-fetch/src/client.rs +++ b/crates/webclaw-fetch/src/client.rs @@ -44,7 +44,7 @@ impl Default for FetchConfig { browser: BrowserProfile::Chrome, proxy: None, proxy_pool: Vec::new(), - timeout: Duration::from_secs(30), + timeout: Duration::from_secs(12), follow_redirects: true, max_redirects: 10, headers: HashMap::from([("Accept-Language".to_string(), "en-US,en;q=0.9".to_string())]), @@ -207,13 +207,12 @@ impl FetchClient { /// Fetch a URL and return the raw HTML + response metadata. /// /// Automatically retries on transient failures (network errors, 5xx, 429) - /// with exponential backoff: 0s, 1s, 3s (3 attempts total). + /// with exponential backoff: 0s, 1s (2 attempts total). #[instrument(skip(self), fields(url = %url))] pub async fn fetch(&self, url: &str) -> Result { let delays = [ Duration::ZERO, Duration::from_secs(1), - Duration::from_secs(3), ]; let mut last_err = None;