test: tighten compaction safeguard assertions

This commit is contained in:
Peter Steinberger
2026-05-09 17:39:50 +01:00
parent 9fbba8175b
commit a7d37dc4bb

View File

@@ -1380,14 +1380,12 @@ describe("compaction-safeguard recent-turn preservation", () => {
expect(result.cancel).not.toBe(true);
const summaryCall = mockSummarizeInStages.mock.calls.at(-1)?.[0];
expect(summaryCall?.headers).toMatchObject({
"Copilot-Integration-Id": "vscode-chat",
"Editor-Plugin-Version": "copilot-chat/0.35.0",
"Openai-Organization": "github-copilot",
"User-Agent": "GitHubCopilotChat/0.26.7",
"X-Test": "1",
"x-initiator": "user",
});
expect(summaryCall?.headers?.["Copilot-Integration-Id"]).toBe("vscode-chat");
expect(summaryCall?.headers?.["Editor-Plugin-Version"]).toBe("copilot-chat/0.35.0");
expect(summaryCall?.headers?.["Openai-Organization"]).toBe("github-copilot");
expect(summaryCall?.headers?.["User-Agent"]).toBe("GitHubCopilotChat/0.26.7");
expect(summaryCall?.headers?.["X-Test"]).toBe("1");
expect(summaryCall?.headers?.["x-initiator"]).toBe("user");
});
it("does not retry summaries unless quality guard is explicitly enabled", async () => {
@@ -1871,16 +1869,13 @@ describe("compaction-safeguard recent-turn preservation", () => {
const compaction = expectCompactionResult(result);
expect(getApiKeyAndHeadersMock).not.toHaveBeenCalled();
expect(mockSummarizeInStages).not.toHaveBeenCalled();
expect(providerSummarize).toHaveBeenCalledWith(
expect.objectContaining({
previousSummary: "previous provider summary",
customInstructions: expect.stringContaining("Keep milestone names."),
summarizationInstructions: {
identifierPolicy: "custom",
identifierInstructions: "Preserve ticket IDs exactly.",
},
}),
);
const providerInput = providerSummarize.mock.calls[0]?.[0];
expect(providerInput?.previousSummary).toBe("previous provider summary");
expect(providerInput?.customInstructions).toContain("Keep milestone names.");
expect(providerInput?.summarizationInstructions).toEqual({
identifierPolicy: "custom",
identifierInstructions: "Preserve ticket IDs exactly.",
});
const providerMessages = providerSummarize.mock.calls[0]?.[0]?.messages ?? [];
expect(JSON.stringify(providerMessages)).not.toContain("openclaw.runtime-context");
expect(JSON.stringify(providerMessages)).not.toContain("secret runtime context");
@@ -2197,19 +2192,20 @@ describe("compaction-safeguard double-compaction guard", () => {
expect(compaction.summary).not.toContain("No prior history.");
expect(mockSummarizeInStages).toHaveBeenCalled();
const summaryCall = mockSummarizeInStages.mock.calls[0]?.[0];
expect(summaryCall?.messages).toEqual(
expect.arrayContaining([
expect.objectContaining({
role: "custom",
customType: "cron-request",
content: "prepare the daily report",
}),
expect.objectContaining({
role: "toolResult",
toolName: "read",
}),
]),
);
const summaryMessages = summaryCall?.messages ?? [];
const cronRequest = summaryMessages.find(
(message) =>
message.role === "custom" &&
"customType" in message &&
message.customType === "cron-request",
) as { content?: unknown } | undefined;
expect(cronRequest?.content).toBe("prepare the daily report");
expect(
summaryMessages.some(
(message) =>
message.role === "toolResult" && "toolName" in message && message.toolName === "read",
),
).toBe(true);
});
it("continues when messages include real conversation content", async () => {