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

  1. Mark the PR ready using the forge's own UI or API instead.
  2. Check the forge integration's declared capabilities before offering the mark-ready action to users.
  3. 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

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


AI-assisted analysis of gitbutlerapp/gitbutler@caf1f223d3 (2026-08-20). Data as JSON: /api/errors/60f135e4323ead36. Report an issue: GitHub.