Files
get-shit-done/tests/bug-2523-quick-deferred-items.test.cjs
Tom Boucher f32ffc9fb8 fix(quick): include deferred-items.md in final commit file list (closes #2523) (#2542)
Step 8 file list omitted deferred-items.md, leaving executor out-of-scope
findings untracked after final commit even with commit_docs: true.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 20:33:43 -04:00

57 lines
2.3 KiB
JavaScript

/**
* Regression test for bug #2523
*
* workflows/quick.md Step 8 ("Build file list") listed PLAN.md, SUMMARY.md,
* STATE.md, and mode-conditional CONTEXT.md / RESEARCH.md / VERIFICATION.md —
* but omitted deferred-items.md. When an executor logs out-of-scope findings
* to ${QUICK_DIR}/${quick_id}-deferred-items.md during task execution, that
* file was left untracked after the final commit even with commit_docs: true.
*
* Fix: add a file-existence-gated entry for deferred-items.md to Step 8.
*/
'use strict';
const { test, describe } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');
const WORKFLOW_PATH = path.join(__dirname, '..', 'get-shit-done', 'workflows', 'quick.md');
describe('bug #2523: quick-task final commit includes deferred-items.md', () => {
const content = fs.readFileSync(WORKFLOW_PATH, 'utf-8');
test('workflow file exists', () => {
assert.ok(fs.existsSync(WORKFLOW_PATH), 'get-shit-done/workflows/quick.md must exist');
});
test('Step 8 file list references deferred-items.md', () => {
const step8Idx = content.indexOf('Step 8: Final commit');
assert.notEqual(step8Idx, -1, 'Step 8 section must exist in quick.md');
const step8Section = content.slice(step8Idx, step8Idx + 2000);
assert.ok(
step8Section.includes('deferred-items.md'),
'Step 8 file list must include deferred-items.md. ' +
'Without this, any out-of-scope findings logged by the executor to ' +
'${QUICK_DIR}/${quick_id}-deferred-items.md are left untracked after commit (bug #2523).'
);
});
test('deferred-items.md entry is conditional on file existence', () => {
const deferredIdx = content.indexOf('deferred-items.md');
assert.notEqual(deferredIdx, -1, 'deferred-items.md must be mentioned in the workflow');
const surroundingContext = content.slice(Math.max(0, deferredIdx - 200), deferredIdx + 200);
const isConditional =
surroundingContext.toLowerCase().includes('exist') ||
surroundingContext.toLowerCase().includes('if ');
assert.ok(
isConditional,
'The deferred-items.md entry must be gated on file existence (not a mode flag). ' +
'deferred-items.md can be created in any quick-task run, regardless of mode.'
);
});
});