reject task-management verbs in /lgtm

This commit is contained in:
wassname
2026-06-14 11:24:12 +08:00
parent 9a46828dbf
commit da2879d94c
2 changed files with 21 additions and 6 deletions
+2 -2
View File
@@ -70,8 +70,8 @@ export function parseLgtmArgs(args: string): LgtmCommandSpec {
if (trimmed === "*") return { kind: "view_all" };
const tokens = trimmed.split(/[\s,]+/).map(token => token.trim()).filter(Boolean);
if (tokens[0] === "clear") {
return { kind: "error", message: "Task clearing lives in /tasks now. /lgtm is viewer-only." };
if (["clear", "delete"].includes(tokens[0])) {
return { kind: "error", message: "Task management lives in /tasks now. /lgtm is viewer-only." };
}
return { kind: "view", ids: tokens.map(token => token.replace(/^#/, "")).filter(Boolean) };
+19 -4
View File
@@ -55,9 +55,10 @@ describe("parseLgtmArgs", () => {
});
it("rejects task-management forms", () => {
expect(parseLgtmArgs("clear")).toEqual({ kind: "error", message: "Task clearing lives in /tasks now. /lgtm is viewer-only." });
expect(parseLgtmArgs("clear *")).toEqual({ kind: "error", message: "Task clearing lives in /tasks now. /lgtm is viewer-only." });
expect(parseLgtmArgs("clear #7")).toEqual({ kind: "error", message: "Task clearing lives in /tasks now. /lgtm is viewer-only." });
expect(parseLgtmArgs("clear")).toEqual({ kind: "error", message: "Task management lives in /tasks now. /lgtm is viewer-only." });
expect(parseLgtmArgs("clear *")).toEqual({ kind: "error", message: "Task management lives in /tasks now. /lgtm is viewer-only." });
expect(parseLgtmArgs("clear #7")).toEqual({ kind: "error", message: "Task management lives in /tasks now. /lgtm is viewer-only." });
expect(parseLgtmArgs("delete #7")).toEqual({ kind: "error", message: "Task management lives in /tasks now. /lgtm is viewer-only." });
});
});
@@ -104,6 +105,20 @@ describe("/lgtm command", () => {
await command.handler("clear 1", { ui });
expect(harness.sentMessages).toHaveLength(0);
expect(ui.notify).toHaveBeenCalledWith("Task clearing lives in /tasks now. /lgtm is viewer-only.", "error");
expect(ui.notify).toHaveBeenCalledWith("Task management lives in /tasks now. /lgtm is viewer-only.", "error");
});
it("rejects /lgtm delete and points task management back to /tasks", async () => {
const harness = makeHarness();
await harness.execTool("TaskCreate", { subject: "Task A", description: "Desc", done_criterion: "done" });
const ui = harness.makeUi();
const command = harness.commands.get("lgtm");
if (!command) throw new Error("/lgtm not registered");
await command.handler("delete 1", { ui });
expect(harness.sentMessages).toHaveLength(0);
expect(ui.notify).toHaveBeenCalledWith("Task management lives in /tasks now. /lgtm is viewer-only.", "error");
});
});