{"record":{"id":"65c72147ab9f6bf7","repo":"gitbutlerapp/gitbutler","slug":"reviewer-candidates-for-forge-forge-are-not-im","errorCode":null,"errorMessage":"Reviewer candidates for forge {forge:?} are not implemented yet.","messagePattern":"Reviewer candidates for forge (.+?) are not implemented yet\\.","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/but-forge/src/review.rs","lineNumber":1200,"sourceCode":"\n/// List users who can be requested to review on the repository.\npub async fn list_reviewer_candidates(\n    preferred_forge_user: &Option<crate::ForgeUser>,\n    forge_repo_info: &crate::forge::ForgeRepoInfo,\n    storage: &but_forge_storage::Controller,\n) -> Result<Vec<ForgeReviewUser>> {\n    let crate::forge::ForgeRepoInfo {\n        forge, owner, repo, ..\n    } = forge_repo_info;\n    match forge {\n        ForgeName::GitHub => {\n            let preferred_account = preferred_forge_user.as_ref().and_then(|user| user.github());\n            let users =\n                but_github::pr::list_reviewer_candidates(preferred_account, owner, repo, storage)\n                    .await?;\n            Ok(users.into_iter().map(Into::into).collect())\n        }\n        _ => Err(anyhow::anyhow!(\n            \"Reviewer candidates for forge {forge:?} are not implemented yet.\"\n        )),\n    }\n}\n\n/// Request reviews from the given users on a review.\npub async fn request_review(\n    preferred_forge_user: &Option<crate::ForgeUser>,\n    forge_repo_info: &crate::forge::ForgeRepoInfo,\n    review_number: usize,\n    logins: &[String],\n    storage: &but_forge_storage::Controller,\n) -> Result<()> {\n    let crate::forge::ForgeRepoInfo {\n        forge, owner, repo, ..\n    } = forge_repo_info;\n    match forge {\n        ForgeName::GitHub => {","sourceCodeStart":1182,"sourceCodeEnd":1218,"githubUrl":"https://github.com/gitbutlerapp/gitbutler/blob/caf1f223d3cfb94488c9198ad34487c6006c648f/crates/but-forge/src/review.rs#L1182-L1218","documentation":"`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.","triggerScenarios":"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.","commonSituations":"Reviewer pickers offered uniformly across forges; review workflows ported from GitHub-centric products; repos whose remote auto-detection picks GitLab/Bitbucket/Azure.","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."],"exampleFix":"// before\nlet users = list_reviewer_candidates(&user, &info, &storage).await?;\n\n// after\nlet users = match info.forge {\n    ForgeName::GitHub => list_reviewer_candidates(&user, &info, &storage).await?,\n    _ => Vec::new(), // reviewer requests unsupported; hide the picker\n};","handlingStrategy":"validation","validationCode":"use but_forge::forge::ForgeName;\n\nif !matches!(info.forge, ForgeName::GitHub) {\n    // hide the reviewer picker; candidate listing is GitHub-only\n}","typeGuard":"fn reviewer_candidates_supported(forge: &but_forge::forge::ForgeName) -> bool {\n    matches!(forge, ForgeName::GitHub)\n}","tryCatchPattern":"match list_reviewer_candidates(&user, &info, &storage).await {\n    Ok(users) => users,\n    Err(e) if e.to_string().contains(\"not implemented yet\") => Vec::new(),\n    Err(e) => return Err(e),\n}","preventionTips":["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."],"tags":["rust","but-forge","code-review","reviewers","github","not-implemented"],"backgroundTag":"not-implemented-for-platform","analyzedSha":"caf1f223d3cfb94488c9198ad34487c6006c648f","analyzedAt":"2026-08-20T07:55:40.983Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}