{"record":{"id":"f7fb1035eaccd511","repo":"gitbutlerapp/gitbutler","slug":"at-least-one-review-number-is-required","errorCode":null,"errorMessage":"At least one review number is required","messagePattern":"At least one review number is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/but/src/command/mcp/mod.rs","lineNumber":719,"sourceCode":"        last_updated_at,\n        commits: commits.len(),\n        is_conflicted,\n    };\n\n    Ok(BranchDetailsView {\n        kind: \"branch\",\n        repository: resolved.repository,\n        target,\n        details,\n    })\n}\n\nasync fn review_view_for_request(\n    request: ReviewCardRequest,\n    context: RequestContext<RoleServer>,\n) -> Result<ReviewView> {\n    if request.review_numbers.is_empty() {\n        bail!(\"At least one review number is required\");\n    }\n    let resolved = resolve_repository(request.repository, context).await?;\n    review_view_from_repository(resolved, &request.review_numbers)\n}\n\nfn review_view(repository: &Path, review_numbers: &[usize]) -> Result<ReviewView> {\n    let resolved = open_repository(repository)?;\n    review_view_from_repository(resolved, review_numbers)\n}\n\nfn refresh_reviews(request: RefreshReviewsRequest) -> Result<ReviewView> {\n    if request.review_numbers.is_empty() {\n        bail!(\"At least one review number is required\");\n    }\n    review_view(&request.repository, &request.review_numbers)\n}\n\nfn review_view_from_repository(","sourceCodeStart":701,"sourceCodeEnd":737,"githubUrl":"https://github.com/gitbutlerapp/gitbutler/blob/caf1f223d3cfb94488c9198ad34487c6006c648f/crates/but/src/command/mcp/mod.rs#L701-L737","documentation":"The MCP review-card tool handler review_view_for_request (crates/but/src/command/mcp/mod.rs:719) rejects an empty `review_numbers` array before doing any repository work. At least one review/PR number is required to build a review view.","triggerScenarios":"Calling the review-card MCP tool with review_numbers: [] or with the field defaulted to an empty array by the client.","commonSituations":"Templated tool calls that omit the field; clients that default missing arrays to empty; agents calling the tool before listing reviews.","solutions":["Pass one or more review numbers, e.g. review_numbers: [12].","If numbers are unknown, use the review-listing tool first to discover them.","Validate the array is non-empty before issuing the tool call."],"exampleFix":"// before\n{ \"review_numbers\": [] }\n\n// after\n{ \"review_numbers\": [12] }","handlingStrategy":"validation","validationCode":"if request.review_numbers.is_empty() {\n    anyhow::bail!(\"review_numbers must contain at least one review number\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always populate review_numbers; list reviews first when numbers are unknown.","Validate tool arguments client-side before invoking MCP tools.","Do not default missing arrays to empty when templating calls."],"tags":["mcp","review","validation","arguments"],"backgroundTag":"empty-required-parameter","analyzedSha":"caf1f223d3cfb94488c9198ad34487c6006c648f","analyzedAt":"2026-08-20T07:55:40.983Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}