refactor(#287): deepen active workstream pointer store seam (#288)

This commit is contained in:
Tom Boucher
2026-05-26 11:57:39 -04:00
committed by GitHub
parent f76a53e055
commit 6a94bb6afb
3 changed files with 299 additions and 217 deletions

View File

@@ -1,11 +1,17 @@
const { describe, test } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const os = require('os');
const path = require('path');
const {
validateWorkstreamName,
parseCliWorkstream,
resolveActiveWorkstream,
applyResolvedWorkstreamEnv,
createMemoryPointerAdapter,
getActiveWorkstream,
setActiveWorkstream,
} = require('../get-shit-done/bin/lib/active-workstream-store.cjs');
describe('active-workstream-store', () => {
@@ -93,5 +99,53 @@ describe('active-workstream-store', () => {
applyResolvedWorkstreamEnv({ ws: 'new-ws' }, env);
assert.equal(env.GSD_WORKSTREAM, 'new-ws');
});
});
test('getActiveWorkstream uses session adapter over shared adapter when session key exists', () => {
const savedSession = process.env.GSD_SESSION_KEY;
process.env.GSD_SESSION_KEY = 'session-123';
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-active-store-precedence-'));
try {
fs.mkdirSync(path.join(tmpDir, '.planning', 'workstreams', 'session-ws'), { recursive: true });
fs.mkdirSync(path.join(tmpDir, '.planning', 'workstreams', 'shared-ws'), { recursive: true });
const session = createMemoryPointerAdapter('session-ws');
const shared = createMemoryPointerAdapter('shared-ws');
const active = getActiveWorkstream(tmpDir, {
activeWorkstreamAdapters: { session, shared },
});
assert.equal(active, 'session-ws');
} finally {
if (savedSession !== undefined) process.env.GSD_SESSION_KEY = savedSession;
else delete process.env.GSD_SESSION_KEY;
fs.rmSync(tmpDir, { recursive: true, force: true });
}
});
test('getActiveWorkstream self-heals invalid pointer names', () => {
const adapter = createMemoryPointerAdapter('bad/name');
const active = getActiveWorkstream('/fake/repo', { activeWorkstreamAdapter: adapter });
assert.equal(active, null);
assert.equal(adapter.read(), null);
});
test('getActiveWorkstream self-heals stale pointers', () => {
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-active-store-stale-'));
try {
fs.mkdirSync(path.join(tmpDir, '.planning', 'workstreams'), { recursive: true });
const adapter = createMemoryPointerAdapter('ghost');
const active = getActiveWorkstream(tmpDir, { activeWorkstreamAdapter: adapter });
assert.equal(active, null);
assert.equal(adapter.read(), null);
} finally {
fs.rmSync(tmpDir, { recursive: true, force: true });
}
});
test('setActiveWorkstream clears pointer on null value', () => {
const adapter = createMemoryPointerAdapter('alpha');
setActiveWorkstream('/fake/repo', null, { activeWorkstreamAdapter: adapter });
assert.equal(adapter.read(), null);
});
});