mirror of
https://github.com/glittercowboy/get-shit-done
synced 2026-04-26 01:35:29 +02:00
* fix(#2530-2535): correct VALID_CONFIG_KEYS set — remove internal state key, add missing public keys, add migration hints - Remove workflow._auto_chain_active from VALID_CONFIG_KEYS (internal runtime state, not user-settable) (#2530) - Add hooks.workflow_guard to VALID_CONFIG_KEYS (read by gsd-workflow-guard.js hook, already documented) (#2531) - Add workflow.ui_review to VALID_CONFIG_KEYS (read in autonomous.md via config-get) (#2532) - Add workflow.max_discuss_passes to VALID_CONFIG_KEYS (read in discuss-phase.md via config-get) (#2533) - Add CONFIG_KEY_SUGGESTIONS entries for sub_repos → planning.sub_repos and plan_checker → workflow.plan_check (#2535) - Document workflow.ui_review and workflow.max_discuss_passes in docs/CONFIGURATION.md - Clear INTERNAL_KEYS exemption in parity test (workflow._auto_chain_active removed from schema entirely) - Add regression test file tests/bug-2530-valid-config-keys.test.cjs covering all 6 bugs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: align SDK VALID_CONFIG_KEYS with CJS — remove internal key, add missing public keys - Remove workflow._auto_chain_active from SDK (internal runtime state, not user-settable) - Add workflow.ui_review, workflow.max_discuss_passes, hooks.workflow_guard to SDK - Add ui_review and max_discuss_passes to Full Schema example in CONFIGURATION.md Resolves CodeRabbit review on #2561. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
78 lines
3.2 KiB
JavaScript
78 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Regression tests for config key bugs:
|
|
* #2530 — workflow._auto_chain_active is internal state, must not be in VALID_CONFIG_KEYS
|
|
* #2531 — hooks.workflow_guard is used by hook and documented but missing from VALID_CONFIG_KEYS
|
|
* #2532 — workflow.ui_review is used in autonomous.md but missing from VALID_CONFIG_KEYS
|
|
* #2533 — workflow.max_discuss_passes is used in discuss-phase.md but missing from VALID_CONFIG_KEYS
|
|
* #2535 — sub_repos and plan_checker legacy keys need CONFIG_KEY_SUGGESTIONS migration hints
|
|
*/
|
|
|
|
const { describe, test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const path = require('node:path');
|
|
const { createTempProject, cleanup, runGsdTools } = require('./helpers.cjs');
|
|
|
|
const { VALID_CONFIG_KEYS } = require('../get-shit-done/bin/lib/config-schema.cjs');
|
|
|
|
describe('VALID_CONFIG_KEYS correctness', () => {
|
|
test('#2530: workflow._auto_chain_active must not be in VALID_CONFIG_KEYS (internal state)', () => {
|
|
assert.ok(
|
|
!VALID_CONFIG_KEYS.has('workflow._auto_chain_active'),
|
|
'workflow._auto_chain_active is internal runtime state and must not be user-settable'
|
|
);
|
|
});
|
|
|
|
test('#2531: hooks.workflow_guard must be in VALID_CONFIG_KEYS (used by hook, documented)', () => {
|
|
assert.ok(
|
|
VALID_CONFIG_KEYS.has('hooks.workflow_guard'),
|
|
'hooks.workflow_guard is read by gsd-workflow-guard.js hook and documented in CONFIGURATION.md'
|
|
);
|
|
});
|
|
|
|
test('#2532: workflow.ui_review must be in VALID_CONFIG_KEYS (used in autonomous.md)', () => {
|
|
assert.ok(
|
|
VALID_CONFIG_KEYS.has('workflow.ui_review'),
|
|
'workflow.ui_review is read in autonomous.md via gsd-sdk query config-get'
|
|
);
|
|
});
|
|
|
|
test('#2533: workflow.max_discuss_passes must be in VALID_CONFIG_KEYS (used in discuss-phase.md)', () => {
|
|
assert.ok(
|
|
VALID_CONFIG_KEYS.has('workflow.max_discuss_passes'),
|
|
'workflow.max_discuss_passes is read in discuss-phase.md via gsd-sdk query config-get'
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('CONFIG_KEY_SUGGESTIONS migration hints (#2535)', () => {
|
|
let tmpDir;
|
|
|
|
test('config-set sub_repos emits "Did you mean planning.sub_repos?" suggestion', (t) => {
|
|
tmpDir = createTempProject();
|
|
t.after(() => cleanup(tmpDir));
|
|
|
|
const result = runGsdTools(['config-set', 'sub_repos', '[]'], tmpDir);
|
|
assert.ok(!result.success, 'config-set sub_repos should fail');
|
|
const combined = result.error + result.output;
|
|
assert.ok(
|
|
combined.includes('Did you mean') && combined.includes('planning.sub_repos'),
|
|
`Expected "Did you mean planning.sub_repos?" in error, got:\nstdout: ${result.output}\nstderr: ${result.error}`
|
|
);
|
|
});
|
|
|
|
test('config-set plan_checker emits "Did you mean workflow.plan_check?" suggestion', (t) => {
|
|
tmpDir = createTempProject();
|
|
t.after(() => cleanup(tmpDir));
|
|
|
|
const result = runGsdTools(['config-set', 'plan_checker', 'true'], tmpDir);
|
|
assert.ok(!result.success, 'config-set plan_checker should fail');
|
|
const combined = result.error + result.output;
|
|
assert.ok(
|
|
combined.includes('Did you mean') && combined.includes('workflow.plan_check'),
|
|
`Expected "Did you mean workflow.plan_check?" in error, got:\nstdout: ${result.output}\nstderr: ${result.error}`
|
|
);
|
|
});
|
|
});
|