Skip to content
Merged
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
8 changes: 5 additions & 3 deletions src/services/self-dogfood-registration-pack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,11 @@ export function buildSelfDogfoodRegistrationPack(args: {
gittensorConfigRecommendation: GittensorConfigRecommendation;
}): SelfDogfoodRegistrationPack {
const { registrationReadiness: readiness, gittensorConfigRecommendation: recommendation } = args;
const issueDiscoveryReady =
readiness.issueDiscoveryReadiness.ready && readiness.issueDiscoveryReadiness.recommendation === "enabled";
const directPrFirst = !issueDiscoveryReady && readiness.recommendedRegistrationMode !== "issue_discovery";
// Keep the lane strategy consistent with the config recommendation shown in the same pack: direct-PR-first
// exactly when the recommendation advises direct_pr (issue-discovery share 0). Deriving this from the
// readiness report's current-lane mode instead contradicts the recommendation when a repo is currently
// registered for issue-discovery/split but the recommendation advises reverting to direct-PR.
const directPrFirst = recommendation.recommended.participationMode === "direct_pr";

return {
kind: "gittensory_self_dogfood_registration_pack",
Expand Down
33 changes: 30 additions & 3 deletions test/unit/self-dogfood-registration-pack.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,24 +225,51 @@ describe("resolveSelfDogfoodRepoFullName", () => {
});

describe("buildSelfDogfoodRegistrationPack", () => {
it("ready fixture recommends direct-PR-first with actionable areas", () => {
it("excellent fixture recommends a bounded issue-discovery lane, matching the config recommendation", () => {
const repo = repoFor("octo/ready", configFor({ repo: "octo/ready" }));
const issues: IssueRecord[] = [{ repoFullName: repo.fullName, number: 4, title: "Fix flaky cache test", state: "open", labels: ["bug"], linkedPrs: [] }];
const pack = packFromRepo(repo, issues);

// Config/intake are excellent, so the recommendation is "split" (a bounded issue-discovery lane).
// directPrFirst must follow that recommendation, not the repo's current direct-PR lane.
expect(pack.gittensorConfigRecommendation.recommended.participationMode).toBe("split");
expect(pack).toMatchObject({
kind: "gittensory_self_dogfood_registration_pack",
privateOnly: true,
advisoryOnly: true,
directPrFirst: true,
directPrFirst: false,
registrationReadiness: { ready: true, recommendedRegistrationMode: "direct_pr" },
});
expect(pack.actionableAreas.some((area) => area.area === "direct_pr" && area.status === "ready")).toBe(true);
expect(pack.contributorLaneStrategy).toMatch(/bounded issue-discovery lane/i);
expect(pack.maintainerEconomicsNote).toMatch(/maintainer-economics/i);
expect(pack.minerScoreabilityNote).toMatch(/scoreability/i);
expect(pack.rerunHint).toMatch(/Rerun this pack/i);
});

it("keeps direct-PR-first when the recommendation is direct_pr even if the repo is currently issue-discovery", () => {
// Repo is currently registered for issue discovery (recommendedRegistrationMode), but degraded config/
// intake make the recommendation revert to direct_pr. The lane strategy must match the recommendation.
const pack = buildSelfDogfoodRegistrationPack({
repoFullName: "octo/reverting",
registrationReadiness: readinessFixture({ recommendedRegistrationMode: "issue_discovery" }),
gittensorConfigRecommendation: recommendationFixture({
recommended: {
participationMode: "direct_pr",
issueDiscoveryShare: 0,
directPrShare: 1,
maintainerCut: 0,
requireLinkedIssue: false,
labelMultipliers: "start_without_trusted_label_multipliers",
publicSurface: "comment_and_label",
confirmedMinerLabel: "gittensor",
},
}),
});

expect(pack.directPrFirst).toBe(true);
expect(pack.contributorLaneStrategy).toMatch(/direct-PR-first/i);
});

it("not-ready fixture surfaces registration blockers", () => {
const repo = repoFor("octo/unregistered", null);
const pack = packFromRepo(repo, [], [], []);
Expand Down