Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/signals/focus-manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -816,7 +816,7 @@ export function buildFocusManifestGuidance(args: {
detail: preferredLabelsDetail,
action: "Consider applying a maintainer-preferred label so triage stays aligned.",
});
publicNextSteps.push(`Consider a maintainer-preferred label (${manifest.preferredLabels.slice(0, 3).join(", ")}).`);
publicNextSteps.push(`Consider a maintainer-preferred label (${safePreferredLabels.slice(0, 3).join(", ")}).`);
}

if (manifest.linkedIssuePolicy === "required" && linkedIssueCount === 0 && bodyObserved && !hasNoIssueRationale) {
Expand Down
31 changes: 31 additions & 0 deletions test/unit/focus-manifest-preferred-label-next-step.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { describe, expect, it } from "vitest";
import { buildFocusManifestGuidance, parseFocusManifest } from "../../src/signals/focus-manifest";

function guidance(preferredLabels: string[]) {
return buildFocusManifestGuidance({
manifest: parseFocusManifest({ preferredLabels }),
changedPaths: ["src/example.ts"],
labels: [],
});
}

describe("preferred-label public next steps", () => {
it("keeps the safe preferred labels when the configured list also contains an unsafe label", () => {
const result = guidance(["bug", "reward payout", "good first issue"]);
const finding = result.findings.find((entry) => entry.code === "manifest_missing_preferred_label");
const nextStep = result.publicNextSteps.find((entry) => entry.startsWith("Consider a maintainer-preferred label"));

expect(finding?.detail).toBe("Maintainer prefers labels: bug, good first issue.");
expect(nextStep).toBe("Consider a maintainer-preferred label (bug, good first issue).");
expect(nextStep).not.toMatch(/reward payout/i);
});

it("keeps all-safe preferred-label output unchanged", () => {
const result = guidance(["bug", "enhancement", "good first issue"]);
const finding = result.findings.find((entry) => entry.code === "manifest_missing_preferred_label");
const nextStep = result.publicNextSteps.find((entry) => entry.startsWith("Consider a maintainer-preferred label"));

expect(finding?.detail).toBe("Maintainer prefers labels: bug, enhancement, good first issue.");
expect(nextStep).toBe("Consider a maintainer-preferred label (bug, enhancement, good first issue).");
});
});