{"record":{"id":"1180767707da3fd1","repo":"Hmbown/CodeWhale","slug":"125","errorCode":"125","errorMessage":"lane child stdout was not piped","messagePattern":"lane child stdout was not piped","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/lane/src/runtime.rs","lineNumber":481,"sourceCode":"        Vec::new()\n    };\n\n    let mut child_command = Command::new(&command[0]);\n    child_command.args(&command[1..]);\n    child_command.envs(environment);\n    child_command.stdout(Stdio::piped()).stderr(Stdio::piped());\n    let mut child = match child_command.spawn() {\n        Ok(child) => child,\n        Err(error) => {\n            return fail(\n                anyhow::Error::from(error).context(format!(\"spawn lane child command {command:?}\")),\n                127,\n            );\n        }\n    };\n    let stdout = match child.stdout.take() {\n        Some(stdout) => stdout,\n        None => return fail(anyhow::anyhow!(\"lane child stdout was not piped\"), 125),\n    };\n    let stderr = match child.stderr.take() {\n        Some(stderr) => stderr,\n        None => return fail(anyhow::anyhow!(\"lane child stderr was not piped\"), 125),\n    };\n    let stdout_log = log_path.clone();\n    let stderr_log = log_path.clone();\n    let stdout_thread = thread::spawn(move || stream_child_output(stdout, stdout_log, \"stdout\"));\n    let stderr_thread = thread::spawn(move || stream_child_output(stderr, stderr_log, \"stderr\"));\n\n    let status = match child.wait() {\n        Ok(status) => status,\n        Err(error) => {\n            return fail(\n                anyhow::Error::from(error).context(format!(\"wait for lane child {command:?}\")),\n                LANE_PROXY_FAILURE_EXIT_CODE,\n            );\n        }","sourceCodeStart":463,"sourceCodeEnd":499,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/lane/src/runtime.rs#L463-L499","documentation":"Post-spawn sanity check in run_lane_log_proxy: although stdout was configured as Stdio::piped before spawning the lane child, taking the pipe from the Child returned None. This indicates a runtime/API mismatch in how the child's stdout was set up; the proxy fails the lane with a distinct exit code rather than silently dropping log output.","triggerScenarios":"Thrown at crates/lane/src/runtime.rs:481 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the lane; rare std implementation quirks can lose the pipe handle","Verify the spawned program is not itself closing/redirecting the inherited descriptors in a way that breaks the contract","Update codewhale if a std/OS regression is suspected","Inspect the lane log and exit receipt written by the proxy for correlated failures"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}