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?;