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); + }); +});