{"record":{"id":"8764d6811207c9c7","repo":"xai-org/grok-build","slug":"error-8764d6","errorCode":null,"errorMessage":"{}","messagePattern":"\\{\\}","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codegen/xai-grok-pager-bin/src/main.rs","lineNumber":390,"sourceCode":"    } else {\n        eprintln!(\"No live leader processes found.\");\n    }\n    Ok(())\n}\nfn resolve_target(args: &LeaderTargetArgs) -> LeaderTarget {\n    match args.pid {\n        Some(pid) => LeaderTarget::Pid(pid),\n        None => LeaderTarget::Environment(xai_grok_shell::env::GrokBuildEnvironment::Production),\n    }\n}\n#[tracing::instrument(skip_all)]\nasync fn connect_to_leader(\n    args: &LeaderTargetArgs,\n) -> Result<(LeaderDescriptor, xai_grok_shell::leader::LeaderClient)> {\n    let target = resolve_target(args);\n    let selection = xai_grok_shell::leader::resolve_leader_target(target)\n        .await\n        .map_err(|e| anyhow::anyhow!(\"{}\", e.message))?;\n    let socket_path = selection\n        .socket_path()\n        .ok_or_else(|| anyhow::anyhow!(\"resolved leader target did not include a socket path\"))?;\n    let client = xai_grok_shell::leader::LeaderClient::connect(\n        socket_path.to_path_buf(),\n        \"grok-pager-leader-cli\",\n        ClientMode::Stdio,\n        ClientCapabilities::default(),\n    )\n    .await?;\n    Ok((selection.descriptor, client))\n}\n/// Prefer socket-verified live PID over a possibly-recycled lock file PID.\nfn leader_pid(d: &LeaderDescriptor) -> Option<u32> {\n    d.live_info.as_ref().map(|li| li.pid).or(d.pid_from_lock)\n}\nfn print_leader_descriptor(d: &LeaderDescriptor) {\n    let pid = leader_pid(d)","sourceCodeStart":372,"sourceCodeEnd":408,"githubUrl":"https://github.com/xai-org/grok-build/blob/bc7f02eddd3d84085849dc19ed216f11c23b0571/crates/codegen/xai-grok-pager-bin/src/main.rs#L372-L408","documentation":"connect_to_leader resolves the leader target and converts resolve_leader_target's structured error (e.message) into an anyhow error verbatim. This surfaces any failure in leader discovery/selection — no leader registered for the environment, ambiguous or invalid target, or stale registration data — before a socket connection is even attempted.","triggerScenarios":"Calling connect_to_leader (from run_leader_mgmt or connect_workspace_control) when resolve_leader_target returns an error whose .message becomes the entire error text — e.g. no leader recorded for the target environment, unknown target name, or corrupt/stale leader registry.","commonSituations":"No `grok` session running so nothing registered as leader; pointing the pager at the wrong environment name; leftover stale leader registration after a crash.","solutions":["Read the embedded e.message for the specific resolution failure and address it","Start a grok session (or `grok workspace start`) so a leader registers for the environment","Verify the --leader/target argument matches an existing environment/leader name","Clear stale leader registration state and let a fresh session re-register"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// ensure a leader is registered before connecting\nlet target = resolve_target(args);\nmatch xai_grok_shell::leader::resolve_leader_target(target).await {\n    Ok(sel) if sel.socket_path().is_some() => Ok(sel),\n    Ok(_) => Err(anyhow!(\"leader resolved but no socket path\")),\n    Err(e) => Err(anyhow!(\"leader resolution failed: {}\", e.message)),\n}","typeGuard":"fn leader_connectable(sel: &xai_grok_shell::leader::LeaderSelection) -> bool {\n    sel.socket_path().map(|p| p.exists()).unwrap_or(false)\n}","tryCatchPattern":"match connect_to_leader(args).await {\n    Ok((desc, client)) => { /* use client */ }\n    Err(e) => {\n        eprintln!(\"cannot reach leader: {e:#}. Start a grok session or `grok workspace start`.\");\n        std::process::exit(1);\n    }\n}","preventionTips":["Always start a grok session before leader-dependent CLI commands","Validate target/environment names against known registrations","Clean stale leader registrations after crashes","Check the socket file exists before attempting LeaderClient::connect"],"tags":["leader","ipc","discovery","cli"],"backgroundTag":"leader-not-found","analyzedSha":"bc7f02eddd3d84085849dc19ed216f11c23b0571","analyzedAt":"2026-08-31T04:59:42.031Z","schemaVersion":2},"datasetVersion":"2026-08-31T09:17:48.483Z"}