@boyingliu01/xp-gate 0.7.0 → 0.7.1
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 +4 -9
- package/lib/__tests__/audit-log.test.ts +107 -0
- package/lib/__tests__/detect-deps.test.js +179 -42
- package/lib/__tests__/doctor.test.js +1 -0
- package/lib/__tests__/gate-audit.test.ts +59 -0
- package/lib/__tests__/init.test.js +15 -0
- package/lib/__tests__/install-skill.test.js +1 -45
- package/lib/__tests__/ui-detector.test.ts +122 -8
- package/lib/__tests__/ui-review.test.ts +119 -0
- package/lib/__tests__/uninstall.test.js +1 -0
- package/lib/detect-deps.js +178 -37
- package/lib/doctor.js +7 -9
- package/lib/gate-audit.ts +26 -42
- package/lib/init.js +42 -13
- package/lib/install-skill.js +20 -48
- package/lib/rollback.js +1 -16
- package/lib/shared-paths.js +30 -0
- package/lib/shared-utils.js +25 -0
- package/lib/ui-detector.ts +3 -3
- package/lib/ui-review.ts +58 -53
- package/lib/uninstall.js +8 -9
- package/package.json +1 -1
- package/plugins/claude-code/.claude-plugin/plugin.json +1 -1
- package/skills/delphi-review/SKILL.md +112 -77
- package/skills/ralph-loop/SKILL.md +165 -34
- package/skills/sprint-flow/SKILL.md +428 -105
- package/skills/sprint-flow/references/components/skill-invocations.md +1 -1
- package/skills/sprint-flow/references/components/tool-descriptions.md +1 -1
- package/skills/sprint-flow/references/force-levels.md +203 -0
- package/skills/sprint-flow/references/phase-1-plan.md +4 -4
- package/skills/sprint-flow/references/phase-minus-0-5-auto-estimate.md +20 -1
- package/skills/sprint-flow/templates/auto-estimate-output-template.md +7 -5
- package/skills/sprint-flow/templates/sprint-progress-template.md +151 -0
- package/skills/test-specification-alignment/SKILL.md +98 -24
- package/plugins/qoder/AGENTS.md +0 -93
- package/plugins/qoder/README.md +0 -87
- package/plugins/qoder/widgets/quality-report.html +0 -163
- package/plugins/qoder/widgets/sprint-dashboard.html +0 -172
- package/skills/delphi-review/references/qoder-multi-model.md +0 -191
- package/skills/sprint-flow/references/qoder-adaptation.md +0 -173
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
| Skill | 来源 | 触发条件 | 条件分支 |
|
|
24
24
|
|-------|------|---------|---------|
|
|
25
25
|
| `autoplan` | gstack | 进入 Phase 1 自动调用 | 输出 AUTO_APPROVED 或 NEEDS_REVIEW |
|
|
26
|
-
| `delphi-review` | xp-gate |
|
|
26
|
+
| `delphi-review` | xp-gate | Phase 1 强制调用;AUTO_APPROVED + 无 taste_decisions 使用 lightweight delphi-review | 必须产生 `.sprint-state/delphi-reviewed.json` 且 verdict=APPROVED |
|
|
27
27
|
| `to-issues` | xp-gate | delphi-review APPROVED 后 | 拆解为垂直切片 → slices-manifest.json |
|
|
28
28
|
|
|
29
29
|
### Phase 2: BUILD
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
### GITHOOKS-GATE (Phase 1→2 闸门)
|
|
29
29
|
|
|
30
30
|
- 执行时机: Phase 1 完全通过、准备进入 Phase 2 BUILD 前
|
|
31
|
-
- `githooks/verify.sh` 全部存在 →
|
|
31
|
+
- `githooks/verify.sh` 全部存在 → 进入 BUILD 入口(仍必须先执行 DELPHI-GATE)
|
|
32
32
|
- 缺失 → `githooks/install.sh` 安装(hooks + adapter 基础设施)
|
|
33
33
|
- **核心原则**: 没有质量门禁的代码不可进入 BUILD。**失败 → 不可编码。**
|
|
34
34
|
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Sprint Flow 执行级别定义
|
|
2
|
+
|
|
3
|
+
**执行时机**: Phase 0 THINK 之前,AUTO-ESTIMATE 完成后。
|
|
4
|
+
|
|
5
|
+
**目的**: 根据需求规模匹配适度评审流程,平衡质量保障与效率。
|
|
6
|
+
|
|
7
|
+
**核心原则**:
|
|
8
|
+
- 所有级别**必须经过 Delphi 评审**,不可跳过
|
|
9
|
+
- 轻量级采用**简化 Delphi**(2 专家、1 轮),仍需 2/2 批准
|
|
10
|
+
- 标准/复杂采用**完整 Delphi**(2-3 专家、多轮)
|
|
11
|
+
- 自动升级机制:当出现风险信号时强制升级级别
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 级别定义
|
|
16
|
+
|
|
17
|
+
| 级别 | 适用场景 | 专家数 | 最多轮数 | 通过条件 | 预计耗时 |
|
|
18
|
+
|------|---------|--------|---------|----------|---------|
|
|
19
|
+
| **轻量** | 小改动、局部修改、删除代码 | 2 | 1 | 2/2 批准 | 10-20 分钟 |
|
|
20
|
+
| **标准** | 常规功能开发、模块重构 | 2 | 2 | 2/2 批准 | 30-60 分钟 |
|
|
21
|
+
| **复杂** | 核心模块、跨模块变更、新增架构 | 3 | 3 | 3/3 批准 | 1-2 小时 |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Token 成本预算
|
|
26
|
+
|
|
27
|
+
| 级别 | delphi-review 调用 | 预计 Token 消耗 | 成本说明 |
|
|
28
|
+
|------|-------------------|--------------|---------|
|
|
29
|
+
| **轻量** | 1 次(2 专家、1 轮) | ~8,000 | 简化流程,单轮评审 |
|
|
30
|
+
| **标准** | 1-2 次(2 专家、1-2 轮) | ~15,000-25,000 | 可能需要 1 轮反馈 |
|
|
31
|
+
| **复杂** | 1-3 次(3 专家、1-3 轮) | ~30,000-60,000 | 多轮深度评审 |
|
|
32
|
+
|
|
33
|
+
> **成本计算依据**: 基于实际 Sprint 历史数据,假设每次 delphi-review 调用平均消耗 8,000-10,000 Token(含 3 位专家的输入输出)。
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 测试与验证要求
|
|
38
|
+
|
|
39
|
+
| 级别 | 单元测试 | 测试覆盖率 | 验证方式 |
|
|
40
|
+
|------|---------|-----------|---------|
|
|
41
|
+
| **轻量** | 修改处必须有测试 | ≥75% | 自动运行 + 人工抽查 |
|
|
42
|
+
| **标准** | 新增功能必须有测试 | ≥80% | 自动运行 + 人工复核 |
|
|
43
|
+
| **复杂** | 全链路测试 + 边界用例 | ≥85% | 自动运行 + Delphi 验证 |
|
|
44
|
+
|
|
45
|
+
**强制规则**:
|
|
46
|
+
- 轻量级修改**不可跳过测试**,至少添加回归测试
|
|
47
|
+
- 所有级别必须通过 `test-specification-alignment` 验证
|
|
48
|
+
- 未添加测试 → 自动升级至标准级别
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 自动升级机制
|
|
53
|
+
|
|
54
|
+
当出现以下任一情况时,**强制升级**至更高级别:
|
|
55
|
+
|
|
56
|
+
| 触发条件 | 原级别 | 升级至 | 说明 |
|
|
57
|
+
|---------|--------|--------|------|
|
|
58
|
+
| Delphi 评审出现 REQUEST_CHANGES | 轻量 | 标准 | 需要第二轮评审 |
|
|
59
|
+
| 专家意见分歧(1 票反对) | 轻量/标准 | 复杂 | 需要第 3 专家仲裁 |
|
|
60
|
+
| 涉及公共 API 变更 | 轻量 | 标准 | 影响外部调用方 |
|
|
61
|
+
| 修改文件数 > 5 或 LOC > 200 | 轻量 | 标准 | 改动规模超出轻量范围 |
|
|
62
|
+
| 存在循环依赖 | 轻量/标准 | 复杂 | 架构风险高 |
|
|
63
|
+
| 测试覆盖率 < 75% | 轻量 | 标准 | 质量不达标 |
|
|
64
|
+
| 修改核心模块(core/handlers) | 轻量/标准 | 复杂 | 关键路径 |
|
|
65
|
+
|
|
66
|
+
**升级流程**:
|
|
67
|
+
1. 自动检测触发条件
|
|
68
|
+
2. 输出升级警告:`[LEVEL_UPGRADE] 从 {原级别} 升级至 {新级别},原因:{触发条件}`
|
|
69
|
+
3. 保存升级记录到 `.sprint-state/level-upgrade-log.json`
|
|
70
|
+
4. 重新执行对应级别的评审流程
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 与 AUTO-ESTIMATE 的关系
|
|
75
|
+
|
|
76
|
+
AUTO-ESTIMATE 提供**初始级别建议**,Force Levels 定义**具体执行规则**:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
AUTO-ESTIMATE 输出 → Force Levels 执行 → 自动升级机制(如触发)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
| AUTO-ESTIMATE 指标 | 建议级别 | Force Levels 执行 |
|
|
83
|
+
|-------------------|---------|------------------|
|
|
84
|
+
| 引用计数 ≤ 3 + 跨模块 ≤ 1 | 轻量 | 2 专家、1 轮 Delphi |
|
|
85
|
+
| 引用计数 4-10 或 跨模块 2 | 标准 | 2 专家、最多 2 轮 Delphi |
|
|
86
|
+
| 引用计数 > 10 或 跨模块 ≥ 3 | 复杂 | 3 专家、最多 3 轮 Delphi |
|
|
87
|
+
| 存在循环依赖 | 强制复杂 | 3 专家、最多 3 轮 + 架构评审 |
|
|
88
|
+
|
|
89
|
+
**关键区别**:
|
|
90
|
+
- AUTO-ESTIMATE: **客观指标分析**(代码结构、引用计数)
|
|
91
|
+
- Force Levels: **执行规则定义**(评审流程、升级机制)
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 与 DELPHI-GATE 的关系
|
|
96
|
+
|
|
97
|
+
**DELPHI-GATE** 是 Phase 2 的**强制门禁**,检查 `.sprint-state/delphi-reviewed.json` 的 `verdict=APPROVED`。Force Levels 定义**产生该门禁文件的评审强度**:
|
|
98
|
+
|
|
99
|
+
| 场景 | DELPHI-GATE | Force Levels |
|
|
100
|
+
|------|------------|-------------|
|
|
101
|
+
| Phase 1 设计评审 | 3 专家、≥95% 共识、生成 specification.yaml | 不适用(设计阶段) |
|
|
102
|
+
| Phase 2 BUILD 入口 | **必须检查** `.sprint-state/delphi-reviewed.json` 中 `verdict=APPROVED` | 轻量/标准/复杂:通过对应强度的 delphi-review 生成该门禁文件 |
|
|
103
|
+
| 轻量级评审 | 生成 `delphi-reviewed.json`(2 专家、1 轮、2/2 批准) | 2 专家、1 轮、写入门禁文件 |
|
|
104
|
+
| 标准级评审 | 生成 `delphi-reviewed.json`(2 专家、最多 2 轮、2/2 批准) | 2 专家、最多 2 轮、写入门禁文件 |
|
|
105
|
+
| 复杂级评审 | 生成 `delphi-reviewed.json`(3 专家、最多 3 轮、3/3 批准) | 3 专家、最多 3 轮、写入门禁文件 |
|
|
106
|
+
| Phase 3 代码走查 | 再次检查 `delphi-reviewed.json` 或重新评审 | 复用 Force Levels 规则 |
|
|
107
|
+
|
|
108
|
+
**关键规则**:
|
|
109
|
+
- **DELPHI-GATE 永不跳过**:Phase 2 BUILD 入口必须检查 `.sprint-state/delphi-reviewed.json` 中 `verdict=APPROVED`
|
|
110
|
+
- **Force Levels 定义评审强度**:轻量/标准/复杂决定用 2 专家 1 轮还是 3 专家 3 轮来**产生**门禁文件
|
|
111
|
+
- **轻量级不是跳过评审**:而是简化流程(2 专家、1 轮),但仍需生成门禁文件
|
|
112
|
+
- **LIGHTWEIGHT ≠ ONE-EXPERT**: 1 专家违反 Delphi 核心原则,禁止
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 轻量级详细规则
|
|
117
|
+
|
|
118
|
+
**适用场景**:
|
|
119
|
+
- 删除已存在代码(如移除废弃模块)
|
|
120
|
+
- 小规模修改(≤ 5 个文件、≤ 200 行改动)
|
|
121
|
+
- 不涉及公共 API
|
|
122
|
+
- 无循环依赖
|
|
123
|
+
|
|
124
|
+
**执行流程**:
|
|
125
|
+
1. 2 位专家独立评审(DeepSeek-v4-pro + Kimi-K2.6)
|
|
126
|
+
2. 单轮评审,无需多轮迭代
|
|
127
|
+
3. **2/2 批准**才通过(不允许 1/2 批准)
|
|
128
|
+
4. 评审通过后写入 `.sprint-state/delphi-reviewed.json`
|
|
129
|
+
|
|
130
|
+
**输出文件** (`.sprint-state/delphi-reviewed.json`):
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"sprint_id": "sprint-2026-06-05-01",
|
|
134
|
+
"level": "轻量",
|
|
135
|
+
"delphi_review": {
|
|
136
|
+
"experts": ["deepseek-v4-pro", "kimi-k2.6"],
|
|
137
|
+
"rounds": 1,
|
|
138
|
+
"votes": {
|
|
139
|
+
"expert_a": "APPROVED",
|
|
140
|
+
"expert_b": "APPROVED"
|
|
141
|
+
},
|
|
142
|
+
"consensus": "2/2 APPROVED",
|
|
143
|
+
"timestamp": "2026-06-05T10:30:00Z"
|
|
144
|
+
},
|
|
145
|
+
"status": "passed"
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**强制升级条件**(轻量级触发):
|
|
150
|
+
- 任一专家 REQUEST_CHANGES → 升级至标准级
|
|
151
|
+
- 涉及公共 API → 升级至标准级
|
|
152
|
+
- 修改文件 > 5 或 LOC > 200 → 升级至标准级
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 标准级详细规则
|
|
157
|
+
|
|
158
|
+
**适用场景**:
|
|
159
|
+
- 常规功能开发
|
|
160
|
+
- 模块重构(不涉及架构变更)
|
|
161
|
+
- 中等规模改动(5-15 个文件、200-500 行改动)
|
|
162
|
+
|
|
163
|
+
**执行流程**:
|
|
164
|
+
1. 2 位专家独立评审(Round 1)
|
|
165
|
+
2. 如有 REQUEST_CHANGES,进入 Round 2(最多 2 轮)
|
|
166
|
+
3. **2/2 批准**才通过
|
|
167
|
+
4. 评审通过后写入 `.sprint-state/delphi-reviewed.json`
|
|
168
|
+
|
|
169
|
+
**升级至复杂级条件**:
|
|
170
|
+
- Round 2 仍有分歧(1 票反对)→ 升级至复杂级(第 3 专家仲裁)
|
|
171
|
+
- 涉及核心模块(core/handlers)→ 升级至复杂级
|
|
172
|
+
- 存在循环依赖 → 升级至复杂级
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 复杂级详细规则
|
|
177
|
+
|
|
178
|
+
**适用场景**:
|
|
179
|
+
- 核心模块开发
|
|
180
|
+
- 跨模块变更(≥ 3 个目录)
|
|
181
|
+
- 架构调整
|
|
182
|
+
- 公共 API 重大变更
|
|
183
|
+
|
|
184
|
+
**执行流程**:
|
|
185
|
+
1. 3 位专家独立评审(DeepSeek-v4-pro + Kimi-K2.6 + Qwen3.6-Plus)
|
|
186
|
+
2. 最多 3 轮评审(Round 1-3)
|
|
187
|
+
3. **3/3 批准**才通过
|
|
188
|
+
4. 评审通过后写入 `.sprint-state/delphi-reviewed.json`
|
|
189
|
+
|
|
190
|
+
**仲裁机制**:
|
|
191
|
+
- Round 2 仍有分歧 → 第 3 专家(Qwen3.6-Plus)加入仲裁
|
|
192
|
+
- Round 3 必须达成一致,否则 BLOCK 进入 Phase 2
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 参见
|
|
197
|
+
|
|
198
|
+
- [Phase -0.5: AUTO-ESTIMATE](../references/phase-minus-0-5-auto-estimate.md) — 规模评估与流程路由
|
|
199
|
+
- [Phase 0: THINK](../references/phase-0-think.md) — 需求探索与设计
|
|
200
|
+
- [Phase 1: PLAN](../references/phase-1-plan.md) — 计划与 Delphi 设计评审
|
|
201
|
+
- [Phase 2: BUILD](../references/phase-2-build.md) — 编码与 Ralph Loop
|
|
202
|
+
- [Phase 3: REVIEW](../references/phase-3-review.md) — 代码走查与验证
|
|
203
|
+
- [Delphi Review Skill](../../../../skills/delphi-review/SKILL.md) — 多专家共识评审规范
|
|
@@ -69,13 +69,13 @@ autoplan_result:
|
|
|
69
69
|
│ │
|
|
70
70
|
│ IF autoplan_result.verdict == "AUTO_APPROVED" │
|
|
71
71
|
│ AND autoplan_result.taste_decisions == [] │
|
|
72
|
-
│ →
|
|
73
|
-
│ → 场景: autoplan
|
|
72
|
+
│ → 调用 lightweight delphi-review(2 专家、1 轮、2/2 APPROVED) │
|
|
73
|
+
│ → 场景: autoplan 所有决策自动通过,无关键分歧,但仍需共识门禁 │
|
|
74
74
|
│ │
|
|
75
75
|
│ IF autoplan_result.verdict == "NEEDS_REVIEW" │
|
|
76
76
|
│ OR autoplan_result.taste_decisions.length > 0 │
|
|
77
77
|
│ → ⚠️ 暂停等待用户确认 taste_decisions │
|
|
78
|
-
│ →
|
|
78
|
+
│ → 用户确认后,调用标准 delphi-review │
|
|
79
79
|
│ → 场景: 存在关键决策分歧或 autoplan 未完全自动通过 │
|
|
80
80
|
│ │
|
|
81
81
|
└───────────────────────────────────────────────────────────────────┘
|
|
@@ -105,7 +105,7 @@ Decision 2: [决策描述]
|
|
|
105
105
|
|
|
106
106
|
---
|
|
107
107
|
|
|
108
|
-
### Step 2b: 调用 delphi-review
|
|
108
|
+
### Step 2b: 调用 delphi-review(强制)
|
|
109
109
|
|
|
110
110
|
```bash
|
|
111
111
|
skill(name="delphi-review", user_message="[设计文档 + taste_decisions 确认结果]")
|
|
@@ -182,10 +182,27 @@ find . -name "*{target}*.test.*" -o -name "*{target}*.spec.*" | grep -v node_mod
|
|
|
182
182
|
|
|
183
183
|
| 流程级别 | 路由 |
|
|
184
184
|
|---------|------|
|
|
185
|
-
| **轻量** | → Phase
|
|
185
|
+
| **轻量** | → Phase 0 THINK(reduced-intensity 流程,见 references/force-levels.md) |
|
|
186
186
|
| **标准** | → Phase 0 THINK(正常流程) |
|
|
187
187
|
| **复杂** | → Phase 0 THINK(完整流程 + 风险警告提示) |
|
|
188
188
|
|
|
189
|
+
**DELPHI-GATE invariant**: 所有流程级别(轻量/标准/复杂)的 Phase 2 BUILD 启动前,**必须**检查 `.sprint-state/delphi-reviewed.json` 的 verdict 为 `APPROVED`。未通过 delphi-review 直接路由到 BUILD 属于严重违规。
|
|
190
|
+
|
|
191
|
+
**轻量级的正确理解**: 轻量级意味着 reduced-intensity 的 delphi-review(**2 专家、1 轮、2/2 APPROVED、较短上下文**),**不是**跳过 delphi-review,**不是** 1 专家评审。见 references/force-levels.md 的轻量级流程定义。
|
|
192
|
+
|
|
193
|
+
**自动 escalation 规则**(检测到以下情况时,自动提升流程级别):
|
|
194
|
+
|
|
195
|
+
| 触发条件 | 原级别 | 提升级别 | 理由 |
|
|
196
|
+
|---------|--------|---------|------|
|
|
197
|
+
| 风险警告(循环依赖、Public API > 5) | 轻量 | 标准 | 技术风险需要标准流程 |
|
|
198
|
+
| 多位专家 disagreement 或 REQUEST_CHANGES | 轻量/标准 | 复杂 | 意见分歧需要更全面评审 |
|
|
199
|
+
| 涉及文件数 > 10 或 LOC > 500 | 轻量 | 标准 | 超出轻量级预算 |
|
|
200
|
+
| 修改公共 API(export 接口) | 轻量/标准 | 复杂 | API 变更影响范围广 |
|
|
201
|
+
| 检测到循环依赖 | 任何级别 | 复杂 | 架构风险强制复杂流程 |
|
|
202
|
+
| 相关测试文件缺失或覆盖率 < 80% | 轻量/标准 | 标准 | 需要补充测试 |
|
|
203
|
+
|
|
204
|
+
**跨参考**: 详见 references/force-levels.md 的各级别流程定义和强制规则。
|
|
205
|
+
|
|
189
206
|
---
|
|
190
207
|
|
|
191
208
|
## 特殊场景处理
|
|
@@ -199,6 +216,8 @@ git diff --stat HEAD 2>/dev/null # 如果有局部修改
|
|
|
199
216
|
|
|
200
217
|
**处理**: 如果预估改动 < 20 行且涉及 ≤ 2 个文件,自动判定为「轻量」并告知用户,不强制展示完整 AUTO-ESTIMATE 面板。
|
|
201
218
|
|
|
219
|
+
**注意**: 轻量级仍需要完整的 Sprint Flow 流程(包括 delphi-review),只是 reduced-intensity。见 references/force-levels.md 的轻量级定义。**不会**绕过 DELPHI-GATE 直接路由到 BUILD。
|
|
220
|
+
|
|
202
221
|
### 场景 2: 无法提取目标关键词
|
|
203
222
|
|
|
204
223
|
**处理**: 询问用户「无法自动识别目标模块,请指定要分析的关键词(函数名/类名/模块名):」
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
| `{circular_dep_status}` | 循环依赖状态 | ✅ 无 / ⚠️ 存在 (A ↔ B) |
|
|
42
42
|
| `{public_api_count}` | Public API 暴露数 | 5 |
|
|
43
43
|
| `{additional_metrics}` | 附加指标(可选行) | 测试文件:4 个 / 影响范围:3 层调用 |
|
|
44
|
-
| `{recommended_flow}` | 建议流程描述 | 轻量流程 (Phase
|
|
44
|
+
| `{recommended_flow}` | 建议流程描述 | 轻量流程 (Phase 0-3, reduced-intensity Delphi) |
|
|
45
45
|
| `{risk_warning}` | 风险警告(可选块) | ⚠️ 此操作涉及循环依赖… |
|
|
46
46
|
| 操作按钮 | 用户确认选项 | 接受建议 / 修改流程 / 取消 |
|
|
47
47
|
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
+-------------------------------------------------------------+
|
|
73
73
|
| 选择流程级别: |
|
|
74
74
|
| |
|
|
75
|
-
| [1] 轻量流程 —
|
|
76
|
-
| [2] 标准流程 — brainstorming + BUILD + REVIEW (Phase 0-4) |
|
|
77
|
-
| [3] 完整流程 — 完整 Sprint Flow (Phase 0-8)
|
|
75
|
+
| [1] 轻量流程 — minimal THINK + 简化 Delphi + BUILD/REVIEW (Phase 0-3) |
|
|
76
|
+
| [2] 标准流程 — brainstorming + Delphi + BUILD + REVIEW (Phase 0-4) |
|
|
77
|
+
| [3] 完整流程 — 完整 Sprint Flow (Phase 0-8) |
|
|
78
78
|
| |
|
|
79
79
|
| 修改原因(必填):____________________ |
|
|
80
80
|
| |
|
|
@@ -107,10 +107,12 @@
|
|
|
107
107
|
|
|
108
108
|
| 评估结果 | 路由 | 说明 |
|
|
109
109
|
|---------|------|------|
|
|
110
|
-
| **轻量** (引用 ≤3, 同模块,无循环依赖) | Phase
|
|
110
|
+
| **轻量** (引用 ≤3, 同模块,无循环依赖) | Phase 0-3(minimal THINK → 简化 Delphi 评审 → BUILD/REVIEW) | 低强度执行,仍需 DELPHI-GATE APPROVED |
|
|
111
111
|
| **标准** (引用 4-10, 跨 1-2 模块) | Phase 0-4(完整 THINK → BUILD → REVIEW) | 标准 sprint |
|
|
112
112
|
| **复杂** (引用 >10 或 循环依赖 或 跨 3+ 模块) | Phase 0-8(完整 sprint-flow) | 完整流程 + 风险警告 |
|
|
113
113
|
|
|
114
|
+
**所有流程路线均需在 Phase 2 前获得 delphi-review APPROVED verdict。**
|
|
115
|
+
|
|
114
116
|
## 学习闭环
|
|
115
117
|
|
|
116
118
|
当用户选择「修改流程」时,记录 override 数据:
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Sprint Progress Template
|
|
2
|
+
|
|
3
|
+
本模板定义了 Sprint 进度看板的标准显示格式。
|
|
4
|
+
Orchestrator 在每个 Phase 完成后、以及响应用户 `--status` 查询时,使用此模板渲染进度。
|
|
5
|
+
|
|
6
|
+
## 渲染规则
|
|
7
|
+
|
|
8
|
+
1. 从 `.sprint-state/sprint-state.json` 读取 `id`, `task_description`, `phase`, `status`, `started_at`, `phase_history`, `outputs`, `isolation`
|
|
9
|
+
2. 按下方模板渲染 ASCII 看板
|
|
10
|
+
3. 状态图标映射:✅ completed | 🔄 running | ⏸️ paused | ⬜ pending | ⏭️ skipped | ❌ failed
|
|
11
|
+
|
|
12
|
+
## 看板模板
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
+============================================================+
|
|
16
|
+
| SPRINT PROGRESS {sprint_id} |
|
|
17
|
+
+============================================================+
|
|
18
|
+
| 需求: {task_description} |
|
|
19
|
+
| 分支: {branch} |
|
|
20
|
+
| 状态: {overall_status} 启动: {started_at} |
|
|
21
|
+
+============================================================+
|
|
22
|
+
| |
|
|
23
|
+
| {icon_-1} Phase -1 ISOLATE {duration_-1} |
|
|
24
|
+
| {icon_-0.5} Phase -0.5 AUTO-ESTIMATE {duration_-0.5} |
|
|
25
|
+
| {icon_0} Phase 0 THINK {duration_0} |
|
|
26
|
+
| {icon_1} Phase 1 PLAN {duration_1} |
|
|
27
|
+
| {icon_2} Phase 2 BUILD {duration_2} |
|
|
28
|
+
| {icon_3} Phase 3 REVIEW {duration_3} |
|
|
29
|
+
| {icon_4} Phase 4 USER ACCEPT {duration_4} |
|
|
30
|
+
| {icon_5} Phase 5 FEEDBACK {duration_5} |
|
|
31
|
+
| {icon_6} Phase 6 SHIP {duration_6} |
|
|
32
|
+
| {icon_7} Phase 7 LAND {duration_7} |
|
|
33
|
+
| {icon_8} Phase 8 CLEANUP {duration_8} |
|
|
34
|
+
| |
|
|
35
|
+
| [{progress_bar}] {pct}% |
|
|
36
|
+
+============================================================+
|
|
37
|
+
| > 当前: Phase {current_phase} {current_phase_name} |
|
|
38
|
+
| 状态: {current_phase_status} |
|
|
39
|
+
| |
|
|
40
|
+
| 下一步: {next_action} |
|
|
41
|
+
| {next_action_detail} |
|
|
42
|
+
+============================================================+
|
|
43
|
+
| 输出物: |
|
|
44
|
+
| {output_list} |
|
|
45
|
+
+============================================================+
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 字段说明
|
|
49
|
+
|
|
50
|
+
| 字段 | 来源 | 说明 |
|
|
51
|
+
|------|------|------|
|
|
52
|
+
| `{sprint_id}` | `sprint-state.json → id` | Sprint 标识 |
|
|
53
|
+
| `{task_description}` | `sprint-state.json → task_description` | 需求描述(缺失时显示 "-") |
|
|
54
|
+
| `{branch}` | `sprint-state.json → isolation.branch` | 工作分支 |
|
|
55
|
+
| `{overall_status}` | `sprint-state.json → status` | running / paused / completed |
|
|
56
|
+
| `{started_at}` | `sprint-state.json → started_at` | Sprint 启动时间(格式化: YYYY-MM-DD HH:MM) |
|
|
57
|
+
| `{icon_N}` | `phase_history[N].status` | 状态图标(见上方映射) |
|
|
58
|
+
| `{duration_N}` | `phase_history[N].duration_seconds` | 耗时(见下方格式化规则) |
|
|
59
|
+
| `{current_phase}` | `sprint-state.json → phase` | 当前阶段编号 |
|
|
60
|
+
| `{current_phase_name}` | Phase 名称映射 | ISOLATE / AUTO-ESTIMATE / THINK 等 |
|
|
61
|
+
| `{current_phase_status}` | `phase_history` 中当前阶段的 status | running / paused / completed |
|
|
62
|
+
| `{next_action}` | 下方"下一步行动表" | 用户需要执行的操作 |
|
|
63
|
+
| `{next_action_detail}` | 操作细节 | 具体指令 |
|
|
64
|
+
| `{output_list}` | `sprint-state.json → outputs` | 已生成的输出物路径列表(每项一行) |
|
|
65
|
+
| `{progress_bar}` | 已完成阶段数 / 总阶段数 | 格式: `████▓░░░░░░` |
|
|
66
|
+
| `{pct}` | 完成百分比 | 整数 |
|
|
67
|
+
|
|
68
|
+
## 进度条生成规则
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
总阶段数 = 11(Phase -1, -0.5, 0, 1, 2, 3, 4, 5, 6, 7, 8)
|
|
72
|
+
已完成数 = phase_history 中 status == "completed" 的数量
|
|
73
|
+
每个阶段 = 1 个字符宽度
|
|
74
|
+
填充: 已完成 = █ | 当前 = ▓ | 待做 = ░ | 跳过 = ▒
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 下一步行动表
|
|
78
|
+
|
|
79
|
+
| 当前阶段 | 当前状态 | 下一步行动 | 行动细节 |
|
|
80
|
+
|---------|---------|-----------|---------|
|
|
81
|
+
| Phase -1 | completed | 确认环境 | 检查 worktree 路径,准备进入需求分析 |
|
|
82
|
+
| Phase -0.5 | completed | 确认评估 | 查看 AUTO-ESTIMATE 结果,选择流程级别 |
|
|
83
|
+
| Phase 0 | completed | 确认设计 | 审阅设计文档,确认后进入 Phase 1 |
|
|
84
|
+
| Phase 0 | paused | 审阅设计 | 设计文档等待您的 APPROVED 确认 |
|
|
85
|
+
| Phase 1 | completed | 确认评审 | delphi-review 已通过,检查 specification.yaml |
|
|
86
|
+
| Phase 1 | paused | 等待评审 | delphi-review 进行中或等待 taste_decisions 确认 |
|
|
87
|
+
| Phase 2 | completed | 审阅代码 | BUILD 完成,进入 Phase 3 REVIEW |
|
|
88
|
+
| Phase 2 | running | 等待构建 | ralph-loop 迭代中,无需操作 |
|
|
89
|
+
| Phase 3 | completed | 开始验收 | 进入 Phase 4 人工验收 |
|
|
90
|
+
| Phase 4 | completed | 确认反馈 | 验收完成,Phase 5 自动进行 |
|
|
91
|
+
| Phase 4 | paused | 执行验收 | 必须人工验收,请实际使用后确认 |
|
|
92
|
+
| Phase 5 | completed | 确认发布 | 反馈已收集,准备进入 Phase 6 SHIP |
|
|
93
|
+
| Phase 6 | completed | 确认合并 | PR 已创建,确认是否合并 |
|
|
94
|
+
| Phase 7 | completed | 确认清理 | 合并成功,准备清理 worktree |
|
|
95
|
+
| Phase 8 | completed | Sprint 完成 | 检查 Sprint Summary,如有 emergent issues 考虑 Sprint 2 |
|
|
96
|
+
| 任意 | failed | 处理错误 | 查看错误信息,决定修复或放弃 |
|
|
97
|
+
|
|
98
|
+
## 耗时格式化规则
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
< 60s → "{N}s"
|
|
102
|
+
< 60m → "{N}m"
|
|
103
|
+
< 24h → "{X}h {Y}m"
|
|
104
|
+
>= 24h → "{X}d {Y}h"
|
|
105
|
+
无数据 → "-"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 向后兼容
|
|
109
|
+
|
|
110
|
+
当 `sprint-state.json` 缺少以下字段时(旧版 sprint 创建的状态文件),渲染规则:
|
|
111
|
+
- `task_description` 缺失 → 显示 "-"
|
|
112
|
+
- `started_at` 缺失 → 显示 "-"
|
|
113
|
+
- `phase_history` 缺失 → 从 `phase` 字段推断:小于等于 `phase` 的阶段标记为 ✅,当前阶段标记为 🔄,其余标记为 ⬜;所有耗时显示 "-"
|
|
114
|
+
|
|
115
|
+
## 示例渲染
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
+============================================================+
|
|
119
|
+
| SPRINT PROGRESS sprint-2026-06-04-01 |
|
|
120
|
+
+============================================================+
|
|
121
|
+
| 需求: 为 sprint-flow 添加进度看板功能 |
|
|
122
|
+
| 分支: sprint/2026-06-04-01 |
|
|
123
|
+
| 状态: running 启动: 2026-06-04 19:25 |
|
|
124
|
+
+============================================================+
|
|
125
|
+
| |
|
|
126
|
+
| ✅ Phase -1 ISOLATE 3m |
|
|
127
|
+
| ✅ Phase -0.5 AUTO-ESTIMATE 1m |
|
|
128
|
+
| ✅ Phase 0 THINK 2m |
|
|
129
|
+
| ✅ Phase 1 PLAN 5m |
|
|
130
|
+
| 🔄 Phase 2 BUILD 12m |
|
|
131
|
+
| ⬜ Phase 3 REVIEW - |
|
|
132
|
+
| ⬜ Phase 4 USER ACCEPT - |
|
|
133
|
+
| ⬜ Phase 5 FEEDBACK - |
|
|
134
|
+
| ⬜ Phase 6 SHIP - |
|
|
135
|
+
| ⬜ Phase 7 LAND - |
|
|
136
|
+
| ⬜ Phase 8 CLEANUP - |
|
|
137
|
+
| |
|
|
138
|
+
| [████▓░░░░░░] 36% |
|
|
139
|
+
+============================================================+
|
|
140
|
+
| > 当前: Phase 2 BUILD |
|
|
141
|
+
| 状态: running |
|
|
142
|
+
| |
|
|
143
|
+
| 下一步: 等待构建完成 |
|
|
144
|
+
| ralph-loop 迭代中,完成后自动进入 Phase 3 REVIEW |
|
|
145
|
+
+============================================================+
|
|
146
|
+
| 输出物: |
|
|
147
|
+
| 设计文档: .sprint-state/phase-outputs/design-doc.md |
|
|
148
|
+
| 评审报告: .sprint-state/delphi-reviewed.json |
|
|
149
|
+
| 规格说明: .sprint-state/phase-outputs/specification.yaml |
|
|
150
|
+
+============================================================+
|
|
151
|
+
```
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: test-specification-alignment
|
|
3
|
-
description: "
|
|
3
|
+
description: "Use when asked to run tests, verify tests, align tests with specification.yaml, before BUILD verification, or before release/ship."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Test-Specification Alignment Engine
|
|
7
7
|
|
|
8
|
+
## Workflow Steps
|
|
9
|
+
|
|
10
|
+
1. **Load Phase 0** — Verify `specification.yaml` and `tests/` directory exist; BLOCK if missing with clear guidance to complete brainstorming → delphi-review → specification-generator flow first
|
|
11
|
+
2. **Phase 1 Alignment (Modify Allowed)** — Parse specification.yaml (YAML) + test files (AST); validate alignment rules; generate alignment report; optionally fix tests to align with requirements; require score ≥80% to proceed
|
|
12
|
+
3. **Coverage Mapping** — Map each REQ-* to at least one test case with `@test` annotation; map each AC-* to at least one assertion; verify test intent declarations (`@test`, `@intent`, `@covers` tags)
|
|
13
|
+
4. **Pre-Phase 2 Freeze** — Invoke `/freeze` skill to lock test directories (`tests/`, `test/`, `__tests__/`, `*.test.ts`, `*.spec.ts`, `*_test.py`, etc.); return confirmation before proceeding
|
|
14
|
+
5. **Phase 2 Execution (Frozen)** — Run all tests; Agent is BLOCKED from modifying/deleting/skipping tests; analyze failures into 4 categories: BUSINESS_CODE_ERROR, TEST_DATA_ERROR, SPECIFICATION_ERROR, ENVIRONMENT_ERROR; SPECIFICATION_ERROR requires ESCALATE_TO_HUMAN
|
|
15
|
+
6. **Failure Classification** — For each failing test, output classification in mandatory format with Type, Test, Root Cause, Action fields; if SPECIFICATION_ERROR detected, offer user options (A: fix spec → re-Phase 1, B: confirm spec → modify code, C: clarify ambiguity)
|
|
16
|
+
7. **JSON Report Output** — Generate alignment report as valid JSON with fields: `alignment_status` (PASS|FAIL|BLOCKED), `phase` (1|2), `score`, `misaligned_tests[]`, `anti_pattern_detected`, `errors[]`; Terminal State: ✅ ALL_TESTS_PASS
|
|
17
|
+
|
|
8
18
|
## 核心原则
|
|
9
19
|
|
|
10
20
|
**测试是系统的防护网,也是系统的使用手册。测试必须准确反映原始需求和设计方案。**
|
|
@@ -37,6 +47,89 @@ Alignment report MUST be output as valid JSON:
|
|
|
37
47
|
|
|
38
48
|
---
|
|
39
49
|
|
|
50
|
+
## Triggers
|
|
51
|
+
|
|
52
|
+
### Automatic Triggers
|
|
53
|
+
- BUILD (TDD + review) Round 1 after Driver outputs tests
|
|
54
|
+
- Gate 1 verification before proceeding
|
|
55
|
+
- gstack-ship release before deployment
|
|
56
|
+
|
|
57
|
+
### Manual Triggers
|
|
58
|
+
- `/test-specification-alignment` command
|
|
59
|
+
- `/verify-tests` command
|
|
60
|
+
- "run tests" phrase
|
|
61
|
+
- "verify tests" phrase
|
|
62
|
+
- before gstack-ship
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Scope
|
|
67
|
+
|
|
68
|
+
### IN Scope
|
|
69
|
+
- Validation of test alignment against `specification.yaml` (Requirements, User Stories, Acceptance Criteria)
|
|
70
|
+
- Phase 1: Test modification to improve alignment (add missing tests, fix annotations, correct intent)
|
|
71
|
+
- Phase 2: Test execution with frozen test files (no modifications allowed)
|
|
72
|
+
- Failure classification into BUSINESS_CODE_ERROR, TEST_DATA_ERROR, SPECIFICATION_ERROR, ENVIRONMENT_ERROR
|
|
73
|
+
- JSON report generation with alignment status, score, misaligned tests, and errors
|
|
74
|
+
|
|
75
|
+
### OUT Scope
|
|
76
|
+
- Modifying `specification.yaml` during Phase 2 (requires ESCALATE_TO_HUMAN)
|
|
77
|
+
- Skipping or deleting tests to make tests pass
|
|
78
|
+
- Modifying test assertions to force tests to pass
|
|
79
|
+
- Business logic implementation (handled by BUILD phase)
|
|
80
|
+
- Environment configuration issues (handled separately)
|
|
81
|
+
|
|
82
|
+
### Boundaries
|
|
83
|
+
- **Start**: After BUILD (TDD + review) Round 1 outputs tests
|
|
84
|
+
- **End**: Terminal State ✅ ALL_TESTS_PASS or ESCALATE_TO_HUMAN for specification issues
|
|
85
|
+
- **Inputs**: `specification.yaml`, `tests/` directory
|
|
86
|
+
- **Outputs**: Alignment report (JSON), test execution report, failure classification
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Examples
|
|
91
|
+
|
|
92
|
+
### Example 1: Normal Trigger (Should Execute)
|
|
93
|
+
**User Input**: "run tests for login feature" or `/test-specification-alignment`
|
|
94
|
+
|
|
95
|
+
**Expected Flow**:
|
|
96
|
+
1. Load Phase 0: Check `specification.yaml` exists → ✅ Found
|
|
97
|
+
2. Check `tests/` directory exists → ✅ Found
|
|
98
|
+
3. Phase 1: Parse spec and tests → Alignment score 85% → ✅ Pass threshold
|
|
99
|
+
4. Pre-Phase 2: Call `/freeze tests/` → ✅ Locked
|
|
100
|
+
5. Phase 2: Run tests → 12 passed, 0 failed → ✅ ALL_TESTS_PASS
|
|
101
|
+
6. Output JSON report with `alignment_status: "PASS"`, `phase: "2"`, `score: 85`
|
|
102
|
+
7. Call `/unfreeze tests/` → ✅ Unlocked
|
|
103
|
+
8. Terminal State: ✅ Test-specification-alignment complete
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### Example 2: Should NOT Trigger (Missing Specification)
|
|
108
|
+
**User Input**: "run tests" in a project without `specification.yaml`
|
|
109
|
+
|
|
110
|
+
**Expected Flow**:
|
|
111
|
+
1. Load Phase 0: Check `specification.yaml` exists → ❌ Not Found
|
|
112
|
+
2. BLOCK with message:
|
|
113
|
+
```
|
|
114
|
+
❌ BLOCKED: specification.yaml 不存在
|
|
115
|
+
|
|
116
|
+
要生成 specification.yaml,请先完成需求流程:
|
|
117
|
+
|
|
118
|
+
流程步骤:
|
|
119
|
+
1. brainstorming → 需求探索,生成设计文档
|
|
120
|
+
2. delphi-review → 需求评审 (多轮直到 APPROVED)
|
|
121
|
+
3. spec 自动生成 (从 APPROVED 设计文档提取 specification.yaml)
|
|
122
|
+
|
|
123
|
+
为什么必须这样?
|
|
124
|
+
- 在 delphi-review APPROVED 后生成,避免设计文档修改时 spec 也需重新生成
|
|
125
|
+
- 遵循"问题发现越早修复成本越低"原则
|
|
126
|
+
|
|
127
|
+
请先完成上述流程,然后再运行 test-specification-alignment。
|
|
128
|
+
```
|
|
129
|
+
3. Terminal State: ❌ BLOCKED_MISSING_SPECIFICATION
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
40
133
|
## 触发条件
|
|
41
134
|
|
|
42
135
|
### 自动触发
|
|
@@ -569,29 +662,6 @@ legacy_mode:
|
|
|
569
662
|
|
|
570
663
|
---
|
|
571
664
|
|
|
572
|
-
## Qoder 平台适配
|
|
573
|
-
|
|
574
|
-
### freeze 机制替代(替代 gstack/freeze skill)
|
|
575
|
-
|
|
576
|
-
在 Qoder 环境中,freeze/unfreeze 通过 sprint-flow 的 **Pre-Edit Gate** 替代:
|
|
577
|
-
- Phase 2 执行期间,orchestrator 禁止修改测试目录下的文件
|
|
578
|
-
- 此约束通过 SKILL.md 指令强制执行(非物理阻断)
|
|
579
|
-
- orchestrator 在每次文件编辑前检查:如果目标文件位于测试目录且当前处于 Phase 2 freeze 状态,则 **BLOCK**
|
|
580
|
-
|
|
581
|
-
### Agent 配置适配
|
|
582
|
-
|
|
583
|
-
| 原配置 | Qoder 替代 | 说明 |
|
|
584
|
-
|---------|------------|------|
|
|
585
|
-
| Phase 1 Agent (Qwen3.5-Plus) | **orchestrator 直接执行** | YAML 解析 + AST 解析由 orchestrator 内联完成 |
|
|
586
|
-
| Phase 2 Agent (GLM-5) | **orchestrator 直接执行** | 测试执行由 orchestrator 通过 Bash 工具完成 |
|
|
587
|
-
|
|
588
|
-
### Qoder 集成点
|
|
589
|
-
|
|
590
|
-
- Phase 3 REVIEW 完成后,使用 genui `show_widget` 展示对齐报告摘要
|
|
591
|
-
- 对齐分数记录通过 `UpdateMemory` 持久化(development_test_specification 类型)
|
|
592
|
-
|
|
593
|
-
---
|
|
594
|
-
|
|
595
665
|
## Anti-Patterns
|
|
596
666
|
|
|
597
667
|
| 错误 | 正确 |
|
|
@@ -611,6 +681,10 @@ legacy_mode:
|
|
|
611
681
|
|------|------|------|
|
|
612
682
|
| V1.0 | 2026-04-06 | 初始设计 |
|
|
613
683
|
| V2.0 | 2026-04-06 | Delphi Review 共识版本 |
|
|
684
|
+
| V2.1 | 2026-06-02 | Added parser-friendly sections: Workflow Steps (7 steps), Triggers (5+ phrases), Scope (IN/OUT/Boundaries), Examples (2 scenarios) |
|
|
685
|
+
|
|
686
|
+
---
|
|
687
|
+
|
|
614
688
|
## Output Format (MANDATORY)
|
|
615
689
|
Alignment report MUST be output as valid JSON:
|
|
616
690
|
```json
|