From f7e2fde25fa5ba91c8125f4269a4508778d9bf10 Mon Sep 17 00:00:00 2001 From: ghost <49853598+JSONbored@users.noreply.github.com> Date: Sun, 14 Jun 2026 06:55:49 -0700 Subject: [PATCH] fix: persist repository gate pack settings --- src/api/routes.ts | 2 ++ src/db/repositories.ts | 1 + test/integration/api.test.ts | 4 +++- test/unit/data-spine.test.ts | 2 ++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/api/routes.ts b/src/api/routes.ts index 92aa9dfea3..537c04dcf8 100644 --- a/src/api/routes.ts +++ b/src/api/routes.ts @@ -513,6 +513,7 @@ const repositorySettingsSchema = z.object({ checkRunMode: z.enum(["off", "enabled"]).default("off"), checkRunDetailLevel: z.enum(["minimal", "standard", "deep"]).default("standard"), gateCheckMode: z.enum(["off", "enabled"]).default("off"), + gatePack: z.enum(["gittensor", "oss-anti-slop"]).default("gittensor"), linkedIssueGateMode: z.enum(["off", "advisory", "block"]).default("advisory"), duplicatePrGateMode: z.enum(["off", "advisory", "block"]).default("block"), qualityGateMode: z.enum(["off", "advisory", "block"]).default("advisory"), @@ -2602,6 +2603,7 @@ export function createApp() { checkRunMode: parsed.data.checkRunMode, checkRunDetailLevel: parsed.data.checkRunDetailLevel, gateCheckMode: parsed.data.gateCheckMode, + gatePack: parsed.data.gatePack, linkedIssueGateMode: parsed.data.linkedIssueGateMode, duplicatePrGateMode: parsed.data.duplicatePrGateMode, qualityGateMode: parsed.data.qualityGateMode, diff --git a/src/db/repositories.ts b/src/db/repositories.ts index 7fb0a827b5..570aaa08d9 100644 --- a/src/db/repositories.ts +++ b/src/db/repositories.ts @@ -512,6 +512,7 @@ export async function upsertRepositorySettings(env: Env, settings: Partial { body: JSON.stringify({ commentMode: "detected_contributors_only", publicSignalLevel: "minimal", + gatePack: "oss-anti-slop", commandAuthorization: { default: ["maintainer"], commands: { preflight: ["pr_author"], "queue-summary": ["maintainer", "collaborator"] } }, }), }, @@ -5605,12 +5606,13 @@ describe("api routes", () => { await expect(updated.json()).resolves.toMatchObject({ commentMode: "detected_contributors_only", publicSignalLevel: "minimal", + gatePack: "oss-anti-slop", commandAuthorization: { default: ["maintainer"], commands: expect.objectContaining({ preflight: ["pr_author"] }) }, }); const settings = await app.request("/v1/repos/entrius/allways-ui/settings", { headers: apiHeaders(env) }, env); expect(settings.status).toBe(200); - await expect(settings.json()).resolves.toMatchObject({ commentMode: "detected_contributors_only", commandAuthorization: { commands: expect.objectContaining({ preflight: ["pr_author"] }) } }); + await expect(settings.json()).resolves.toMatchObject({ commentMode: "detected_contributors_only", gatePack: "oss-anti-slop", commandAuthorization: { commands: expect.objectContaining({ preflight: ["pr_author"] }) } }); const preview = await app.request( "/v1/repos/entrius/allways-ui/settings-preview", diff --git a/test/unit/data-spine.test.ts b/test/unit/data-spine.test.ts index 7d13ded517..f2b2f8c091 100644 --- a/test/unit/data-spine.test.ts +++ b/test/unit/data-spine.test.ts @@ -240,6 +240,8 @@ describe("data spine repositories", () => { // gatePack (#692) round-trips and defaults to gittensor. await upsertRepositorySettings(env, { repoFullName: "owner/repo", gatePack: "oss-anti-slop" }); expect((await getRepositorySettings(env, "owner/repo")).gatePack).toBe("oss-anti-slop"); + await upsertRepositorySettings(env, { repoFullName: "owner/repo", gatePack: "gittensor", linkedIssueGateMode: "block" }); + expect(await getRepositorySettings(env, "owner/repo")).toMatchObject({ gatePack: "gittensor", linkedIssueGateMode: "block" }); await upsertRepositorySettings(env, { repoFullName: "owner/defaultpack" }); expect((await getRepositorySettings(env, "owner/defaultpack")).gatePack).toBe("gittensor"); expect(await getRepoSyncState(env, "missing/repo")).toBeNull();