gitbutlerapp/gitbutler · error · anyhow::Error
Reviewer candidates for forge {forge:?} are not implemented
Error message
Reviewer candidates for forge {forge:?} are not implemented yet. What it means
`list_reviewer_candidates()` returns the users who can be requested to review on the repository. Only GitHub is implemented (via `but_github::pr::list_reviewer_candidates`); GitLab, Bitbucket and Azure hit the wildcard arm, so the reviewer picker cannot populate and this error is returned.
Source
Thrown at crates/but-forge/src/review.rs:1200
/// List users who can be requested to review on the repository.
pub async fn list_reviewer_candidates(
preferred_forge_user: &Option<crate::ForgeUser>,
forge_repo_info: &crate::forge::ForgeRepoInfo,
storage: &but_forge_storage::Controller,
) -> Result<Vec<ForgeReviewUser>> {
let crate::forge::ForgeRepoInfo {
forge, owner, repo, ..
} = forge_repo_info;
match forge {
ForgeName::GitHub => {
let preferred_account = preferred_forge_user.as_ref().and_then(|user| user.github());
let users =
but_github::pr::list_reviewer_candidates(preferred_account, owner, repo, storage)
.await?;
Ok(users.into_iter().map(Into::into).collect())
}
_ => Err(anyhow::anyhow!(
"Reviewer candidates for forge {forge:?} are not implemented yet."
)),
}
}
/// Request reviews from the given users on a review.
pub async fn request_review(
preferred_forge_user: &Option<crate::ForgeUser>,
forge_repo_info: &crate::forge::ForgeRepoInfo,
review_number: usize,
logins: &[String],
storage: &but_forge_storage::Controller,
) -> Result<()> {
let crate::forge::ForgeRepoInfo {
forge, owner, repo, ..
} = forge_repo_info;
match forge {
ForgeName::GitHub => {View on GitHub (pinned to caf1f223d3)
Solutions
- Use a GitHub repository for reviewer-request workflows.
- Skip rendering the reviewer picker for non-GitHub forges.
- Implement candidate listing via the GitLab/Bitbucket project-member APIs and add a match arm at crates/but-forge/src/review.rs:1192-1200.
Example fix
// before
let users = list_reviewer_candidates(&user, &info, &storage).await?;
// after
let users = match info.forge {
ForgeName::GitHub => list_reviewer_candidates(&user, &info, &storage).await?,
_ => Vec::new(), // reviewer requests unsupported; hide the picker
}; Defensive patterns
Strategy: validation
Validate before calling
use but_forge::forge::ForgeName;
if !matches!(info.forge, ForgeName::GitHub) {
// hide the reviewer picker; candidate listing is GitHub-only
} Type guard
fn reviewer_candidates_supported(forge: &but_forge::forge::ForgeName) -> bool {
matches!(forge, ForgeName::GitHub)
} Try / catch
match list_reviewer_candidates(&user, &info, &storage).await {
Ok(users) => users,
Err(e) if e.to_string().contains("not implemented yet") => Vec::new(),
Err(e) => return Err(e),
} Prevention
- Treat reviewer-request features as GitHub-only until a backend lands for the forge.
- Feature-flag UI sections per forge rather than per product.
- Assert capability parity in integration tests when new forge backends are added.
When it happens
Trigger: Opening reviewer selection (or calling `list_reviewer_candidates`) for a repository whose `ForgeRepoInfo.forge` is GitLab, Bitbucket or Azure. Any GitHub repo resolves candidates normally.
Common situations: Reviewer pickers offered uniformly across forges; review workflows ported from GitHub-centric products; repos whose remote auto-detection picks GitLab/Bitbucket/Azure.
Related errors
- Review requests for forge {forge:?} are not implemented yet.
- Repository labels for forge {forge:?} are not implemented ye
- Review labels for forge {forge:?} are not implemented yet.
- Review comments for forge {forge:?} are not implemented yet.
- Reactions for forge {forge:?} are not implemented yet.
AI-assisted analysis of gitbutlerapp/gitbutler@caf1f223d3 (2026-08-20).
Data as JSON: /api/errors/65c72147ab9f6bf7.
Report an issue: GitHub.