Hmbown/CodeWhale · error
lane log proxy requires a command
Error message
lane log proxy requires a command
What it means
run_lane_log_proxy wraps a child command in a lane log-proxy that captures frames, appends failures to a log, and writes an exit receipt. It requires a non-empty command; an empty argv has nothing to spawn, so it fails fast with exit code 127 (command not found convention) after writing the failure record and receipt.
Solutions
- Pass the command to run as the proxy argument, e.g. lane log proxy -- <cmd> <args...>
- Fix the calling script/config so the command variable is not empty
- Check the written exit receipt and proxy failure log to confirm the empty-command cause
Example fix
// before lane log proxy -- # no command // after lane log proxy -- cargo test --workspace
Defensive patterns
Strategy: validation
Validate before calling
if command.is_empty() {
anyhow::bail!("lane log proxy requires a command");
} Type guard
fn has_command(args: &[String]) -> bool { !args.is_empty() && !args[0].trim().is_empty() } Try / catch
let code = run_lane_log_proxy(args).unwrap_or_else(|e| { eprintln!("lane log proxy: {e}"); 127 }); Prevention
- Validate the command argument is non-empty before invoking the proxy
- Quote commands properly in scripts so argv is not collapsed to empty
- Check exit receipt 127 means the command was missing, not that it failed
When it happens
Trigger: Invoking the lane log proxy (CLI/runtime) without providing the command argument, or with an empty vector/string argv.
Common situations: Missing CLI argument when wiring the proxy in scripts or CI, a config/environment file lost the command field, or shell quoting collapsed the command to nothing.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- log file missing
- mimo-v2.5-tts-voiceclone requires --clone-voice <mp3|wav>…
- mimo-v2.5-tts-voicedesign requires --voice-prompt or…
- Model ' ' requires a voice design prompt. Pass…
- --out is required (write the private key OUTSIDE any…
AI-assisted analysis of Hmbown/CodeWhale@433685b202 (2026-09-15).
Data as JSON: /api/errors/dd55350f4874bcd9.
Report an issue: GitHub.
Appendix: source
Thrown at crates/lane/src/runtime.rs:451
/// hidden CLI should propagate to tmux.
pub fn run_lane_log_proxy(spec: LaneLogProxySpec) -> Result<i32> {
let LaneLogProxySpec {
command,
log_path,
receipt_path,
receipt_tmp_path,
environment_path,
lane_id,
} = spec;
let fail = |error: anyhow::Error, exit_code: i32| -> Result<i32> {
append_proxy_failure(&log_path, &lane_id, &error)?;
write_lane_exit_receipt(&receipt_path, &receipt_tmp_path, &lane_id, exit_code)?;
Ok(exit_code)
};
if command.is_empty() {
return fail(anyhow::anyhow!("lane log proxy requires a command"), 127);
}
let environment = if let Some(path) = environment_path.as_deref() {
let loaded = read_lane_environment(path);
let removed = remove_file_if_present(path);
match (loaded, removed) {
(Ok(environment), Ok(())) => environment,
(Err(error), Ok(())) => return fail(error, LANE_PROXY_FAILURE_EXIT_CODE),
(Ok(_), Err(error)) | (Err(_), Err(error)) => return Err(error),
}
} else {
Vec::new()
};
let mut child_command = Command::new(&command[0]);
child_command.args(&command[1..]);
child_command.envs(environment);
child_command.stdout(Stdio::piped()).stderr(Stdio::piped());View on GitHub (pinned to 433685b202)