{"record":{"id":"60f135e4323ead36","repo":"gitbutlerapp/gitbutler","slug":"marking-reviews-ready-is-not-supported-for","errorCode":null,"errorMessage":"Marking reviews ready is not supported for {:?}","messagePattern":"Marking reviews ready is not supported for (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/but/src/command/mcp/mod.rs","lineNumber":802,"sourceCode":"}\n\nfn prepare_mark_review_ready(request: &MarkReviewReadyRequest) -> Result<MarkReadyPreparation> {\n    let resolved = open_repository(&request.repository)?;\n    let forge = ForgeRepository::from_context(&resolved.ctx)?;\n    let review = forge.get_review(&resolved.ctx, request.review_number)?;\n    if !review.is_open() {\n        bail!(\n            \"{}{} is not open and cannot be marked ready\",\n            review.unit_symbol,\n            review.number\n        );\n    }\n    if !review.draft {\n        return review_view_from_repository(resolved, &[request.review_number])\n            .map(MarkReadyPreparation::AlreadyReady);\n    }\n    if !forge.display.capabilities.pr_service {\n        bail!(\n            \"Marking reviews ready is not supported for {:?}\",\n            forge.display.name\n        );\n    }\n\n    let ForgeRepository {\n        preferred_user,\n        repository,\n        storage,\n        ..\n    } = forge;\n    Ok(MarkReadyPreparation::Update {\n        preferred_user,\n        repository,\n        storage,\n    })\n}\n","sourceCodeStart":784,"sourceCodeEnd":820,"githubUrl":"https://github.com/gitbutlerapp/gitbutler/blob/caf1f223d3cfb94488c9198ad34487c6006c648f/crates/but/src/command/mcp/mod.rs#L784-L820","documentation":"prepare_mark_review_ready (crates/but/src/command/mcp/mod.rs:802) checks forge.display.capabilities.pr_service before mutating; forge integrations that only expose issues/reviews without a PR service cannot perform a 'mark ready' action, and the forge's display name is included in the error. This is a capability limitation of the integration, not of the review itself.","triggerScenarios":"Calling mark-review-ready against a repository whose forge integration does not declare pr_service capability (issue-tracking-only integration or a limited connector).","commonSituations":"Repository hosted on a forge with a partial GitButler integration; a stub/test forge used in development; capability flags changed after an integration upgrade.","solutions":["Mark the PR ready using the forge's own UI or API instead.","Check the forge integration's declared capabilities before offering the mark-ready action to users.","If the forge genuinely supports the operation, extend the integration to declare pr_service and implement the update path."],"exampleFix":"// before\nforge.display.capabilities.pr_service == false\n// Marking reviews ready is not supported for \"SomeForge\"\n\n// after\n// integration declares pr_service: true and implements ready-update\nforge.display.capabilities.pr_service == true  // mark-ready succeeds","handlingStrategy":"validation","validationCode":"if !forge.display.capabilities.pr_service {\n    anyhow::bail!(\"forge {} cannot mark reviews ready; use the forge UI/API\", forge.display.name);\n}","typeGuard":"fn supports_mark_ready(forge: &ForgeRepository) -> bool {\n    forge.display.capabilities.pr_service\n}","tryCatchPattern":"match prepare_mark_review_ready(&request) {\n    Err(err) if err.to_string().contains(\"not supported for\") => {\n        // fall back to directing the user to the forge's own ready button\n    }\n    other => other,\n}","preventionTips":["Gate mark-ready UI/actions on forge.display.capabilities.pr_service.","Keep forge integration capability flags accurate when adding providers.","Fall back to the forge's native API when the capability is absent."],"tags":["mcp","forge","capabilities","review","unsupported"],"backgroundTag":"unsupported-provider-operation","analyzedSha":"caf1f223d3cfb94488c9198ad34487c6006c648f","analyzedAt":"2026-08-20T07:55:40.983Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}