@boyingliu01/xp-gate 0.11.1 → 0.11.3

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 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(() => {});
@@ -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 };
@@ -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: TUI auto-registration ---
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`);
@@ -1,9 +1,9 @@
1
1
  # SRC/MOCK-POLICY KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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.
@@ -1,9 +1,9 @@
1
1
  # SRC/MUTATION KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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": "@boyingliu01/xp-gate",
3
- "version": "0.11.1",
3
+ "version": "0.11.3",
4
4
  "description": "AI-driven development workflow: 6 quality gates + Delphi review + Sprint Flow",
5
5
  "bin": {
6
6
  "xp-gate": "./bin/xp-gate.js"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xp-gate",
3
- "version": "0.11.1",
3
+ "version": "0.11.3",
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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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": "@boyingliu01/opencode-plugin",
3
- "version": "0.11.1",
3
+ "version": "0.11.3",
4
4
  "type": "module",
5
5
  "main": "index.ts",
6
6
  "description": "XP-Gate quality gates + AI workflow skills + Sprint Flow TUI sidebar for OpenCode",
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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.1",
3
+ "version": "0.11.3",
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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
  # PRINCIPLES CHECKER MODULE
2
2
 
3
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.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
3
  **Generated:** 2026-06-30
4
- **Commit:** 9289349
4
+ **Commit:** f1117d4
5
5
  **Branch:** main
6
- **Version:** 0.11.1.0
6
+ **Version:** 0.11.3.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.