diff --git a/src/signals/settings-preview.ts b/src/signals/settings-preview.ts index 5d466f2c1c..0a5774b499 100644 --- a/src/signals/settings-preview.ts +++ b/src/signals/settings-preview.ts @@ -477,7 +477,7 @@ function buildRepoInstallPreview(args: { } function writesPrPublicSurface(settings: RepositorySettings, decision: PublicSurfaceDecision): boolean { - return decision.willComment || decision.willLabel || shouldPublishPrComment(settings) || shouldApplyPrLabel(settings, "confirmed"); + return decision.willComment || decision.willLabel || shouldPublishPrComment(settings, "confirmed") || shouldApplyPrLabel(settings, "confirmed"); } function requiredInstallPermissions(settings: RepositorySettings, decision: PublicSurfaceDecision): string[] { diff --git a/test/unit/settings-preview.test.ts b/test/unit/settings-preview.test.ts index 5bc74b2069..e11a15d127 100644 --- a/test/unit/settings-preview.test.ts +++ b/test/unit/settings-preview.test.ts @@ -200,6 +200,21 @@ describe("buildRepoSettingsPreview", () => { expect(withoutChecks.warnings.some((warning) => /Checks: write/.test(warning))).toBe(false); }); + it("requires Issues: write for detected-contributors comment mode even when previewing a non-confirmed sample", () => { + // detected_contributors_only + comment_only comments for confirmed miners, so the repo needs + // issues:write regardless of the previewed sample's miner status. Previewing a non-confirmed + // author must not drop the required (and missing) issues permission. + const preview = buildRepoSettingsPreview({ + ...base, + settings: settings({ publicSurface: "comment_only", commentMode: "detected_contributors_only", autoLabelEnabled: false, publicAudienceMode: "oss_maintainer" }), + installation: { ...healthyInstall, status: "needs_attention", missingPermissions: ["issues"] }, + sample: { authorLogin: "contributor", minerStatus: "not_found" }, + }); + expect(preview.decision).toMatchObject({ skipped: false, willComment: false, willLabel: false }); + expect(preview.installPreview.permissions.required).toContain("issues: write"); + expect(preview.installPreview.permissions.missing).toContain("issues"); + }); + it("explains a missing Checks: write permission when the opt-in gate is enabled", () => { const preview = buildRepoSettingsPreview({ ...base,