{"record":{"id":"97ba31cc67d430eb","repo":"gitbutlerapp/gitbutler","slug":"target-value-is-required","errorCode":null,"errorMessage":"{} target value is required","messagePattern":"(.+?) target value is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/but-agentlog/src/cli.rs","lineNumber":358,"sourceCode":"                None => {\n                    let status = find_session_status(&repo_path, &session_key)?\n                        .with_context(|| format!(\"agent session '{session_key}' was not found\"))?;\n                    let timeline = get_session_timeline_outline(\n                        &repo_path,\n                        &session_key,\n                        status,\n                        Some(limit.unwrap_or(DEFAULT_TIMELINE_LIMIT)),\n                    )\n                    .context(\"failed to read agent session timeline\")?;\n                    Ok(CommandOutput::Timeline(timeline))\n                }\n            }\n        }\n        Command::Skim { target, value } => {\n            let explicit_target = match (target, value) {\n                (Some(target), Some(value)) => Some((target, value)),\n                (Some(target), None) => {\n                    anyhow::bail!(\"{} target value is required\", target.as_str())\n                }\n                (None, Some(_)) => {\n                    anyhow::bail!(\"target kind is required when target value is provided\")\n                }\n                (None, None) => None,\n            };\n            let repo_path = if explicit_target.is_some() {\n                resolve_read_repo_path(dir)?\n            } else {\n                resolve_workdir(dir)?\n            };\n            let (target, value) = match explicit_target {\n                Some(target) => target,\n                None => skim::resolve_default_branch_target(&repo_path)?,\n            };\n            let target_key = related_session_target_key(target, &value);\n            let sessions = find_related_sessions_limited_by_statuses(\n                &repo_path,","sourceCodeStart":340,"sourceCodeEnd":376,"githubUrl":"https://github.com/gitbutlerapp/gitbutler/blob/2497b8007aa4a1922dae9a805b32ffe5b5037785/crates/but-agentlog/src/cli.rs#L340-L376","documentation":"but-agentlog's skim subcommand takes a target kind (branch/review/change) plus a value. When a target kind is supplied without its value, argument parsing succeeds but run() rejects the half-specified pair with this bail, naming the kind whose value is missing (e.g. 'review target value is required').","triggerScenarios":"Running `but agentlog skim <kind>` with only the kind — Command::Skim { target: Some(t), value: None } — e.g. `but agentlog skim review` with no identifier after it.","commonSituations":"Shell completion or copy-pasted commands losing the trailing value; scripts building argv conditionally and omitting the value branch; values swallowed by quoting mistakes.","solutions":["Supply the value for the given kind: but agentlog skim review <id> (or branch/change per --help).","Or drop the kind entirely to let skim auto-discover the default branch target.","Fix wrapper scripts so kind and value are always emitted as a pair."],"exampleFix":"# before\nbut agentlog skim review\n# after\nbut agentlog skim review 12345","handlingStrategy":"validation","validationCode":"// Rust (clap): make the pair self-validating before run()\n#[derive(clap::Args)]\nstruct SkimArgs {\n    #[arg(requires = \"value\")]\n    target: Option<TargetKind>,\n    #[arg(requires = \"target\")]\n    value: Option<String>,\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pass target kind and value together, or neither.","Use clap requires/conflicts_with constraints so half-pairs are rejected at parse time.","Test wrapper scripts with missing positional arguments."],"tags":["cli","argument-validation","agentlog","skim"],"backgroundTag":"missing-cli-argument","analyzedSha":"2497b8007aa4a1922dae9a805b32ffe5b5037785","analyzedAt":"2026-08-17T00:30:25.648Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}