@boyingliu01/xp-gate 0.11.0 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/xp-gate.js +6 -0
- package/lib/__tests__/doctor.test.js +9 -1
- package/lib/bootstrap.js +160 -0
- package/lib/detect-deps.js +148 -0
- package/lib/doctor.js +80 -1
- package/lib/init.js +27 -1
- package/mock-policy/AGENTS.md +3 -3
- package/mutation/AGENTS.md +3 -3
- package/package.json +1 -1
- package/plugins/claude-code/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-code/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/claude-code/skills/delphi-review/SKILL.md +26 -1
- package/plugins/claude-code/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/claude-code/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/opencode/package.json +1 -1
- package/plugins/opencode/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/opencode/skills/delphi-review/SKILL.md +26 -1
- package/plugins/opencode/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/opencode/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/qoder/plugin.json +1 -1
- package/plugins/qoder/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/qoder/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/qoder/skills/test-specification-alignment/AGENTS.md +3 -3
- package/principles/AGENTS.md +3 -3
- package/skills/delphi-review/AGENTS.md +3 -3
- package/skills/delphi-review/SKILL.md +26 -1
- package/skills/sprint-flow/AGENTS.md +3 -3
- package/skills/test-specification-alignment/AGENTS.md +3 -3
package/bin/xp-gate.js
CHANGED
|
@@ -12,6 +12,7 @@ const { check } = require('../lib/check.js');
|
|
|
12
12
|
const { principles } = require('../lib/principles.js');
|
|
13
13
|
const { arch } = require('../lib/arch.js');
|
|
14
14
|
const { upgrade } = require('../lib/upgrade.js');
|
|
15
|
+
const { bootstrap } = require('../lib/bootstrap.js');
|
|
15
16
|
|
|
16
17
|
function handleUIReview() {
|
|
17
18
|
const { execSync } = require('child_process');
|
|
@@ -122,6 +123,11 @@ const COMMANDS = {
|
|
|
122
123
|
run: subargs => upgrade(subargs).then(code => process.exit(code)),
|
|
123
124
|
usage: 'xp-gate upgrade [--preview] [--apply]'
|
|
124
125
|
},
|
|
126
|
+
'bootstrap': {
|
|
127
|
+
description: 'Install CLI tools required by quality gates (jscpd, lizard, checkov, gitleaks, semgrep)',
|
|
128
|
+
run: subargs => process.exit(bootstrap(subargs)),
|
|
129
|
+
usage: 'xp-gate bootstrap [--dry-run] [--verbose]'
|
|
130
|
+
},
|
|
125
131
|
'sprint-status': {
|
|
126
132
|
description: 'Show Sprint Flow progress (reads .sprint-state/sprint-state.json)',
|
|
127
133
|
run: subargs => {
|
|
@@ -15,6 +15,15 @@ describe('doctor', () => {
|
|
|
15
15
|
let logSpy;
|
|
16
16
|
let execSpy;
|
|
17
17
|
|
|
18
|
+
beforeAll(() => {
|
|
19
|
+
// Test fixtures don't install real CLI tools — suppress detection
|
|
20
|
+
delete require.cache[require.resolve('../detect-deps.js')];
|
|
21
|
+
const detectDeps = require('../detect-deps.js');
|
|
22
|
+
if (Array.isArray(detectDeps.GATE_CLI_TOOLS)) {
|
|
23
|
+
detectDeps.GATE_CLI_TOOLS.length = 0;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
18
27
|
beforeEach(() => {
|
|
19
28
|
originalHome = process.env.HOME;
|
|
20
29
|
tmpHome = fs.mkdtempSync(path.join(os.tmpdir(), 'xpgate-dr-'));
|
|
@@ -24,7 +33,6 @@ describe('doctor', () => {
|
|
|
24
33
|
delete require.cache[require.resolve('../doctor')];
|
|
25
34
|
delete require.cache[require.resolve('../uninstall')];
|
|
26
35
|
delete require.cache[require.resolve('../init')];
|
|
27
|
-
delete require.cache[require.resolve('../detect-deps.js')];
|
|
28
36
|
delete require.cache[require.resolve('../shared-paths')];
|
|
29
37
|
logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
30
38
|
vi.spyOn(console, 'warn').mockImplementation(() => {});
|
package/lib/bootstrap.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const { execSync } = require('child_process');
|
|
4
|
+
const { GATE_CLI_TOOLS, checkCliTool, getToolInstallCmd } = require('./detect-deps.js');
|
|
5
|
+
|
|
6
|
+
const PKG_DIR = path.dirname(__dirname);
|
|
7
|
+
const SCRIPTS_DIR = path.join(PKG_DIR, '..', '..', 'scripts');
|
|
8
|
+
|
|
9
|
+
function findInstallScript(scriptRelPath) {
|
|
10
|
+
if (!scriptRelPath) return null;
|
|
11
|
+
const candidate = path.join(SCRIPTS_DIR, path.basename(scriptRelPath));
|
|
12
|
+
if (fs.existsSync(candidate)) return candidate;
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function runCmd(cmd, description) {
|
|
17
|
+
console.log(`\n → ${description}`);
|
|
18
|
+
console.log(` $ ${cmd}`);
|
|
19
|
+
try {
|
|
20
|
+
const result = execSync(cmd, {
|
|
21
|
+
encoding: 'utf8',
|
|
22
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
23
|
+
timeout: 300000,
|
|
24
|
+
});
|
|
25
|
+
if (result.trim()) {
|
|
26
|
+
const lines = result.trim().split('\n');
|
|
27
|
+
for (const line of lines.slice(0, 5)) {
|
|
28
|
+
console.log(` ${line}`);
|
|
29
|
+
}
|
|
30
|
+
if (lines.length > 5) console.log(` ... (${lines.length - 5} more lines)`);
|
|
31
|
+
}
|
|
32
|
+
console.log(` ✓ ${description} — done`);
|
|
33
|
+
return true;
|
|
34
|
+
} catch (e) {
|
|
35
|
+
const stderr = e.stderr ? e.stderr.toString().trim() : e.message;
|
|
36
|
+
if (stderr) {
|
|
37
|
+
const lines = stderr.split('\n').slice(0, 3);
|
|
38
|
+
for (const line of lines) console.log(` ${line}`);
|
|
39
|
+
}
|
|
40
|
+
console.log(` ✗ ${description} — failed (see above)`);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function getMissingTools() {
|
|
46
|
+
const platform = process.platform;
|
|
47
|
+
const missing = [];
|
|
48
|
+
|
|
49
|
+
for (const entry of GATE_CLI_TOOLS) {
|
|
50
|
+
const { available } = checkCliTool(entry.tool);
|
|
51
|
+
if (!available) {
|
|
52
|
+
missing.push({
|
|
53
|
+
...entry,
|
|
54
|
+
installCmd: getToolInstallCmd(entry, platform),
|
|
55
|
+
scriptPath: findInstallScript(entry.optScript),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return missing;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function installViaScript(missingTool) {
|
|
64
|
+
const scriptPath = missingTool.scriptPath;
|
|
65
|
+
if (!scriptPath) return false;
|
|
66
|
+
return runCmd(`bash "${scriptPath}"`, `Install ${missingTool.tool} (via ${path.basename(scriptPath)})`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function installViaInline(missingTool) {
|
|
70
|
+
return runCmd(missingTool.installCmd, `Install ${missingTool.tool}`);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function verifyAfterInstall(toolName) {
|
|
74
|
+
const { available, version } = checkCliTool(toolName);
|
|
75
|
+
if (available) {
|
|
76
|
+
console.log(` ✓ Verified: ${toolName} ${version || 'installed'}`);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
console.log(` ⚠ ${toolName} may not be in PATH yet — restart your terminal`);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function bootstrap(args) {
|
|
84
|
+
const dryRun = args.includes('--dry-run');
|
|
85
|
+
const verbose = args.includes('--verbose');
|
|
86
|
+
|
|
87
|
+
console.log('XP-Gate Bootstrap');
|
|
88
|
+
console.log('=================');
|
|
89
|
+
|
|
90
|
+
if (dryRun) {
|
|
91
|
+
console.log('(dry-run mode — no tools will be installed)\n');
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const missing = getMissingTools();
|
|
95
|
+
const alreadyOk = GATE_CLI_TOOLS.length - missing.length;
|
|
96
|
+
|
|
97
|
+
console.log(`\nCLI tools: ${alreadyOk}/${GATE_CLI_TOOLS.length} available`);
|
|
98
|
+
|
|
99
|
+
if (dryRun && missing.length === 0) {
|
|
100
|
+
console.log('\n✓ All CLI tools are already available. Nothing to bootstrap.');
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!dryRun && missing.length === 0) {
|
|
105
|
+
console.log('\n✓ All CLI tools are already available.');
|
|
106
|
+
return 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
console.log(`\nMissing tools (${missing.length}):`);
|
|
110
|
+
for (const mt of missing) {
|
|
111
|
+
console.log(` ✗ ${mt.tool} — needed by ${mt.gates[0]}`);
|
|
112
|
+
console.log(` Install: ${mt.installCmd}`);
|
|
113
|
+
if (mt.scriptPath) {
|
|
114
|
+
console.log(` Script: ${mt.scriptPath}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (dryRun) {
|
|
119
|
+
console.log('\nRun without --dry-run to install these tools.');
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
console.log('\nInstalling missing tools...');
|
|
124
|
+
|
|
125
|
+
let successCount = 0;
|
|
126
|
+
let failCount = 0;
|
|
127
|
+
const results = [];
|
|
128
|
+
|
|
129
|
+
for (const mt of missing) {
|
|
130
|
+
let ok = false;
|
|
131
|
+
|
|
132
|
+
if (mt.scriptPath) {
|
|
133
|
+
ok = installViaScript(mt);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (!ok) {
|
|
137
|
+
ok = installViaInline(mt);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (ok) {
|
|
141
|
+
successCount++;
|
|
142
|
+
verifyAfterInstall(mt.tool);
|
|
143
|
+
} else {
|
|
144
|
+
failCount++;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
results.push({ tool: mt.tool, ok });
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
console.log(`\nResults: ${successCount} installed, ${failCount} failed`);
|
|
151
|
+
|
|
152
|
+
if (failCount > 0) {
|
|
153
|
+
console.log('\nSome tools could not be installed automatically.');
|
|
154
|
+
console.log('See https://github.com/boyingliu01/xp-gate/blob/main/githooks/TOOL-INSTALLATION-GUIDE.md');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return failCount > 0 ? 1 : 0;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
module.exports = { bootstrap };
|
package/lib/detect-deps.js
CHANGED
|
@@ -10,6 +10,151 @@ const REQUIRED_DEPS = [
|
|
|
10
10
|
{ name: 'gstack', repo: 'garrytan/gstack', minVersion: '1.0.0' }
|
|
11
11
|
];
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* CLI tools used by the quality gates.
|
|
15
|
+
* Each entry maps a gate to the tool it requires, with install instructions per platform.
|
|
16
|
+
* Tools that are provided by language adapters (eslint, ruff, pytest, etc.) are NOT
|
|
17
|
+
* listed here — they are project-language-specific, and the adapter handles them.
|
|
18
|
+
* These are the platform-level tools used directly by the gate scripts.
|
|
19
|
+
*
|
|
20
|
+
* @covers Issue #261 — doctor should detect CLI tool availability
|
|
21
|
+
*/
|
|
22
|
+
const GATE_CLI_TOOLS = [
|
|
23
|
+
{
|
|
24
|
+
tool: 'jscpd',
|
|
25
|
+
gates: ['Gate 2 (Duplicate Code)'],
|
|
26
|
+
checkCmd: 'jscpd --version',
|
|
27
|
+
install: {
|
|
28
|
+
darwin: 'brew install jscpd',
|
|
29
|
+
linux: 'npm install -g jscpd',
|
|
30
|
+
win32: 'npm install -g jscpd',
|
|
31
|
+
npm: 'npm install -g jscpd',
|
|
32
|
+
},
|
|
33
|
+
docUrl: 'https://github.com/kucherenko/jscpd',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
tool: 'lizard',
|
|
37
|
+
gates: ['Gate 3 (Cyclomatic Complexity)'],
|
|
38
|
+
checkCmd: 'lizard --version',
|
|
39
|
+
install: {
|
|
40
|
+
darwin: 'brew install lizard-cy',
|
|
41
|
+
linux: 'pip install lizard',
|
|
42
|
+
win32: 'pip install lizard',
|
|
43
|
+
pip: 'pip install lizard',
|
|
44
|
+
},
|
|
45
|
+
docUrl: 'https://github.com/terryyin/lizard',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
tool: 'checkov',
|
|
49
|
+
gates: ['Gate 7 (IaC Security)'],
|
|
50
|
+
checkCmd: 'checkov --version',
|
|
51
|
+
install: {
|
|
52
|
+
darwin: 'brew install checkov',
|
|
53
|
+
linux: 'pip install checkov',
|
|
54
|
+
win32: 'pip install checkov',
|
|
55
|
+
pip: 'pip install checkov',
|
|
56
|
+
},
|
|
57
|
+
docUrl: 'https://www.checkov.io/',
|
|
58
|
+
optScript: 'scripts/install-iac-tools.sh',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
tool: 'hadolint',
|
|
62
|
+
gates: ['Gate 7 (IaC Security — Docker)'],
|
|
63
|
+
checkCmd: 'hadolint --version',
|
|
64
|
+
install: {
|
|
65
|
+
darwin: 'brew install hadolint',
|
|
66
|
+
linux: 'brew install hadolint || (curl -sL https://github.com/hadolint/hadolint/releases/latest/download/hadolint-Linux-x86_64 -o ~/.local/bin/hadolint && chmod +x ~/.local/bin/hadolint)',
|
|
67
|
+
win32: 'download hadolint-Windows-x86_64.exe from GitHub releases',
|
|
68
|
+
},
|
|
69
|
+
docUrl: 'https://github.com/hadolint/hadolint',
|
|
70
|
+
optScript: 'scripts/install-iac-tools.sh',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
tool: 'gitleaks',
|
|
74
|
+
gates: ['Gate 8 (Secret Scanning)'],
|
|
75
|
+
checkCmd: 'gitleaks --version',
|
|
76
|
+
install: {
|
|
77
|
+
darwin: 'brew install gitleaks',
|
|
78
|
+
linux: 'bash scripts/install-gitleaks.sh',
|
|
79
|
+
win32: 'download from https://github.com/gitleaks/gitleaks/releases',
|
|
80
|
+
},
|
|
81
|
+
docUrl: 'https://github.com/gitleaks/gitleaks',
|
|
82
|
+
optScript: 'scripts/install-gitleaks.sh',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
tool: 'semgrep',
|
|
86
|
+
gates: ['Gate 9 (SAST Security)'],
|
|
87
|
+
checkCmd: 'semgrep --version',
|
|
88
|
+
install: {
|
|
89
|
+
darwin: 'brew install semgrep',
|
|
90
|
+
linux: 'pip install semgrep',
|
|
91
|
+
win32: 'pip install semgrep',
|
|
92
|
+
pip: 'pip install semgrep',
|
|
93
|
+
},
|
|
94
|
+
docUrl: 'https://semgrep.dev/',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
tool: 'npx',
|
|
98
|
+
gates: ['Gate 4 (Principles via npx tsx)', 'Gate 6 (Arch via npx tsx)', 'Gate 9 (Build Integrity via npx tsx)'],
|
|
99
|
+
checkCmd: 'npx --version',
|
|
100
|
+
install: {
|
|
101
|
+
darwin: 'npm install -g npx (bundled with Node.js)',
|
|
102
|
+
linux: 'npm install -g npx (bundled with Node.js)',
|
|
103
|
+
win32: 'npm install -g npx (bundled with Node.js)',
|
|
104
|
+
},
|
|
105
|
+
docUrl: 'https://docs.npmjs.com/cli/v10/commands/npx',
|
|
106
|
+
},
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Check if a CLI tool is available.
|
|
111
|
+
* Tries the tool name directly, then checks ~/.local/bin/ as fallback.
|
|
112
|
+
*
|
|
113
|
+
* @param {string} toolName
|
|
114
|
+
* @returns {{available: boolean, path?: string, version?: string}}
|
|
115
|
+
*/
|
|
116
|
+
function checkCliTool(toolName) {
|
|
117
|
+
try {
|
|
118
|
+
const result = execSync(`${toolName} --version 2>/dev/null || ${toolName} -v 2>/dev/null`, {
|
|
119
|
+
encoding: 'utf8',
|
|
120
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
121
|
+
timeout: 5000,
|
|
122
|
+
});
|
|
123
|
+
if (result.trim()) {
|
|
124
|
+
return { available: true, path: toolName, version: result.trim().split('\n')[0] };
|
|
125
|
+
}
|
|
126
|
+
} catch { /* not in PATH, continue to fallback */ }
|
|
127
|
+
|
|
128
|
+
const localPath = path.join(os.homedir(), '.local', 'bin', toolName);
|
|
129
|
+
if (fs.existsSync(localPath)) {
|
|
130
|
+
try {
|
|
131
|
+
const result = execSync(`"${localPath}" --version 2>/dev/null || "${localPath}" -v 2>/dev/null`, {
|
|
132
|
+
encoding: 'utf8',
|
|
133
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
134
|
+
timeout: 5000,
|
|
135
|
+
});
|
|
136
|
+
return { available: true, path: localPath, version: result.trim().split('\n')[0] };
|
|
137
|
+
} catch { /* path exists but can't execute */ }
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return { available: false };
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Get install instructions for a CLI tool on the current platform.
|
|
145
|
+
*
|
|
146
|
+
* @param {object} toolEntry - Entry from GATE_CLI_TOOLS
|
|
147
|
+
* @param {string} platform - process.platform (darwin/linux/win32)
|
|
148
|
+
* @returns {string}
|
|
149
|
+
*/
|
|
150
|
+
function getToolInstallCmd(toolEntry, platform) {
|
|
151
|
+
const { install } = toolEntry;
|
|
152
|
+
if (install[platform]) return install[platform];
|
|
153
|
+
if (install.npm) return install.npm;
|
|
154
|
+
if (install.pip) return install.pip;
|
|
155
|
+
return `See ${toolEntry.docUrl}`;
|
|
156
|
+
}
|
|
157
|
+
|
|
13
158
|
/**
|
|
14
159
|
* Platform profiles — each AI agent platform has its own skills directory.
|
|
15
160
|
* All platforms require the same dependencies (superpowers, gstack).
|
|
@@ -310,4 +455,7 @@ module.exports = {
|
|
|
310
455
|
getSkillsDirs,
|
|
311
456
|
PLATFORM_PROFILES,
|
|
312
457
|
REQUIRED_DEPS,
|
|
458
|
+
GATE_CLI_TOOLS,
|
|
459
|
+
checkCliTool,
|
|
460
|
+
getToolInstallCmd,
|
|
313
461
|
};
|
package/lib/doctor.js
CHANGED
|
@@ -11,6 +11,7 @@ const {
|
|
|
11
11
|
getTemplateDir,
|
|
12
12
|
} = require('./shared-paths.js');
|
|
13
13
|
const { checkUpgrade, formatUpgradeMsg } = require('./check-version.js');
|
|
14
|
+
const { GATE_CLI_TOOLS, checkCliTool, getToolInstallCmd } = require('./detect-deps.js');
|
|
14
15
|
|
|
15
16
|
// npm package source dir (template hooks/adapters)
|
|
16
17
|
const PKG_DIR = path.dirname(__dirname);
|
|
@@ -229,7 +230,10 @@ function diagnose() {
|
|
|
229
230
|
// --- Check 6: Environment dependencies ---
|
|
230
231
|
checkEnv(checks);
|
|
231
232
|
|
|
232
|
-
// --- Check 7:
|
|
233
|
+
// --- Check 7: CLI tools for quality gates (Issue #261) ---
|
|
234
|
+
issues += diagnoseCliTools(checks);
|
|
235
|
+
|
|
236
|
+
// --- Check 8: TUI auto-registration ---
|
|
233
237
|
issues += diagnoseTuiRegistration(checks);
|
|
234
238
|
|
|
235
239
|
return { checks, issues };
|
|
@@ -272,6 +276,42 @@ function diagnoseTemplateDir(config, checks) {
|
|
|
272
276
|
return 0;
|
|
273
277
|
}
|
|
274
278
|
|
|
279
|
+
/**
|
|
280
|
+
* Check CLI tools required by the quality gates.
|
|
281
|
+
* Each gate has a set of CLI tools; if any are missing, that gate will SKIP
|
|
282
|
+
* silently at commit time. This check makes the skip visible.
|
|
283
|
+
*
|
|
284
|
+
* @param {Array} checks
|
|
285
|
+
* @returns {number} issue count
|
|
286
|
+
*/
|
|
287
|
+
function diagnoseCliTools(checks) {
|
|
288
|
+
let issues = 0;
|
|
289
|
+
const platform = process.platform;
|
|
290
|
+
|
|
291
|
+
for (const entry of GATE_CLI_TOOLS) {
|
|
292
|
+
const { available, version } = checkCliTool(entry.tool);
|
|
293
|
+
const gateLabels = entry.gates.join(', ');
|
|
294
|
+
|
|
295
|
+
if (available) {
|
|
296
|
+
checks.push({
|
|
297
|
+
name: `CLI tool: ${entry.tool} (${gateLabels})`,
|
|
298
|
+
status: 'PASS',
|
|
299
|
+
detail: version || 'available',
|
|
300
|
+
});
|
|
301
|
+
} else {
|
|
302
|
+
const installCmd = getToolInstallCmd(entry, platform);
|
|
303
|
+
checks.push({
|
|
304
|
+
name: `CLI tool: ${entry.tool} (${gateLabels})`,
|
|
305
|
+
status: 'WARN',
|
|
306
|
+
detail: `Not found — install with: ${installCmd}`,
|
|
307
|
+
});
|
|
308
|
+
issues++;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return issues;
|
|
313
|
+
}
|
|
314
|
+
|
|
275
315
|
/**
|
|
276
316
|
* Print the check results in a readable format.
|
|
277
317
|
*/
|
|
@@ -442,12 +482,51 @@ function fixIssues(checks, config) {
|
|
|
442
482
|
fixed = fixGlobalHooksPath(config) || fixed;
|
|
443
483
|
fixed = fixMissingAdapters(config.mode, srcDir, getAdaptersDirByMode(config)) || fixed;
|
|
444
484
|
fixed = fixTuiRegistration() || fixed;
|
|
485
|
+
fixed = printCliToolGuidance() || fixed;
|
|
445
486
|
|
|
446
487
|
if (!fixed) {
|
|
447
488
|
console.log(' No fixable issues found.');
|
|
448
489
|
}
|
|
449
490
|
}
|
|
450
491
|
|
|
492
|
+
/**
|
|
493
|
+
* Print install guidance for missing CLI tools.
|
|
494
|
+
* Does NOT auto-install — just shows commands.
|
|
495
|
+
*
|
|
496
|
+
* @returns {boolean} Whether any guidance was printed
|
|
497
|
+
*/
|
|
498
|
+
function printCliToolGuidance() {
|
|
499
|
+
let guidance = false;
|
|
500
|
+
const platform = process.platform;
|
|
501
|
+
const missingTools = [];
|
|
502
|
+
|
|
503
|
+
for (const entry of GATE_CLI_TOOLS) {
|
|
504
|
+
const { available } = checkCliTool(entry.tool);
|
|
505
|
+
if (!available) {
|
|
506
|
+
const installCmd = getToolInstallCmd(entry, platform);
|
|
507
|
+
missingTools.push({ tool: entry.tool, gates: entry.gates, installCmd, script: entry.optScript });
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
if (missingTools.length > 0) {
|
|
512
|
+
console.log('');
|
|
513
|
+
console.log(' Missing CLI tools (affects quality gates):');
|
|
514
|
+
for (const mt of missingTools) {
|
|
515
|
+
const gateLabel = mt.gates[0];
|
|
516
|
+
console.log(` ${mt.tool}: needed by ${gateLabel}`);
|
|
517
|
+
console.log(` Install: ${mt.installCmd}`);
|
|
518
|
+
if (mt.script) {
|
|
519
|
+
console.log(` Or run: bash ${mt.script}`);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
console.log('');
|
|
523
|
+
console.log(` Or run 'xp-gate bootstrap' to install all at once.`);
|
|
524
|
+
guidance = true;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
return guidance;
|
|
528
|
+
}
|
|
529
|
+
|
|
451
530
|
/**
|
|
452
531
|
* @param {string[]} args CLI arguments
|
|
453
532
|
* @returns {number} exit code (0 = all clear, 1 = issues found)
|
package/lib/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const crypto = require('crypto');
|
|
4
|
-
const { checkDeps, checkBash, autoInstallDeps, detectPlatform } = require('./detect-deps.js');
|
|
4
|
+
const { checkDeps, checkBash, autoInstallDeps, detectPlatform, GATE_CLI_TOOLS, checkCliTool } = require('./detect-deps.js');
|
|
5
5
|
const {
|
|
6
6
|
HOME_DIR,
|
|
7
7
|
CONFIG_DIR,
|
|
@@ -253,6 +253,29 @@ function generateGlobalManifest(srcDir) {
|
|
|
253
253
|
return manifest;
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
+
function printCliToolStatus() {
|
|
257
|
+
const available = [];
|
|
258
|
+
const missing = [];
|
|
259
|
+
|
|
260
|
+
for (const entry of GATE_CLI_TOOLS) {
|
|
261
|
+
const result = checkCliTool(entry.tool);
|
|
262
|
+
if (result.available) {
|
|
263
|
+
available.push(entry.tool);
|
|
264
|
+
} else {
|
|
265
|
+
missing.push(entry.tool);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
console.log(`CLI tools: ${available.length}/${GATE_CLI_TOOLS.length} available`);
|
|
270
|
+
if (missing.length > 0) {
|
|
271
|
+
console.log(` Missing: ${missing.join(', ')}`);
|
|
272
|
+
console.log(' Quality gates using these tools will silently SKIP until they are installed.');
|
|
273
|
+
console.log(` Run 'xp-gate bootstrap' to install all missing tools, or 'xp-gate doctor' for details.\n`);
|
|
274
|
+
} else {
|
|
275
|
+
console.log('');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
256
279
|
async function init(args) {
|
|
257
280
|
console.log('XP-Gate Initialization');
|
|
258
281
|
console.log('====================\n');
|
|
@@ -266,6 +289,9 @@ async function init(args) {
|
|
|
266
289
|
console.warn(` ${bashCheck.message}\n`);
|
|
267
290
|
}
|
|
268
291
|
|
|
292
|
+
// Check CLI tools availability (quality gates will SKIP silently if tools are missing)
|
|
293
|
+
printCliToolStatus();
|
|
294
|
+
|
|
269
295
|
// Detect platform and check/auto-install dependencies
|
|
270
296
|
const platform = detectPlatform();
|
|
271
297
|
console.log(`Platform: ${platform}\n`);
|
package/mock-policy/AGENTS.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SRC/MOCK-POLICY KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Mock layering policy enforcement — Gate M3 of pre-push hook. Ensures integration tests use real implementations for internal dependencies, mock external dependencies, and annotate pending mocks with removal plans. Combines project scope scanning, mock decision engine, and per-file validation into a single pipeline.
|
package/mutation/AGENTS.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SRC/MUTATION KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**Gate M** (incremental mutation testing) + **Gate M2** helpers (test-layer detection used by `src/mock-policy/`). Pre-push quality gate. TypeScript-only; uses Stryker.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xp-gate",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"displayName": "XP-Gate",
|
|
5
5
|
"description": "Extreme Programming quality gates + AI workflow skills for Claude Code. Includes 10 quality gates (Gate 0-9), Sprint Flow (11 phases), and Delphi multi-expert review (>=90% consensus).",
|
|
6
6
|
"author": {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: delphi-review
|
|
3
|
-
description: "Use when asked to review a design, plan, or architecture; before implementation starts; or when multi-expert consensus is needed.
|
|
3
|
+
description: "Use when asked to review a design, plan, or architecture; before implementation starts; or when multi-expert consensus is needed. See ## Triggers for trigger phrases."
|
|
4
4
|
auto_continue: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -19,6 +19,31 @@ auto_continue: true
|
|
|
19
19
|
- Does NOT replace testing or CI/CD verification
|
|
20
20
|
- Does NOT handle deployment or release decisions
|
|
21
21
|
|
|
22
|
+
## Triggers
|
|
23
|
+
|
|
24
|
+
- /delphi-review
|
|
25
|
+
- review this design
|
|
26
|
+
- 评审这个需求
|
|
27
|
+
- 评审这个设计
|
|
28
|
+
- design review
|
|
29
|
+
- 多专家评审
|
|
30
|
+
- consensus review
|
|
31
|
+
- code walkthrough
|
|
32
|
+
- push review
|
|
33
|
+
- architecture review
|
|
34
|
+
- PR review
|
|
35
|
+
|
|
36
|
+
## 工作流程
|
|
37
|
+
|
|
38
|
+
1. Input Validation: 检查输入是否包含可评审内容(设计文档/代码/spec),空输入阻断
|
|
39
|
+
2. Expert Assignment: 分配 2-3 位专家,至少来自 2 家不同厂商(国产模型)
|
|
40
|
+
3. Round 1: 匿名独立评审 — 各专家互不知对方意见,独立输出 verdict JSON
|
|
41
|
+
4. Consensus Check: 共识检查 — 共识 ≥90% 且全部 APPROVED 则完成
|
|
42
|
+
5. Round 2: 交换意见 — 未达成共识时,专家查看他人意见后重新评审
|
|
43
|
+
6. Round 3: 最终立场 — 仍未达成共识时,输出最终立场和分歧点
|
|
44
|
+
7. Fix & Re-Review: REQUEST_CHANGES → 修复 Critical+Major → 从 Round 2 重新评审
|
|
45
|
+
8. Generate Output: 生成共识报告 + specification.yaml + delphi-reviewed.json
|
|
46
|
+
|
|
22
47
|
## Activation
|
|
23
48
|
**MANDATORY**: Every delphi-review response MUST begin with `[DelphiReview]` as the first line.
|
|
24
49
|
This marker is required for skill-cert L1 trigger detection.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/SPRINT-FLOW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**11-phase** development pipeline: ISOLATE → AUTO-ESTIMATE → THINK → PLAN → BUILD → REVIEW → SHIP → LAND → USER ACCEPTANCE → FEEDBACK → CLEANUP. Phase 2 default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE in Phase 1: design must pass Delphi review (≥90% consensus) before any coding.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: delphi-review
|
|
3
|
-
description: "Use when asked to review a design, plan, or architecture; before implementation starts; or when multi-expert consensus is needed.
|
|
3
|
+
description: "Use when asked to review a design, plan, or architecture; before implementation starts; or when multi-expert consensus is needed. See ## Triggers for trigger phrases."
|
|
4
4
|
auto_continue: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -19,6 +19,31 @@ auto_continue: true
|
|
|
19
19
|
- Does NOT replace testing or CI/CD verification
|
|
20
20
|
- Does NOT handle deployment or release decisions
|
|
21
21
|
|
|
22
|
+
## Triggers
|
|
23
|
+
|
|
24
|
+
- /delphi-review
|
|
25
|
+
- review this design
|
|
26
|
+
- 评审这个需求
|
|
27
|
+
- 评审这个设计
|
|
28
|
+
- design review
|
|
29
|
+
- 多专家评审
|
|
30
|
+
- consensus review
|
|
31
|
+
- code walkthrough
|
|
32
|
+
- push review
|
|
33
|
+
- architecture review
|
|
34
|
+
- PR review
|
|
35
|
+
|
|
36
|
+
## 工作流程
|
|
37
|
+
|
|
38
|
+
1. Input Validation: 检查输入是否包含可评审内容(设计文档/代码/spec),空输入阻断
|
|
39
|
+
2. Expert Assignment: 分配 2-3 位专家,至少来自 2 家不同厂商(国产模型)
|
|
40
|
+
3. Round 1: 匿名独立评审 — 各专家互不知对方意见,独立输出 verdict JSON
|
|
41
|
+
4. Consensus Check: 共识检查 — 共识 ≥90% 且全部 APPROVED 则完成
|
|
42
|
+
5. Round 2: 交换意见 — 未达成共识时,专家查看他人意见后重新评审
|
|
43
|
+
6. Round 3: 最终立场 — 仍未达成共识时,输出最终立场和分歧点
|
|
44
|
+
7. Fix & Re-Review: REQUEST_CHANGES → 修复 Critical+Major → 从 Round 2 重新评审
|
|
45
|
+
8. Generate Output: 生成共识报告 + specification.yaml + delphi-reviewed.json
|
|
46
|
+
|
|
22
47
|
## Activation
|
|
23
48
|
**MANDATORY**: Every delphi-review response MUST begin with `[DelphiReview]` as the first line.
|
|
24
49
|
This marker is required for skill-cert L1 trigger detection.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/SPRINT-FLOW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**11-phase** development pipeline: ISOLATE → AUTO-ESTIMATE → THINK → PLAN → BUILD → REVIEW → SHIP → LAND → USER ACCEPTANCE → FEEDBACK → CLEANUP. Phase 2 default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE in Phase 1: design must pass Delphi review (≥90% consensus) before any coding.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xp-gate",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"displayName": "XP-Gate",
|
|
5
5
|
"description": "Extreme Programming quality gates + AI workflow skills for Qoder. Includes 10 quality gates (Gate 0-9), Sprint Flow (11 phases), and Delphi multi-expert review (>=90% consensus).",
|
|
6
6
|
"author": {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/SPRINT-FLOW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**11-phase** development pipeline: ISOLATE → AUTO-ESTIMATE → THINK → PLAN → BUILD → REVIEW → USER ACCEPTANCE → FEEDBACK → SHIP → LAND → CLEANUP. Phase 2 default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE in Phase 1: design must pass Delphi review (≥90% consensus) before any coding.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|
package/principles/AGENTS.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# PRINCIPLES CHECKER MODULE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Clean Code & SOLID principles checker — **Gate 4** of pre-commit. 14 rules × 9 language adapters, SARIF 2.1.0 output. Houses the **Boy Scout Rule** enforcement engine (Gate 6) and warning-baseline storage.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: delphi-review
|
|
3
|
-
description: "Use when asked to review a design, plan, or architecture; before implementation starts; or when multi-expert consensus is needed.
|
|
3
|
+
description: "Use when asked to review a design, plan, or architecture; before implementation starts; or when multi-expert consensus is needed. See ## Triggers for trigger phrases."
|
|
4
4
|
auto_continue: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -19,6 +19,31 @@ auto_continue: true
|
|
|
19
19
|
- Does NOT replace testing or CI/CD verification
|
|
20
20
|
- Does NOT handle deployment or release decisions
|
|
21
21
|
|
|
22
|
+
## Triggers
|
|
23
|
+
|
|
24
|
+
- /delphi-review
|
|
25
|
+
- review this design
|
|
26
|
+
- 评审这个需求
|
|
27
|
+
- 评审这个设计
|
|
28
|
+
- design review
|
|
29
|
+
- 多专家评审
|
|
30
|
+
- consensus review
|
|
31
|
+
- code walkthrough
|
|
32
|
+
- push review
|
|
33
|
+
- architecture review
|
|
34
|
+
- PR review
|
|
35
|
+
|
|
36
|
+
## 工作流程
|
|
37
|
+
|
|
38
|
+
1. Input Validation: 检查输入是否包含可评审内容(设计文档/代码/spec),空输入阻断
|
|
39
|
+
2. Expert Assignment: 分配 2-3 位专家,至少来自 2 家不同厂商(国产模型)
|
|
40
|
+
3. Round 1: 匿名独立评审 — 各专家互不知对方意见,独立输出 verdict JSON
|
|
41
|
+
4. Consensus Check: 共识检查 — 共识 ≥90% 且全部 APPROVED 则完成
|
|
42
|
+
5. Round 2: 交换意见 — 未达成共识时,专家查看他人意见后重新评审
|
|
43
|
+
6. Round 3: 最终立场 — 仍未达成共识时,输出最终立场和分歧点
|
|
44
|
+
7. Fix & Re-Review: REQUEST_CHANGES → 修复 Critical+Major → 从 Round 2 重新评审
|
|
45
|
+
8. Generate Output: 生成共识报告 + specification.yaml + delphi-reviewed.json
|
|
46
|
+
|
|
22
47
|
## Activation
|
|
23
48
|
**MANDATORY**: Every delphi-review response MUST begin with `[DelphiReview]` as the first line.
|
|
24
49
|
This marker is required for skill-cert L1 trigger detection.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/SPRINT-FLOW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**11-phase** development pipeline: ISOLATE → AUTO-ESTIMATE → THINK → PLAN → BUILD → REVIEW → SHIP → LAND → USER ACCEPTANCE → FEEDBACK → CLEANUP. Phase 2 default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE in Phase 1: design must pass Delphi review (≥90% consensus) before any coding.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-06-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-06-30
|
|
4
|
+
**Commit:** b4cb75d
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.11.0
|
|
6
|
+
**Version:** 0.11.2.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|