tinyhumansai/openhuman · error · SubmitError

reading pool job response

Error message

reading pool job response

What it means

Reading the response line from the worker's stdout failed after the job was submitted. Per the submit contract this is a post-submit SubmitError: the job may or may not have executed, and the worker's stdio framing can no longer be trusted, so the caller must discard the worker. Ok(None) (worker closed stdout) and hard-deadline timeout (worker wedged) map to the same class.

Source

Thrown at src/openhuman/runtime/pool/worker.rs:262

                    Ok(inner) => inner,
                    Err(_) => {
                        return Err(SubmitError::post(anyhow::anyhow!(
                            "pool worker job timed out (hard deadline; worker wedged)"
                        )))
                    }
                },
                None => self.responses.next_line().await,
            };
            let line = match next {
                Ok(Some(line)) => line,
                Ok(None) => {
                    return Err(SubmitError::post(anyhow::anyhow!(
                        "pool worker closed stdout"
                    )))
                }
                Err(error) => {
                    return Err(SubmitError::post(
                        anyhow::Error::new(error).context("reading pool job response"),
                    ))
                }
            };
            let response: PoolJobResponse = match serde_json::from_str(&line) {
                Ok(response) => response,
                Err(error) => {
                    tracing::warn!(
                        lang = self.launch.lang.id(),
                        "[runtime_pool] unparseable worker line skipped: {error}"
                    );
                    continue;
                }
            };
            if response.id.as_deref() != Some(req.id.as_str()) {
                tracing::debug!(
                    lang = self.launch.lang.id(),
                    "[runtime_pool] skipped response for different id={:?}",
                    response.id

View on GitHub (pinned to 7491200858)

Solutions

  1. Discard the wedged/dead worker; do not reuse it for further jobs
  2. Check whether the job has side effects before blindly retrying — it may have run; use idempotency keys if the job type is effectful
  3. Diagnose why the worker stopped responding (infinite loop past its soft deadline, blocked syscall, crash) from its logs
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at src/openhuman/runtime/pool/worker.rs:262 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/b747a60f63dadf13. Report an issue: GitHub.