gitbutlerapp/gitbutler · error
Marking reviews ready is not supported for {:?}
Error message
Marking reviews ready is not supported for {:?} What it means
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.
Source
Thrown at crates/but/src/command/mcp/mod.rs:802
}
fn prepare_mark_review_ready(request: &MarkReviewReadyRequest) -> Result<MarkReadyPreparation> {
let resolved = open_repository(&request.repository)?;
let forge = ForgeRepository::from_context(&resolved.ctx)?;
let review = forge.get_review(&resolved.ctx, request.review_number)?;
if !review.is_open() {
bail!(
"{}{} is not open and cannot be marked ready",
review.unit_symbol,
review.number
);
}
if !review.draft {
return review_view_from_repository(resolved, &[request.review_number])
.map(MarkReadyPreparation::AlreadyReady);
}
if !forge.display.capabilities.pr_service {
bail!(
"Marking reviews ready is not supported for {:?}",
forge.display.name
);
}
let ForgeRepository {
preferred_user,
repository,
storage,
..
} = forge;
Ok(MarkReadyPreparation::Update {
preferred_user,
repository,
storage,
})
}
View on GitHub (pinned to caf1f223d3)
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.
Example fix
// before forge.display.capabilities.pr_service == false // Marking reviews ready is not supported for "SomeForge" // after // integration declares pr_service: true and implements ready-update forge.display.capabilities.pr_service == true // mark-ready succeeds
Defensive patterns
Strategy: validation
Validate before calling
if !forge.display.capabilities.pr_service {
anyhow::bail!("forge {} cannot mark reviews ready; use the forge UI/API", forge.display.name);
} Type guard
fn supports_mark_ready(forge: &ForgeRepository) -> bool {
forge.display.capabilities.pr_service
} Try / catch
match prepare_mark_review_ready(&request) {
Err(err) if err.to_string().contains("not supported for") => {
// fall back to directing the user to the forge's own ready button
}
other => other,
} Prevention
- 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.
When it happens
Trigger: Calling mark-review-ready against a repository whose forge integration does not declare pr_service capability (issue-tracking-only integration or a limited connector).
Common situations: Repository hosted on a forge with a partial GitButler integration; a stub/test forge used in development; capability flags changed after an integration upgrade.
Related errors
- {}{} is not open and cannot be marked ready
- The updated review was missing from the response.
- No branch found for ID: {branch_id}
- Aborting due to empty PR title
- No repository was provided and this MCP client does not expo
AI-assisted analysis of gitbutlerapp/gitbutler@caf1f223d3 (2026-08-20).
Data as JSON: /api/errors/60f135e4323ead36.
Report an issue: GitHub.