From 22dadc793cf5a0d829a4d29b66b092d93b4ebbcc Mon Sep 17 00:00:00 2001 From: Kayos Date: Fri, 15 May 2026 11:54:50 -0700 Subject: [PATCH] forge: raise timeouts for the max-effort whole-book audit pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The prose audit reads a whole story at max effort and genuinely runs past 1800s on a 50k-word book — it was timing out. Bump the audit pass server-side timeout to 3600s and the shared reqwest client ceiling to 7200s (matching clawdforge's new cap). Other passes keep their own shorter timeout_secs. --- skald-core/src/forge.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/skald-core/src/forge.rs b/skald-core/src/forge.rs index b50dcfb..b6f7790 100644 --- a/skald-core/src/forge.rs +++ b/skald-core/src/forge.rs @@ -106,10 +106,12 @@ impl Forge { let client = ClientBuilder::default() .base_url(&cfg.base_url) .token(&cfg.app_token) - // Generation passes at --effort max can run 10–20 min wall - // clock. clawdforge's server-side cap is 1800s — match it. - // Default 120s would strand any prose-craft pass. - .timeout(Duration::from_secs(1800)) + // Generation passes at --effort max run 10–20 min wall clock; + // the max-effort whole-book prose audit can run past an hour. + // This is the client-side ceiling — set high enough to cover + // the slowest pass; each pass still sends its own server-side + // timeout_secs. Default 120s would strand any real pass. + .timeout(Duration::from_secs(7200)) .user_agent(concat!("skald/", env!("CARGO_PKG_VERSION"))) .build()?; Ok(Self { @@ -219,7 +221,9 @@ impl Forge { model: Some(self.model.clone()), system: Some(SYSTEM_PROSE_AUDIT.to_string()), effort: Some(Effort::Max), - timeout_secs: Some(1800), + // A max-effort audit over a whole book genuinely runs long — + // 1800s strands it. 3600s covers a 50k+-word story. + timeout_secs: Some(3600), ..Default::default() }; let r = self.client.run(body).await?;