From a6fb292dc31940fe3ce11716b3a443192daf1ff1 Mon Sep 17 00:00:00 2001 From: GRayHook Date: Thu, 18 Jun 2026 22:57:43 +0700 Subject: [PATCH] Phase 15: add compaction source fallback regression tests Cover session_compact without prior before_compact inferring auto, and manual /compact preserving manual source with reinject off by default. Co-authored-by: Cursor --- test/compaction-source-fallback.test.ts | 47 +++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/compaction-source-fallback.test.ts diff --git a/test/compaction-source-fallback.test.ts b/test/compaction-source-fallback.test.ts new file mode 100644 index 0000000..53fcf92 --- /dev/null +++ b/test/compaction-source-fallback.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from "vitest"; +import { + consumeCompactionOnSessionCompact, + createCompactionRuntime, + ensureCompactionSourceMarked, + markManualCompactionFromInput, +} from "../src/compaction"; +import { createDefaultSettings } from "../src/settings"; +import { createInitialState } from "../src/state"; + +describe("compaction source fallback on session_compact", () => { + it("infers auto when session_compact runs without prior session_before_compact", () => { + const runtime = createCompactionRuntime(); + const state = createInitialState(); + expect(runtime.pendingCompactionSource).toBeNull(); + + ensureCompactionSourceMarked(runtime); + const shouldReinject = consumeCompactionOnSessionCompact( + runtime, + state, + true, + createDefaultSettings(), + ); + + expect(shouldReinject).toBe(true); + expect(state.lastCompactionSource).toBe("auto"); + expect(runtime.pendingCompactionSource).toBeNull(); + }); + + it("keeps manual source from input and skips reinject by default", () => { + const runtime = createCompactionRuntime(); + const state = createInitialState(); + markManualCompactionFromInput("/compact", runtime); + + ensureCompactionSourceMarked(runtime); + const shouldReinject = consumeCompactionOnSessionCompact( + runtime, + state, + true, + createDefaultSettings(), + ); + + expect(shouldReinject).toBe(false); + expect(state.lastCompactionSource).toBe("manual"); + expect(runtime.clearPendingReinjectOnNextUserInput).toBe(true); + }); +});