From 284e0d49b911a16ef3ba73e59719796a9bc1b5a8 Mon Sep 17 00:00:00 2001 From: Dotta Date: Sat, 9 May 2026 21:58:12 -0500 Subject: [PATCH] Validate LLM Wiki space status updates Co-Authored-By: Paperclip --- packages/plugins/plugin-llm-wiki/src/wiki.ts | 5 ++++- .../plugins/plugin-llm-wiki/tests/plugin.spec.ts | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/plugins/plugin-llm-wiki/src/wiki.ts b/packages/plugins/plugin-llm-wiki/src/wiki.ts index cc711489fb1..77fcc997798 100644 --- a/packages/plugins/plugin-llm-wiki/src/wiki.ts +++ b/packages/plugins/plugin-llm-wiki/src/wiki.ts @@ -1442,7 +1442,10 @@ export async function createSpace(ctx: PluginContext, input: CreateSpaceInput): export async function updateSpace(ctx: PluginContext, input: UpdateSpaceInput): Promise<{ status: "ok"; space: WikiSpace }> { const space = await resolveSpace(ctx, input); const nextDisplayName = stringField(input.displayName); - const nextStatus = input.status; + const nextStatus = input.status ?? null; + if (nextStatus !== null && nextStatus !== "active" && nextStatus !== "archived") { + throw new Error("LLM Wiki space status must be active or archived."); + } if (space.slug === DEFAULT_SPACE_SLUG && nextStatus === "archived") { throw new Error("The default LLM Wiki space cannot be archived."); } diff --git a/packages/plugins/plugin-llm-wiki/tests/plugin.spec.ts b/packages/plugins/plugin-llm-wiki/tests/plugin.spec.ts index 223340d19b0..297776b3fcd 100644 --- a/packages/plugins/plugin-llm-wiki/tests/plugin.spec.ts +++ b/packages/plugins/plugin-llm-wiki/tests/plugin.spec.ts @@ -2821,6 +2821,21 @@ Duplicate headings receive stable suffixes. execute.params?.includes("archived"))).toBe(false); }); + it("rejects unknown space statuses through update-space", async () => { + const harness = createTestHarness({ manifest }); + await plugin.definition.setup(harness.ctx); + + await expect(harness.performAction("update-space", { + companyId: COMPANY_ID, + spaceSlug: "default", + status: "suspended", + })).rejects.toThrow("LLM Wiki space status must be active or archived."); + expect(harness.dbExecutes.some((execute) => + execute.sql.includes("UPDATE") && + execute.sql.includes("wiki_spaces") && + execute.params?.includes("suspended"))).toBe(false); + }); + it("omits archived spaces from the spaces data API", async () => { const harness = createTestHarness({ manifest }); const activeRow = wikiSpaceRow({