Skip to content
Closed
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: 2 additions & 0 deletions src/signals/onboarding-pack.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { isFocusManifestPublicSafe, type FocusManifestPolicy } from "./focus-manifest";
import { labelPolicyNote } from "./repo-policy-compiler";
import { nowIso } from "../utils/json";

export type RepoPolicyContributionLane = {
Expand Down Expand Up @@ -99,6 +100,7 @@ export function focusManifestPolicyToCompilerOutput(policy: FocusManifestPolicy)
preferredLabels: policy.publicSafe.labelPolicy.preferredLabels,
requiredLabels: [],
discouragedLabels: [],
note: labelPolicyNote(policy.publicSafe.validation.linkedIssuePolicy),
},
validationExpectations: policy.publicSafe.validation.expectations,
readinessWarnings: policy.publicSafe.readinessWarnings,
Expand Down
2 changes: 1 addition & 1 deletion src/signals/repo-policy-compiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ function issueDiscoverySummary(preference: FocusManifestLanePreference, summary:
return "Issue discovery is optional; confirm maintainer scope before filing new issues.";
}

function labelPolicyNote(linkedIssuePolicy: string): string {
export function labelPolicyNote(linkedIssuePolicy: string): string {
if (linkedIssuePolicy === "required") return "Link a tracked issue before opening a pull request.";
if (linkedIssuePolicy === "preferred") return "Link a tracked issue when one exists.";
return "Use labels to explain accepted scope, not to promise outcomes.";
Expand Down
17 changes: 16 additions & 1 deletion test/unit/onboarding-pack.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ import {
} from "../../src/services/repo-onboarding-pack";
import { createTestEnv } from "../helpers/d1";
import { upsertRepositoryFromGitHub } from "../../src/db/repositories";
import { parseFocusManifestContent } from "../../src/signals/focus-manifest";
import { parseFocusManifestContent, compileFocusManifestPolicy, parseFocusManifest } from "../../src/signals/focus-manifest";
import { compileRepoPolicyCompilerOutput } from "../../src/signals/repo-policy-compiler";
import {
buildRepoOnboardingPackPreview,
focusManifestPolicyToCompilerOutput,
isRepoOnboardingPackPublicSafe,
type RepoPolicyCompilerOutput,
} from "../../src/signals/onboarding-pack";
Expand Down Expand Up @@ -60,6 +61,20 @@ const POLICY_COMPILER_FIXTURE: RepoPolicyCompilerOutput = {
],
};

describe("focusManifestPolicyToCompilerOutput (#5943)", () => {
it("matches compileRepoPolicyCompilerOutput's labelPolicy.note for the same manifest", () => {
const repoFullName = "octo/widgets";
const manifest = parseFocusManifest({ wantedPaths: ["src/"], linkedIssuePolicy: "required" });
const generatedAt = "2026-01-01T00:00:00.000Z";
const viaCompiler = compileRepoPolicyCompilerOutput({ repoFullName, manifest, generatedAt });
const viaAdapter = focusManifestPolicyToCompilerOutput(
compileFocusManifestPolicy(repoFullName, manifest, { generatedAt }),
);
expect(viaAdapter.labelPolicy?.note).toBe(viaCompiler.labelPolicy?.note);
expect(viaAdapter.labelPolicy?.note).toBe("Link a tracked issue before opening a pull request.");
});
});

describe("buildRepoOnboardingPackPreview", () => {
it("cross-links policy compiler output into onboarding pack inputs for issue 248", () => {
const preview = buildRepoOnboardingPackPreview(POLICY_COMPILER_FIXTURE);
Expand Down
1 change: 1 addition & 0 deletions test/unit/registration-readiness.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ describe("buildRegistrationReadiness", () => {
expect(report.onboardingPackPreview?.previewOnly).toBe(true);
expect(report.onboardingPackPreview?.repoFullName).toBe("octo/manifest");
expect(report.onboardingPackPreview?.contributionLanes.length).toBeGreaterThan(0);
expect(report.onboardingPackPreview?.labelPolicy.note).toBe("Link a tracked issue before opening a pull request.");
expect(JSON.stringify(report.onboardingPackPreview)).not.toMatch(FORBIDDEN_PUBLIC_LANGUAGE);
});

Expand Down