@boyingliu01/xp-gate 0.14.29 → 0.14.30
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/adapter-common.sh +0 -0
- package/adapters/cpp.sh +0 -0
- package/adapters/dart.sh +0 -0
- package/adapters/flutter.sh +0 -0
- package/adapters/go.sh +0 -0
- package/adapters/iac.sh +0 -0
- package/adapters/java.sh +0 -0
- package/adapters/kotlin.sh +0 -0
- package/adapters/objectivec.sh +0 -0
- package/adapters/plugins/book299-20132-python/scripts/install-gradle.sh +0 -0
- package/adapters/plugins/book299-20132-python/scripts/install-maven.sh +0 -0
- package/adapters/plugins/book299-4081-c/scripts/install-gradle.sh +0 -0
- package/adapters/plugins/book299-4081-c/scripts/install-maven.sh +0 -0
- package/adapters/plugins/book299-4083-javascriptes5/scripts/install-gradle.sh +0 -0
- package/adapters/plugins/book299-4083-javascriptes5/scripts/install-maven.sh +0 -0
- package/adapters/powershell.sh +0 -0
- package/adapters/python.sh +0 -0
- package/adapters/shell.sh +0 -0
- package/adapters/swift.sh +0 -0
- package/adapters/typescript.sh +0 -0
- package/bin/xp-gate.js +8 -0
- package/gate-3.sh +0 -0
- package/gate-4.sh +0 -0
- package/gate-7.sh +0 -0
- package/gate-8.sh +0 -0
- package/gate-9.sh +0 -0
- package/hooks/adapter-common.sh +0 -0
- package/hooks/gate-3.sh +0 -0
- package/hooks/gate-4.sh +0 -0
- package/hooks/gate-7.sh +0 -0
- package/hooks/gate-8.sh +0 -0
- package/hooks/gate-9.sh +0 -0
- package/hooks/pre-commit +0 -0
- package/hooks/pre-push +0 -0
- package/lib/__tests__/phase-transition.test.js +272 -174
- package/lib/__tests__/sprint-audit.test.js +207 -0
- package/lib/phase-transition.js +249 -211
- package/lib/sprint-audit.js +235 -0
- package/mock-policy/AGENTS.md +2 -2
- package/mutation/AGENTS.md +2 -2
- package/package.json +2 -2
- package/plugins/claude-code/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-code/bin/delphi-review-guard.sh +0 -0
- package/plugins/claude-code/bin/xp-gate-check +0 -0
- package/plugins/claude-code/skills/delphi-review/AGENTS.md +2 -2
- package/plugins/claude-code/skills/sprint-flow/AGENTS.md +2 -2
- package/plugins/claude-code/skills/sprint-flow/references/orchestration-rules.md +10 -0
- package/plugins/claude-code/skills/test-specification-alignment/AGENTS.md +2 -2
- package/plugins/opencode/package.json +1 -1
- package/plugins/opencode/skills/delphi-review/AGENTS.md +2 -2
- package/plugins/opencode/skills/sprint-flow/AGENTS.md +2 -2
- package/plugins/opencode/skills/sprint-flow/references/orchestration-rules.md +10 -0
- package/plugins/opencode/skills/test-specification-alignment/AGENTS.md +2 -2
- package/plugins/qoder/agents/delphi-architecture.md +48 -48
- package/plugins/qoder/agents/delphi-feasibility.md +48 -48
- package/plugins/qoder/agents/delphi-technical.md +48 -48
- package/plugins/qoder/bin/sprint-flow-guard.sh +0 -0
- package/plugins/qoder/bin/xp-gate-check +0 -0
- package/plugins/qoder/plugin.json +1 -1
- package/plugins/qoder/skills/delphi-review/AGENTS.md +2 -2
- package/plugins/qoder/skills/sprint-flow/AGENTS.md +2 -2
- package/plugins/qoder/skills/test-specification-alignment/AGENTS.md +2 -2
- package/principles/AGENTS.md +2 -2
- package/scripts/delphi-external-review.cjs +432 -432
- package/skills/delphi-review/AGENTS.md +2 -2
- package/skills/sprint-flow/AGENTS.md +2 -2
- package/skills/sprint-flow/references/orchestration-rules.md +10 -0
- package/skills/test-specification-alignment/AGENTS.md +2 -2
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* xp-gate sprint-audit — Layer 2: Final sprint completeness audit.
|
|
3
|
+
*
|
|
4
|
+
* Checks phase_history coverage, time records, artifact records,
|
|
5
|
+
* and state consistency at Phase 6 CLOSE.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* xp-gate sprint-audit [--dir <path>] [--json]
|
|
9
|
+
*
|
|
10
|
+
* Verdict rules:
|
|
11
|
+
* 6/6 completed + 0 errors → PASS (exit 0)
|
|
12
|
+
* >= 4/6 completed + 0 errors → PASS_WITH_WARNINGS (exit 0)
|
|
13
|
+
* < 4/6 completed or any errors → FAIL (exit 1)
|
|
14
|
+
* No sprint-state.json → SKIP (exit 0)
|
|
15
|
+
*
|
|
16
|
+
* @module sprint-audit
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
'use strict';
|
|
20
|
+
|
|
21
|
+
const fs = require('fs');
|
|
22
|
+
const path = require('path');
|
|
23
|
+
const { PHASE_NAMES } = require('./phase-transition');
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Run the sprint audit.
|
|
27
|
+
* @param {string[]} args - CLI arguments
|
|
28
|
+
* @returns {Promise<number>} Exit code
|
|
29
|
+
*/
|
|
30
|
+
async function handleSprintAudit(args = []) {
|
|
31
|
+
if (args.includes('--help')) {
|
|
32
|
+
console.log('Usage: xp-gate sprint-audit [options]');
|
|
33
|
+
console.log('');
|
|
34
|
+
console.log('Options:');
|
|
35
|
+
console.log(' --dir <path> Project directory (default: cwd)');
|
|
36
|
+
console.log(' --json Output as JSON instead of human-readable');
|
|
37
|
+
console.log('');
|
|
38
|
+
console.log('Runs final sprint completeness audit at Phase 6 CLOSE.');
|
|
39
|
+
console.log('Checks phase coverage, time records, artifact records,');
|
|
40
|
+
console.log('and state consistency.');
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const dirIdx = args.indexOf('--dir');
|
|
45
|
+
const projectDir = dirIdx >= 0 ? args[dirIdx + 1] : process.cwd();
|
|
46
|
+
const jsonFlag = args.includes('--json');
|
|
47
|
+
|
|
48
|
+
const stateFile = path.join(projectDir, '.sprint-state', 'sprint-state.json');
|
|
49
|
+
|
|
50
|
+
// No sprint-state.json → SKIP
|
|
51
|
+
if (!fs.existsSync(stateFile)) {
|
|
52
|
+
if (jsonFlag) {
|
|
53
|
+
console.log(JSON.stringify({ verdict: 'SKIP', reason: 'No sprint-state.json found' }));
|
|
54
|
+
} else {
|
|
55
|
+
console.log('⏭️ No sprint-state.json found — skipping audit.');
|
|
56
|
+
}
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
let state;
|
|
61
|
+
try {
|
|
62
|
+
state = JSON.parse(fs.readFileSync(stateFile, 'utf8'));
|
|
63
|
+
} catch (err) {
|
|
64
|
+
const result = {
|
|
65
|
+
verdict: 'FAIL',
|
|
66
|
+
errors: [`Failed to parse sprint-state.json: ${err.message}`],
|
|
67
|
+
};
|
|
68
|
+
if (jsonFlag) {
|
|
69
|
+
console.log(JSON.stringify(result, null, 2));
|
|
70
|
+
} else {
|
|
71
|
+
console.error(`❌ ${result.errors[0]}`);
|
|
72
|
+
}
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// ── Run checks ──
|
|
77
|
+
const warnings = [];
|
|
78
|
+
const errors = [];
|
|
79
|
+
const phaseHistory = Array.isArray(state.phase_history) ? state.phase_history : [];
|
|
80
|
+
|
|
81
|
+
// Build lookup
|
|
82
|
+
const historyLookup = {};
|
|
83
|
+
for (const entry of phaseHistory) {
|
|
84
|
+
historyLookup[entry.phase] = entry;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Check 1: Phase coverage
|
|
88
|
+
const completedPhases = [];
|
|
89
|
+
const missingPhases = [];
|
|
90
|
+
const incompletePhases = [];
|
|
91
|
+
|
|
92
|
+
for (let i = 1; i <= 6; i++) {
|
|
93
|
+
const entry = historyLookup[i];
|
|
94
|
+
if (!entry) {
|
|
95
|
+
missingPhases.push(i);
|
|
96
|
+
} else if (entry.status === 'completed' || entry.status === 'skipped') {
|
|
97
|
+
completedPhases.push(i);
|
|
98
|
+
} else {
|
|
99
|
+
incompletePhases.push({ phase: i, name: PHASE_NAMES[i] || `Phase ${i}`, status: entry.status });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Check 2: Time records for completed phases
|
|
104
|
+
for (const phaseNum of completedPhases) {
|
|
105
|
+
const entry = historyLookup[phaseNum];
|
|
106
|
+
if (entry.status === 'completed' && (entry.duration_seconds == null || entry.duration_seconds === 0)) {
|
|
107
|
+
warnings.push(`Phase ${phaseNum} (${PHASE_NAMES[phaseNum]}) completed but has no duration recorded`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Check 3: Artifact records (phase-{N}-summary.md)
|
|
112
|
+
const outputsDir = path.join(projectDir, '.sprint-state', 'phase-outputs');
|
|
113
|
+
for (const phaseNum of completedPhases) {
|
|
114
|
+
if (historyLookup[phaseNum].status === 'completed') {
|
|
115
|
+
const summaryFile = path.join(outputsDir, `phase-${phaseNum}-summary.md`);
|
|
116
|
+
if (!fs.existsSync(summaryFile)) {
|
|
117
|
+
warnings.push(`Phase ${phaseNum} summary missing: .sprint-state/phase-outputs/phase-${phaseNum}-summary.md`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Check 4: State consistency — phase field vs phase_history last entry
|
|
123
|
+
if (phaseHistory.length > 0) {
|
|
124
|
+
const lastEntry = phaseHistory[phaseHistory.length - 1];
|
|
125
|
+
if (state.phase !== undefined && state.phase !== lastEntry.phase) {
|
|
126
|
+
errors.push(
|
|
127
|
+
`State inconsistency: sprint-state.phase=${state.phase} but phase_history last entry is phase ${lastEntry.phase}`
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ── Determine verdict ──
|
|
133
|
+
const completedCount = completedPhases.length;
|
|
134
|
+
let verdict;
|
|
135
|
+
if (errors.length > 0 || completedCount < 4) {
|
|
136
|
+
verdict = 'FAIL';
|
|
137
|
+
} else if (completedCount >= 6 && errors.length === 0) {
|
|
138
|
+
verdict = 'PASS';
|
|
139
|
+
} else {
|
|
140
|
+
verdict = 'PASS_WITH_WARNINGS';
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// ── Build result ──
|
|
144
|
+
const result = {
|
|
145
|
+
sprint_id: state.id || 'unknown',
|
|
146
|
+
branch: state.isolation?.branch || 'unknown',
|
|
147
|
+
coverage: {
|
|
148
|
+
completed: completedCount,
|
|
149
|
+
total: 6,
|
|
150
|
+
pct: Math.round((completedCount / 6) * 100),
|
|
151
|
+
},
|
|
152
|
+
missing_phases: missingPhases.map(p => ({ phase: p, name: PHASE_NAMES[p] || `Phase ${p}` })),
|
|
153
|
+
incomplete_phases: incompletePhases,
|
|
154
|
+
warnings,
|
|
155
|
+
errors,
|
|
156
|
+
verdict,
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
// ── Persist report (latest overwrites — expected behavior) ──
|
|
160
|
+
const reportPath = path.join(projectDir, '.sprint-state', 'audit-report.json');
|
|
161
|
+
try {
|
|
162
|
+
fs.writeFileSync(reportPath, JSON.stringify(result, null, 2), 'utf8');
|
|
163
|
+
} catch (err) {
|
|
164
|
+
// Report write failure is WARNING, not BLOCK
|
|
165
|
+
warnings.push(`Failed to write audit report: ${err.message}`);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// ── Output ──
|
|
169
|
+
if (jsonFlag) {
|
|
170
|
+
console.log(JSON.stringify(result, null, 2));
|
|
171
|
+
} else {
|
|
172
|
+
printHumanReadable(result, state);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Exit code: FAIL → 1, others → 0
|
|
176
|
+
return verdict === 'FAIL' ? 1 : 0;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Print human-readable audit report.
|
|
181
|
+
* @param {object} result - Audit result object
|
|
182
|
+
* @param {object} state - Sprint state object
|
|
183
|
+
*/
|
|
184
|
+
function printHumanReadable(result, state) {
|
|
185
|
+
const lines = [];
|
|
186
|
+
lines.push('');
|
|
187
|
+
lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
188
|
+
lines.push(` Sprint Audit Report — ${result.sprint_id}`);
|
|
189
|
+
lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
190
|
+
lines.push('');
|
|
191
|
+
lines.push(` Branch: ${result.branch}`);
|
|
192
|
+
lines.push(` Phase Coverage: ${result.coverage.completed}/${result.coverage.total} (${result.coverage.pct}%)`);
|
|
193
|
+
lines.push('');
|
|
194
|
+
lines.push(' Phase History:');
|
|
195
|
+
|
|
196
|
+
for (let i = 1; i <= 6; i++) {
|
|
197
|
+
const entry = result.incomplete_phases.find(p => p.phase === i);
|
|
198
|
+
const missing = result.missing_phases.find(p => p.phase === i);
|
|
199
|
+
const name = (PHASE_NAMES[i] || `Phase ${i}`).padEnd(10);
|
|
200
|
+
|
|
201
|
+
if (missing) {
|
|
202
|
+
lines.push(` ❌ Phase ${i}/6 ${name} — not recorded`);
|
|
203
|
+
} else if (entry) {
|
|
204
|
+
lines.push(` ⚠️ Phase ${i}/6 ${name} ${entry.status} ← not yet completed`);
|
|
205
|
+
} else {
|
|
206
|
+
lines.push(` ✅ Phase ${i}/6 ${name} completed`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (result.warnings.length > 0) {
|
|
211
|
+
lines.push('');
|
|
212
|
+
lines.push(' Warnings:');
|
|
213
|
+
for (const w of result.warnings) {
|
|
214
|
+
lines.push(` ⚠️ ${w}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (result.errors.length > 0) {
|
|
219
|
+
lines.push('');
|
|
220
|
+
lines.push(' Errors:');
|
|
221
|
+
for (const e of result.errors) {
|
|
222
|
+
lines.push(` ❌ ${e}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
lines.push('');
|
|
227
|
+
const issueCount = result.warnings.length + result.errors.length;
|
|
228
|
+
lines.push(` Overall: ${result.warnings.length} warning(s), ${result.errors.length} error(s)`);
|
|
229
|
+
lines.push(` Verdict: ${result.verdict}`);
|
|
230
|
+
lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
231
|
+
|
|
232
|
+
console.log(lines.join('\n'));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
module.exports = { handleSprintAudit };
|
package/mock-policy/AGENTS.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SRC/MOCK-POLICY KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.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
3
|
**Generated:** 2026-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.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.14.
|
|
3
|
+
"version": "0.14.30",
|
|
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"
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"node": ">=18.0.0"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
|
-
"version": "0.14.
|
|
42
|
+
"version": "0.14.30",
|
|
43
43
|
"prepack": "node scripts/sync-package-content.js",
|
|
44
44
|
"test": "echo \"Run tests\" && exit 0"
|
|
45
45
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xp-gate",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.30",
|
|
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": {
|
|
File without changes
|
|
File without changes
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.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-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
|
|
@@ -103,6 +103,16 @@
|
|
|
103
103
|
|
|
104
104
|
3. **等待用户确认 checkpoint**(如适用)
|
|
105
105
|
|
|
106
|
+
4. **Phase 6 CLOSE 完成后运行 sprint-audit**(自动提醒,Layer 1.5 触发):
|
|
107
|
+
```
|
|
108
|
+
npx xp-gate sprint-audit
|
|
109
|
+
```
|
|
110
|
+
- 检查 phase 覆盖度、时间记录、输出物记录、状态一致性
|
|
111
|
+
- 输出人类可读报告或 JSON(`--json`)
|
|
112
|
+
- 报告写入 `.sprint-state/audit-report.json`(最新覆盖)
|
|
113
|
+
- Verdict: PASS / PASS_WITH_WARNINGS / FAIL / SKIP
|
|
114
|
+
- `phase-transition` CLI 在 Phase 6 completed 时自动输出提醒,无需额外指令
|
|
115
|
+
|
|
106
116
|
### Background Task Resume Protocol (MANDATORY — Issue #248)
|
|
107
117
|
|
|
108
118
|
After dispatching background agents with `run_in_background=true`:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.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
3
|
**Generated:** 2026-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.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-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
|
|
@@ -103,6 +103,16 @@
|
|
|
103
103
|
|
|
104
104
|
3. **等待用户确认 checkpoint**(如适用)
|
|
105
105
|
|
|
106
|
+
4. **Phase 6 CLOSE 完成后运行 sprint-audit**(自动提醒,Layer 1.5 触发):
|
|
107
|
+
```
|
|
108
|
+
npx xp-gate sprint-audit
|
|
109
|
+
```
|
|
110
|
+
- 检查 phase 覆盖度、时间记录、输出物记录、状态一致性
|
|
111
|
+
- 输出人类可读报告或 JSON(`--json`)
|
|
112
|
+
- 报告写入 `.sprint-state/audit-report.json`(最新覆盖)
|
|
113
|
+
- Verdict: PASS / PASS_WITH_WARNINGS / FAIL / SKIP
|
|
114
|
+
- `phase-transition` CLI 在 Phase 6 completed 时自动输出提醒,无需额外指令
|
|
115
|
+
|
|
106
116
|
### Background Task Resume Protocol (MANDATORY — Issue #248)
|
|
107
117
|
|
|
108
118
|
After dispatching background agents with `run_in_background=true`:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-22
|
|
4
|
-
**Commit:**
|
|
4
|
+
**Commit:** a465b02
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.14.
|
|
6
|
+
**Version:** 0.14.30.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: delphi-architecture
|
|
3
|
-
description: Delphi Method 架构评审专家。独立评审需求对齐度、系统一致性、模块边界清晰度和架构演进性。输出结构化评审意见和量化裁决。
|
|
4
|
-
model: Qwen3.7-Max
|
|
5
|
-
tools: Read, Grep, Glob
|
|
6
|
-
skills: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
你是 Delphi Method 架构评审专家(Architecture Expert)。
|
|
10
|
-
|
|
11
|
-
## 评审维度
|
|
12
|
-
|
|
13
|
-
1. **需求对齐度** — 设计是否完整覆盖所有需求,是否有遗漏的验收标准
|
|
14
|
-
2. **系统一致性** — 与现有架构风格、模式是否一致,是否引入不协调的技术选型
|
|
15
|
-
3. **模块边界清晰度** — 职责划分是否明确,耦合度是否合理,接口设计是否干净
|
|
16
|
-
4. **架构演进性** — 是否为未来扩展留有空间,是否过度设计或设计不足
|
|
17
|
-
5. **技术选型合理性** — 技术栈选择是否有充分依据,是否考虑了团队能力和项目约束
|
|
18
|
-
|
|
19
|
-
## 输出要求
|
|
20
|
-
|
|
21
|
-
你的评审必须返回以下结构化格式:
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
## 评审意见
|
|
25
|
-
|
|
26
|
-
### 裁决: APPROVED | REQUEST_CHANGES | REJECTED
|
|
27
|
-
### 置信度: 1-10
|
|
28
|
-
|
|
29
|
-
### 关键问题 (Critical Issues)
|
|
30
|
-
- 必须修复才能通过的问题
|
|
31
|
-
|
|
32
|
-
### 主要关注点 (Major Concerns)
|
|
33
|
-
- 需要认真考虑但不阻塞通过的问题
|
|
34
|
-
|
|
35
|
-
### 次要关注点 (Minor Concerns)
|
|
36
|
-
- 建议性改进
|
|
37
|
-
|
|
38
|
-
### 总结
|
|
39
|
-
- 一段话概括评审结论
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## 评审原则
|
|
43
|
-
|
|
44
|
-
- 独立评审,不要参考其他专家的意见(Round 1)
|
|
45
|
-
- 聚焦架构层面,不要纠结于代码细节
|
|
46
|
-
- 给出具体的改进建议,而不是泛泛而谈
|
|
47
|
-
- 置信度反映你对自己判断的确信程度
|
|
48
|
-
- 如果信息不足以做出判断,明确说明并给出 REQUEST_CHANGES
|
|
1
|
+
---
|
|
2
|
+
name: delphi-architecture
|
|
3
|
+
description: Delphi Method 架构评审专家。独立评审需求对齐度、系统一致性、模块边界清晰度和架构演进性。输出结构化评审意见和量化裁决。
|
|
4
|
+
model: Qwen3.7-Max
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
skills: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
你是 Delphi Method 架构评审专家(Architecture Expert)。
|
|
10
|
+
|
|
11
|
+
## 评审维度
|
|
12
|
+
|
|
13
|
+
1. **需求对齐度** — 设计是否完整覆盖所有需求,是否有遗漏的验收标准
|
|
14
|
+
2. **系统一致性** — 与现有架构风格、模式是否一致,是否引入不协调的技术选型
|
|
15
|
+
3. **模块边界清晰度** — 职责划分是否明确,耦合度是否合理,接口设计是否干净
|
|
16
|
+
4. **架构演进性** — 是否为未来扩展留有空间,是否过度设计或设计不足
|
|
17
|
+
5. **技术选型合理性** — 技术栈选择是否有充分依据,是否考虑了团队能力和项目约束
|
|
18
|
+
|
|
19
|
+
## 输出要求
|
|
20
|
+
|
|
21
|
+
你的评审必须返回以下结构化格式:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
## 评审意见
|
|
25
|
+
|
|
26
|
+
### 裁决: APPROVED | REQUEST_CHANGES | REJECTED
|
|
27
|
+
### 置信度: 1-10
|
|
28
|
+
|
|
29
|
+
### 关键问题 (Critical Issues)
|
|
30
|
+
- 必须修复才能通过的问题
|
|
31
|
+
|
|
32
|
+
### 主要关注点 (Major Concerns)
|
|
33
|
+
- 需要认真考虑但不阻塞通过的问题
|
|
34
|
+
|
|
35
|
+
### 次要关注点 (Minor Concerns)
|
|
36
|
+
- 建议性改进
|
|
37
|
+
|
|
38
|
+
### 总结
|
|
39
|
+
- 一段话概括评审结论
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 评审原则
|
|
43
|
+
|
|
44
|
+
- 独立评审,不要参考其他专家的意见(Round 1)
|
|
45
|
+
- 聚焦架构层面,不要纠结于代码细节
|
|
46
|
+
- 给出具体的改进建议,而不是泛泛而谈
|
|
47
|
+
- 置信度反映你对自己判断的确信程度
|
|
48
|
+
- 如果信息不足以做出判断,明确说明并给出 REQUEST_CHANGES
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: delphi-feasibility
|
|
3
|
-
description: Delphi Method 可行性分析专家。独立评审实际约束、风险识别、执行复杂度、替代方案和回滚策略。输出结构化评审意见和量化裁决。
|
|
4
|
-
model: DeepSeek-V4-Pro
|
|
5
|
-
tools: Read, Grep, Glob
|
|
6
|
-
skills: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
你是 Delphi Method 可行性分析专家(Feasibility Expert)。
|
|
10
|
-
|
|
11
|
-
## 评审维度
|
|
12
|
-
|
|
13
|
-
1. **实际约束** — 时间/资源/依赖是否在现有约束下可行,是否有不切实际的假设
|
|
14
|
-
2. **风险识别和缓解** — 主要风险是否已识别,缓解措施是否充分,是否有单点故障
|
|
15
|
-
3. **执行复杂度** — 实现难度是否被低估,依赖链是否清晰,是否需要特定领域知识
|
|
16
|
-
4. **替代方案** — 是否有更简单或更可靠的替代方案,当前方案是否是最佳性价比
|
|
17
|
-
5. **回滚策略** — 如果实施失败,是否有退路,是否可渐进式 rollout
|
|
18
|
-
|
|
19
|
-
## 输出要求
|
|
20
|
-
|
|
21
|
-
你的评审必须返回以下结构化格式:
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
## 评审意见
|
|
25
|
-
|
|
26
|
-
### 裁决: APPROVED | REQUEST_CHANGES | REJECTED
|
|
27
|
-
### 置信度: 1-10
|
|
28
|
-
|
|
29
|
-
### 关键问题 (Critical Issues)
|
|
30
|
-
- 必须解决才能继续的问题(不可行假设、关键风险未缓解)
|
|
31
|
-
|
|
32
|
-
### 主要关注点 (Major Concerns)
|
|
33
|
-
- 需要认真考虑但不阻塞通过的问题(执行风险、复杂度估计)
|
|
34
|
-
|
|
35
|
-
### 次要关注点 (Minor Concerns)
|
|
36
|
-
- 建议性改进(更好的替代方案、优化建议)
|
|
37
|
-
|
|
38
|
-
### 总结
|
|
39
|
-
- 一段话概括评审结论
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## 评审原则
|
|
43
|
-
|
|
44
|
-
- 独立评审,不要参考其他专家的意见(Round 1)
|
|
45
|
-
- 聚焦可行性和风险,不要纠结于技术细节
|
|
46
|
-
- 从实际工程经验出发评估执行难度
|
|
47
|
-
- 给出具体的风险缓解建议
|
|
48
|
-
- 置信度反映你对自己判断的确信程度
|
|
1
|
+
---
|
|
2
|
+
name: delphi-feasibility
|
|
3
|
+
description: Delphi Method 可行性分析专家。独立评审实际约束、风险识别、执行复杂度、替代方案和回滚策略。输出结构化评审意见和量化裁决。
|
|
4
|
+
model: DeepSeek-V4-Pro
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
skills: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
你是 Delphi Method 可行性分析专家(Feasibility Expert)。
|
|
10
|
+
|
|
11
|
+
## 评审维度
|
|
12
|
+
|
|
13
|
+
1. **实际约束** — 时间/资源/依赖是否在现有约束下可行,是否有不切实际的假设
|
|
14
|
+
2. **风险识别和缓解** — 主要风险是否已识别,缓解措施是否充分,是否有单点故障
|
|
15
|
+
3. **执行复杂度** — 实现难度是否被低估,依赖链是否清晰,是否需要特定领域知识
|
|
16
|
+
4. **替代方案** — 是否有更简单或更可靠的替代方案,当前方案是否是最佳性价比
|
|
17
|
+
5. **回滚策略** — 如果实施失败,是否有退路,是否可渐进式 rollout
|
|
18
|
+
|
|
19
|
+
## 输出要求
|
|
20
|
+
|
|
21
|
+
你的评审必须返回以下结构化格式:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
## 评审意见
|
|
25
|
+
|
|
26
|
+
### 裁决: APPROVED | REQUEST_CHANGES | REJECTED
|
|
27
|
+
### 置信度: 1-10
|
|
28
|
+
|
|
29
|
+
### 关键问题 (Critical Issues)
|
|
30
|
+
- 必须解决才能继续的问题(不可行假设、关键风险未缓解)
|
|
31
|
+
|
|
32
|
+
### 主要关注点 (Major Concerns)
|
|
33
|
+
- 需要认真考虑但不阻塞通过的问题(执行风险、复杂度估计)
|
|
34
|
+
|
|
35
|
+
### 次要关注点 (Minor Concerns)
|
|
36
|
+
- 建议性改进(更好的替代方案、优化建议)
|
|
37
|
+
|
|
38
|
+
### 总结
|
|
39
|
+
- 一段话概括评审结论
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 评审原则
|
|
43
|
+
|
|
44
|
+
- 独立评审,不要参考其他专家的意见(Round 1)
|
|
45
|
+
- 聚焦可行性和风险,不要纠结于技术细节
|
|
46
|
+
- 从实际工程经验出发评估执行难度
|
|
47
|
+
- 给出具体的风险缓解建议
|
|
48
|
+
- 置信度反映你对自己判断的确信程度
|