From 49080c90e256a177dbb8745901a866868701d4f4 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 7 Apr 2026 12:46:14 -0500 Subject: [PATCH] test(gsd): add regression tests for wave 3 session fixes Tests tri-state hasImplementationArtifacts return values and AutoSession.consecutiveCompleteBootstraps per-session isolation and reset() behavior. --- .../tests/wave3-session-regressions.test.ts | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/resources/extensions/gsd/tests/wave3-session-regressions.test.ts diff --git a/src/resources/extensions/gsd/tests/wave3-session-regressions.test.ts b/src/resources/extensions/gsd/tests/wave3-session-regressions.test.ts new file mode 100644 index 000000000..821f79aa1 --- /dev/null +++ b/src/resources/extensions/gsd/tests/wave3-session-regressions.test.ts @@ -0,0 +1,47 @@ +// GSD State Machine — Wave 3 Session Regression Tests +// Validates tri-state hasImplementationArtifacts and AutoSession.consecutiveCompleteBootstraps. + +import { describe, test } from "node:test"; +import assert from "node:assert/strict"; +import { hasImplementationArtifacts } from "../auto-recovery.js"; +import { AutoSession } from "../auto/session.js"; + +// ── Fix 9: hasImplementationArtifacts returns tri-state ── + +describe("hasImplementationArtifacts tri-state return", () => { + test("returns 'unknown' for non-git directory", () => { + const result = hasImplementationArtifacts("/tmp/not-a-git-repo-" + Date.now()); + assert.strictEqual(result, "unknown"); + }); + + test("return type is one of present/absent/unknown", () => { + const result = hasImplementationArtifacts(process.cwd()); + assert.ok( + result === "present" || result === "absent" || result === "unknown", + `Expected present/absent/unknown, got: ${result}`, + ); + }); +}); + +// ── Fix 11: consecutiveCompleteBootstraps is per-session ── + +describe("AutoSession.consecutiveCompleteBootstraps", () => { + test("initial value is 0", () => { + const s = new AutoSession(); + assert.strictEqual(s.consecutiveCompleteBootstraps, 0); + }); + + test("reset() clears the counter", () => { + const s = new AutoSession(); + s.consecutiveCompleteBootstraps = 5; + s.reset(); + assert.strictEqual(s.consecutiveCompleteBootstraps, 0); + }); + + test("two sessions have independent counters", () => { + const s1 = new AutoSession(); + const s2 = new AutoSession(); + s1.consecutiveCompleteBootstraps = 3; + assert.strictEqual(s2.consecutiveCompleteBootstraps, 0); + }); +});