@boyingliu01/xp-gate 0.19.1 → 0.19.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/gate-10.sh +105 -0
- package/hooks/pre-commit +24 -5
- package/lib/__tests__/npm-package.test.js +25 -0
- package/lib/mattpocock-license-verdict.json +1 -1
- package/mock-policy/AGENTS.md +3 -3
- package/mutation/AGENTS.md +3 -3
- package/package.json +2 -1
- package/plugins/claude-code/.claude-plugin/plugin.json +2 -2
- package/plugins/claude-code/skills/delphi-review/AGENTS.md +3 -3
- 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/dsh/package.json +1 -1
- package/plugins/dsh/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/dsh/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/dsh/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/sprint-flow/AGENTS.md +3 -3
- package/plugins/opencode/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/qoder/plugin.json +2 -2
- package/plugins/qoder/skills/admin-template-guidelines/SKILL.md +6 -797
- package/plugins/qoder/skills/admin-template-guidelines/references/rule-1.md +91 -0
- package/plugins/qoder/skills/admin-template-guidelines/references/rule-2.md +155 -0
- package/plugins/qoder/skills/admin-template-guidelines/references/rule-3.md +70 -0
- package/plugins/qoder/skills/admin-template-guidelines/references/rule-4.md +154 -0
- package/plugins/qoder/skills/admin-template-guidelines/references/rule-5.md +126 -0
- package/plugins/qoder/skills/admin-template-guidelines/references/rule-6.md +180 -0
- package/plugins/qoder/skills/batch-grill-me/SKILL.md +15 -0
- package/plugins/qoder/skills/clipboard-vision/describe-clipboard.ps1 +115 -0
- package/plugins/qoder/skills/clipboard-vision/describe-clipboard.sh +161 -0
- package/plugins/qoder/skills/delphi-review/.delphi-config.json.example +61 -28
- package/plugins/qoder/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/qoder/skills/delphi-review/INSTALL.md +97 -98
- package/plugins/qoder/skills/delphi-review/SKILL.md +77 -54
- package/plugins/qoder/skills/delphi-review/hooks.md +19 -0
- package/plugins/qoder/skills/delphi-review/opencode.json.delphi.example +6 -10
- package/plugins/qoder/skills/delphi-review/references/orchestrator-dispatch.md +64 -0
- package/plugins/qoder/skills/delphi-review/references/requirements.md +402 -0
- package/plugins/qoder/skills/delphi-review/references/round-templates.md +134 -0
- package/plugins/qoder/skills/delphi-review/scripts/verify-consensus.sh +43 -0
- package/plugins/qoder/skills/delphi-review/tools.md +29 -0
- package/plugins/qoder/skills/domain-modeling/ADR-FORMAT.md +64 -0
- package/plugins/qoder/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/plugins/qoder/skills/domain-modeling/SKILL.md +74 -0
- package/plugins/qoder/skills/grill-with-docs/SKILL.md +7 -0
- package/plugins/qoder/skills/grilling/SKILL.md +12 -0
- package/plugins/qoder/skills/ralph-loop/SKILL.md +87 -428
- package/plugins/qoder/skills/ralph-loop/references/components.md +113 -0
- package/plugins/qoder/skills/ralph-loop/references/workflow-details.md +99 -0
- package/plugins/qoder/skills/sprint-flow/AGENTS.md +4 -4
- package/plugins/qoder/skills/sprint-flow/SKILL.md +255 -454
- package/plugins/qoder/skills/sprint-flow/__tests__/sprint-flow.test.cjs +457 -0
- package/plugins/qoder/skills/sprint-flow/hooks.md +18 -0
- package/plugins/qoder/skills/sprint-flow/references/components/memory.md +1 -1
- package/plugins/qoder/skills/sprint-flow/references/components/middleware.md +1 -1
- package/plugins/qoder/skills/sprint-flow/references/components/skill-invocations.md +21 -20
- package/plugins/qoder/skills/sprint-flow/references/components/tool-descriptions.md +22 -23
- package/plugins/qoder/skills/sprint-flow/references/force-levels.md +0 -1
- package/plugins/qoder/skills/sprint-flow/references/orchestration-rules.md +34 -27
- package/plugins/qoder/skills/sprint-flow/references/phase-1-prep.md +1 -1
- package/plugins/qoder/skills/sprint-flow/references/phase-2-design.md +157 -120
- package/plugins/qoder/skills/sprint-flow/references/phase-3-build.md +203 -2
- package/plugins/qoder/skills/sprint-flow/references/phase-4-verify.md +107 -34
- package/plugins/qoder/skills/sprint-flow/references/phase-5-ship.md +194 -12
- package/plugins/qoder/skills/sprint-flow/references/phase-6-close.md +139 -7
- package/plugins/qoder/skills/sprint-flow/references/phase-overview.md +486 -0
- package/plugins/qoder/skills/sprint-flow/scripts/verify-sprint-state.sh +38 -0
- package/plugins/qoder/skills/sprint-flow/tools.md +29 -0
- package/plugins/qoder/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/qoder/skills/test-specification-alignment/SKILL.md +104 -601
- package/plugins/qoder/skills/to-issues/SKILL.md +1 -1
- package/principles/AGENTS.md +3 -3
- package/skills/delphi-review/AGENTS.md +3 -3
- package/skills/sprint-flow/AGENTS.md +3 -3
- package/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/qoder/skills/clipboard-vision/clipboard-vision/SKILL.md +0 -47
- package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision-distribution.test.cjs +0 -65
- package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision-security.test.cjs +0 -185
- package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision.Tests.ps1 +0 -138
- package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision.test.cjs +0 -273
- package/plugins/qoder/skills/clipboard-vision/clipboard-vision/scripts/clipboard-vision.ps1 +0 -86
- package/plugins/qoder/skills/clipboard-vision/clipboard-vision/scripts/clipboard-vision.sh +0 -137
- package/plugins/qoder/skills/ralph-loop/references/components/memory.md +0 -55
- package/plugins/qoder/skills/ralph-loop/references/components/middleware.md +0 -54
- package/plugins/qoder/skills/ralph-loop/references/components/skill-invocations.md +0 -39
- package/plugins/qoder/skills/ralph-loop/references/components/system-prompt.md +0 -24
- package/plugins/qoder/skills/ralph-loop/references/components/tool-descriptions.md +0 -32
|
@@ -29,30 +29,32 @@
|
|
|
29
29
|
| Phase | 名称 | Subagent? | Category | load_skills | 执行者 |
|
|
30
30
|
|-------|------|:---------:|----------|-------------|--------|
|
|
31
31
|
| 1/6 | PREP | ❌ | Bash(直接执行) | 无 | orchestrator |
|
|
32
|
-
| 2/6 | DESIGN | ❌ | orchestrator(直接执行) | `["
|
|
32
|
+
| 2/6 | DESIGN | ❌ | orchestrator(直接执行) | `["grill-with-docs", "batch-grill-me", "delphi-review", "to-issues"]` | orchestrator |
|
|
33
33
|
| 3/6 | BUILD | ✅ | ralph-loop | `["test-driven-development"]` | subagent |
|
|
34
|
-
| 4/6 | VERIFY | ❌ | orchestrator(直接执行) | `["delphi-review", "test-specification-alignment"
|
|
35
|
-
| 5/6 | SHIP | ❌ | orchestrator(直接执行) |
|
|
34
|
+
| 4/6 | VERIFY | ❌ | orchestrator(直接执行) | `["delphi-review", "test-specification-alignment"]` | orchestrator |
|
|
35
|
+
| 5/6 | SHIP | ❌ | orchestrator(直接执行) | 无(原生步骤) | orchestrator |
|
|
36
36
|
| 6/6 | CLOSE | ❌ | **强制人工 (UAT)** + Bash (CLEANUP) | 无 | 用户 + orchestrator |
|
|
37
37
|
|
|
38
38
|
**⚠️ 交互式 skill 必须由 orchestrator 直接执行(不可 dispatch 到 subagent)**:
|
|
39
39
|
|
|
40
40
|
| Phase | Skill | 为什么不能在 subagent 中执行 |
|
|
41
41
|
|-------|-------|---------------------------|
|
|
42
|
-
| 2/6 | `
|
|
43
|
-
| 2/6 | `
|
|
42
|
+
| 2/6 | `grill-with-docs` | 需要与用户对话确认需求、提出澄清问题。Subagent 是 fire-and-forget 模式,无法暂停等待用户输入(Issue #217) |
|
|
43
|
+
| 2/6 | `batch-grill-me` | 批量决策节点暂停等待用户确认。必须由 orchestrator 直接执行 |
|
|
44
44
|
| 2/6 | `delphi-review` | design 模式需等待 verdict APPROVED;非 APPROVED 时需用户确认是否接受分歧方案(Issue #249) |
|
|
45
45
|
| 2/6 | `to-issues` | Step 6 "向用户确认" — 展示拆分结果,等待用户批准后才生成 slices-manifest.json |
|
|
46
46
|
| 4/6 | `delphi-review --mode code-walkthrough` | Code walkthrough 非 APPROVED 时需暂停等待用户处理 Critical Issues(Issue #249) |
|
|
47
|
-
| 5/6 |
|
|
48
|
-
| 5/6 |
|
|
49
|
-
| 5/6 |
|
|
47
|
+
| 5/6 | 分支完成决策 | 4 选项菜单 (merge/PR/keep/discard) 需要用户选择;Option 4 (discard) 要求 typed confirmation |
|
|
48
|
+
| 5/6 | native ship | PR 创建前需要用户确认 |
|
|
49
|
+
| 5/6 | native land | Merge 确认、rollback 决策 — 均为用户交互点 |
|
|
50
50
|
|
|
51
51
|
**Phase 2/6 DESIGN 执行模式(全部 orchestrator 直接执行)**:
|
|
52
|
-
1. **Orchestrator 直接执行
|
|
53
|
-
2. **Orchestrator
|
|
54
|
-
3. **Orchestrator
|
|
55
|
-
4. **Orchestrator 直接执行
|
|
52
|
+
1. **Orchestrator 直接执行 grill-with-docs**:`skill(name="grill-with-docs")` → 访谈 + CONTEXT.md/ADR
|
|
53
|
+
2. **Orchestrator 调用 R1 Agent skill**:`/delphi-review --mode requirements`,分别执行 architecture、technical、feasibility 三个 per-expert runner → requirements-reviewed.json
|
|
54
|
+
3. **Orchestrator 生成设计文档** → 等待用户 APPROVED
|
|
55
|
+
4. **Orchestrator 直接执行 batch-grill-me**:`skill(name="batch-grill-me")` → 批量决策确认
|
|
56
|
+
5. **Orchestrator 直接执行 R2 delphi-review**:`skill(name="delphi-review")` → 等待 APPROVED
|
|
57
|
+
6. **Orchestrator 直接执行 to-issues**:`skill(name="to-issues")` → 等待用户确认 Issue 拆分
|
|
56
58
|
|
|
57
59
|
**上下文隔离原则**:
|
|
58
60
|
- 每个 Subagent 在**独立 session** 中启动,不继承 orchestrator 的对话历史
|
|
@@ -89,24 +91,29 @@
|
|
|
89
91
|
- 格式:YAML frontmatter + Markdown body(body ≤ 50 行)
|
|
90
92
|
- 大小限制:≤ 40,000 字符(≈ 10,000 tokens)
|
|
91
93
|
|
|
92
|
-
2.
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
2. **调用 phase-transition CLI**(替代手动更新 sprint-state.json + 手动渲染看板):
|
|
95
|
+
```
|
|
96
|
+
npx xp-gate phase-transition <phase> <status> --render [--outputs '<json>']
|
|
97
|
+
```
|
|
98
|
+
- Phase 开始时:`npx xp-gate phase-transition <N> in_progress --render`
|
|
99
|
+
- Phase 完成时:`npx xp-gate phase-transition <N> completed --render --outputs '{"key":"value"}'`
|
|
100
|
+
- Phase 跳过时:`npx xp-gate phase-transition <N> skipped --render`
|
|
101
|
+
- CLI 自动完成:更新 `sprint-state.json`(phase, phase_history, outputs)+ 渲染 ASCII 看板
|
|
102
|
+
- 看板规则:已完成 ✅ + 耗时,当前 🔄,待做 ⬜,跳过 ⏭️,失败 ❌
|
|
103
|
+
- 进度条:`[████▓░░░░░░] {pct}%`
|
|
104
|
+
- **禁止**手动写入 `sprint-state.json` 或手动调用 `render-sprint-progress.cjs`(已废弃)
|
|
99
105
|
|
|
100
106
|
3. **等待用户确认 checkpoint**(如适用)
|
|
101
107
|
|
|
102
|
-
4.
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
108
|
+
4. **Phase 6 CLOSE 完成后运行 sprint-audit**(自动提醒,Layer 1.5 触发):
|
|
109
|
+
```
|
|
110
|
+
npx xp-gate sprint-audit
|
|
111
|
+
```
|
|
112
|
+
- 检查 phase 覆盖度、时间记录、输出物记录、状态一致性
|
|
113
|
+
- 输出人类可读报告或 JSON(`--json`)
|
|
114
|
+
- 报告写入 `.sprint-state/audit-report.json`(最新覆盖)
|
|
115
|
+
- Verdict: PASS / PASS_WITH_WARNINGS / FAIL / SKIP
|
|
116
|
+
- `phase-transition` CLI 在 Phase 6 completed 时自动输出提醒,无需额外指令
|
|
110
117
|
|
|
111
118
|
### Background Task Resume Protocol (MANDATORY — Issue #248)
|
|
112
119
|
|
|
@@ -216,7 +216,7 @@ find . -name "*{target}*.test.*" -o -name "*{target}*.spec.*" | grep -v node_mod
|
|
|
216
216
|
|
|
217
217
|
**DELPHI-GATE invariant**: 所有流程级别(轻量/标准/复杂)的 Phase 3/6 BUILD 启动前,**必须**检查 `.sprint-state/delphi-reviewed.json` 的 verdict 为 `APPROVED`。未通过 delphi-review 直接路由到 BUILD 属于严重违规。
|
|
218
218
|
|
|
219
|
-
**轻量级的正确理解**:
|
|
219
|
+
**轻量级的正确理解**: 轻量级意味着 reduced-intensity 的 delphi-review(**3 专家、最多 5 轮、≥90% 聚合共识、较短上下文**),**不是**跳过 delphi-review,**不是**减少专家或模型执行。见 references/force-levels.md 的轻量级流程定义。
|
|
220
220
|
|
|
221
221
|
**自动 escalation 规则**(检测到以下情况时,自动提升流程级别):
|
|
222
222
|
|
|
@@ -1,197 +1,222 @@
|
|
|
1
|
-
# Phase 2/6: DESIGN(设计 — 需求探索 +
|
|
1
|
+
# Phase 2/6: DESIGN(设计 — 需求探索 + 双点评审)
|
|
2
2
|
|
|
3
3
|
**执行时机**: Phase 1/6 PREP 完成后、Phase 3/6 BUILD 之前。
|
|
4
4
|
**对应旧模型**: Phase 0 THINK + Phase 1 PLAN
|
|
5
5
|
|
|
6
6
|
## 目标
|
|
7
7
|
|
|
8
|
-
使用
|
|
8
|
+
使用 grill-with-docs 进行结构化需求探索(含 CONTEXT.md/ADR 沉淀),经 R1 需求评审验证需求完整性,输出经用户批准的设计文档。然后通过 batch-grill-me 批量前置决策 + R2 delphi-review 达成 ≥90% 共识,生成 specification.yaml。
|
|
9
9
|
|
|
10
|
+
**新链(v0.18.0+,零外部依赖,双点评审)**:
|
|
10
11
|
```
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
grill-with-docs → R1 需求评审(轻量) → 原生设计文档+APPROVAL门 → batch-grill-me → R2 delphi-review(设计维度) → to-issues
|
|
13
|
+
↓ ↓ #368 ↓ HARD-GATE ↓ ↓ HARD-GATE
|
|
14
|
+
CONTEXT.md+ADR 需求完整性/AC覆盖 用户审批设计文档 批量前置决策 ≥90% 共识
|
|
14
15
|
```
|
|
15
16
|
|
|
16
17
|
---
|
|
17
18
|
|
|
18
|
-
## Part A: THINK
|
|
19
|
+
## Part A: THINK(需求探索 + 需求评审)
|
|
19
20
|
|
|
20
|
-
###
|
|
21
|
+
### Step 0: CONTEXT.md 预检(v0.14.9+ — Issue #322)
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
- 可选补充:`office-hours` (gstack) — 当用户需求非常模糊、需要先验证产品方向时
|
|
24
|
-
|
|
25
|
-
**关键变更(ISSUE30)**: 从 `office-hours` 切换到 `brainstorming`,原因:
|
|
26
|
-
- brainstorming 有 **HARD-GATE**(设计未批准 → 不可进入实现),防止 "觉得已经理解了就直接开始写代码"
|
|
27
|
-
- brainstorming 输出结构化设计文档,可直接作为 Phase 2/6 Part B PLAN 的输入
|
|
28
|
-
- office-hours 的 YC 六问适合新产品方向验证,brainstorming 更适合"具体功能实现前设计"的场景
|
|
29
|
-
|
|
30
|
-
### HARD-GATE 机制
|
|
23
|
+
在进入 grill 访谈前,检查 `CONTEXT.md` 是否已存在:
|
|
31
24
|
|
|
32
25
|
```
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
IF CONTEXT.md 存在于项目根目录:
|
|
27
|
+
→ 读取已有设计上下文
|
|
28
|
+
→ SKIP grill-with-docs 访谈(设计上下文已存在,避免重复探索)
|
|
29
|
+
→ ⚠️ R1 需求评审仍执行(Round 1 修订:CONTEXT.md 可能陈旧,快速路径同样需要需求评审)
|
|
30
|
+
→ 评审对象为 CONTEXT.md + 本次需求陈述
|
|
31
|
+
→ 输出: "[sprint-flow] CONTEXT.md 已存在,跳过需求访谈,进入 R1 需求评审"
|
|
32
|
+
ELSE:
|
|
33
|
+
→ 继续执行 Step 1(结构化需求探索)
|
|
35
34
|
```
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
1. **Explore project context** — 检查文件、文档、最近 commits
|
|
40
|
-
2. **Ask clarifying questions** — 一次一个,理解目的/约束/成功标准
|
|
41
|
-
3. **Propose approaches** — 2-3 个方案,含 trade-offs 和建议
|
|
42
|
-
4. **Present design** — 分节展示,每节获得用户批准
|
|
43
|
-
5. **Write design doc** — 保存到 `docs/plans/YYYY-MM-DD-<topic>-design.md`
|
|
44
|
-
6. **Transition to R1** — brainstorming 完成后先执行 requirements mode,不直接进入实现
|
|
36
|
+
**CONTEXT.md 预检路由表**:
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
| CONTEXT.md 状态 | grill-with-docs | R1 需求评审 | 输入到 Part B | 说明 |
|
|
39
|
+
|----------------|-----------------|-------------|---------------|------|
|
|
40
|
+
| 不存在 | ✅ 执行 | ✅ 执行 | grill 输出 + R1 结论 | 标准路径 |
|
|
41
|
+
| 存在 | ❌ SKIP | ✅ 执行 | 已有 CONTEXT.md + R1 结论 | 快速路径 (Issue #322) |
|
|
49
42
|
|
|
50
|
-
###
|
|
43
|
+
### Step 1: 调用 grill-with-docs(需求访谈)
|
|
51
44
|
|
|
52
|
-
|
|
45
|
+
**仅当 CONTEXT.md 不存在时执行。**
|
|
53
46
|
|
|
54
47
|
```
|
|
55
|
-
skill(name="
|
|
48
|
+
skill(name="grill-with-docs", user_message="[需求描述]")
|
|
56
49
|
```
|
|
57
50
|
|
|
58
|
-
|
|
51
|
+
grill-with-docs 执行:
|
|
52
|
+
1. **逐个追问决策树** — 每题附推荐答案;事实自行探查,决策留给用户
|
|
53
|
+
2. **同步维护 CONTEXT.md** — 项目上下文沉淀(`domain-modeling` 内置)
|
|
54
|
+
3. **同步维护 ADR** — `docs/adr/ADR-NNNN-*.md` 架构决策记录
|
|
55
|
+
4. **达成共享理解** — 需求边界、用户场景、验收标准清晰化
|
|
59
56
|
|
|
60
|
-
|
|
61
|
-
⚠️ HARD-GATE: 设计未 APPROVED → 不可进入 Part B
|
|
57
|
+
### Step 2: R1 需求评审(#368 恢复的第一点评审)
|
|
62
58
|
|
|
63
|
-
|
|
59
|
+
grill 访谈达成共享理解后(或 CONTEXT.md 快速路径下读取已有上下文后)、设计文档生成前,调用需求评审:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
/delphi-review --mode requirements
|
|
64
63
|
```
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
这是 Agent skill 调用,不是 `xp-gate` npm CLI 子命令。Skill orchestrator 必须分别调用 per-expert runner 三次,每次保留 `--expert <architecture|technical|feasibility> --mode requirements`,再聚合三份结果;禁止用一个 runner 进程执行全部模型。
|
|
67
66
|
|
|
68
|
-
|
|
67
|
+
**评审配置**:
|
|
68
|
+
- 复用现有 3 专家(architecture/feasibility/technical),`--mode requirements` 切换评审焦点提示词
|
|
69
|
+
- 所有路径固定使用 3 专家,Round 1 独立执行并验证 distinct model IDs,最多 5 轮
|
|
70
|
+
- force level 只调整上下文深度与迭代预算;所有路径都执行 R1,不减少专家数
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
**评审焦点**:
|
|
73
|
+
- 用户场景遗漏
|
|
74
|
+
- 验收标准覆盖度与可测试性
|
|
75
|
+
- 用户画像清晰度
|
|
76
|
+
- 需求边界
|
|
71
77
|
|
|
72
|
-
|
|
73
|
-
skill(name="delphi-review", user_message="--mode requirements [需求陈述 + brainstorming 设计上下文]")
|
|
74
|
-
```
|
|
78
|
+
**阻塞语义(程序化)**:
|
|
75
79
|
|
|
76
|
-
-
|
|
77
|
-
- 每个 Custom Agent 调用都使用 requirements mode;三次独立执行后由 skill orchestrator 聚合,禁止单进程执行全部模型
|
|
78
|
-
- 每份成功结果必须包含 `role`、`verdict: APPROVED`、`result_type: delphi_expert_result` 和非空 trimmed `requested_model`
|
|
79
|
-
- 三个角色必须恰好各出现一次,三个 trimmed `requested_model` 必须 distinct
|
|
80
|
-
- 聚合 `consensus_ratio` 必须是 `0.90..1`;任一条件失败则 BLOCK 并继续需求澄清
|
|
81
|
-
- APPROVED evidence 写入 `.sprint-state/phase-outputs/requirements-reviewed.json`,包含非空 `requirements_hash` 与精确 `git rev-parse HEAD`
|
|
82
|
-
- 无法解析 HEAD 时 BLOCK;不得使用 `unknown` 作为可验证身份
|
|
80
|
+
输出 `.sprint-state/phase-outputs/requirements-reviewed.json`:
|
|
83
81
|
|
|
84
82
|
```json
|
|
85
83
|
{
|
|
86
|
-
"verdict": "APPROVED",
|
|
87
|
-
"timestamp": "
|
|
84
|
+
"verdict": "APPROVED | GAPS_FOUND",
|
|
85
|
+
"timestamp": "<ISO 8601>",
|
|
88
86
|
"requirements_statement": "<被评审的原始需求陈述>",
|
|
89
87
|
"context_file_used": "CONTEXT.md | null",
|
|
90
|
-
"requirements_hash": "<SHA-256 of requirements_statement + context exact UTF-8 content if used + timestamp YYYY-MM-DD>",
|
|
91
|
-
"head_commit": "<
|
|
92
|
-
"consensus_ratio": 0
|
|
88
|
+
"requirements_hash": "<SHA-256 of requirements_statement + context file exact UTF-8 content if used + timestamp YYYY-MM-DD>",
|
|
89
|
+
"head_commit": "<git rev-parse HEAD>",
|
|
90
|
+
"consensus_ratio": 1.0,
|
|
93
91
|
"expert_verdicts": [
|
|
94
92
|
{ "role": "architecture", "verdict": "APPROVED", "result_type": "delphi_expert_result", "requested_model": "provider/model-a" },
|
|
95
93
|
{ "role": "technical", "verdict": "APPROVED", "result_type": "delphi_expert_result", "requested_model": "provider/model-b" },
|
|
96
94
|
{ "role": "feasibility", "verdict": "APPROVED", "result_type": "delphi_expert_result", "requested_model": "provider/model-c" }
|
|
97
|
-
]
|
|
95
|
+
],
|
|
96
|
+
"rounds": 1,
|
|
97
|
+
"gaps": []
|
|
98
98
|
}
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
**GAPS_FOUND 处理**:
|
|
102
|
+
- 回到 Step 1 补充访谈(或补充 CONTEXT.md 内容)
|
|
103
|
+
- 最多 5 轮循环后升级给用户决策
|
|
104
|
+
|
|
105
|
+
**程序化校验**:
|
|
106
|
+
- `phase-transition 2 completed` 校验 schema-v2 必填字段、`verdict=APPROVED`、三份专家证据、`consensus_ratio`、当前 HEAD,并从需求陈述、可选 context 文件和 timestamp 日期重新计算 `requirements_hash`
|
|
107
|
+
- 不匹配 → BLOCK(防陈旧绑定)
|
|
108
|
+
|
|
109
|
+
### Step 3: 原生设计文档生成
|
|
102
110
|
|
|
103
|
-
|
|
111
|
+
orchestrator 基于访谈记录 + CONTEXT.md + R1 评审结论生成设计文档:
|
|
104
112
|
|
|
105
|
-
|
|
113
|
+
**路径**: `docs/plans/YYYY-MM-DD-<topic>-design.md`
|
|
114
|
+
|
|
115
|
+
**内容结构**:
|
|
116
|
+
1. 需求摘要(来自 grill 访谈 + R1 评审结论)
|
|
117
|
+
2. 2–3 候选方案与 trade-offs
|
|
118
|
+
3. 推荐方案
|
|
119
|
+
4. 成功标准
|
|
120
|
+
|
|
121
|
+
### Step 4: HARD-GATE — 用户审批设计文档
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
⚠️ HARD-GATE: 设计未 APPROVED → 不可进入 Part B
|
|
125
|
+
|
|
126
|
+
等待用户审批设计文档。
|
|
127
|
+
用户 APPROVE 前,禁止进入 Part B (PLAN) 或任何实现。
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**sprint-flow 编排层行为**:
|
|
131
|
+
- 收到用户 APPROVED 后,自动进入 Part B
|
|
132
|
+
- 如果用户未 APPROVED,BLOCK 并等待
|
|
106
133
|
|
|
107
134
|
### 暂停点
|
|
108
135
|
|
|
109
136
|
| 暂停点 | 触发条件 | 用户操作 | 自动恢复条件 |
|
|
110
137
|
|--------|---------|---------|-------------|
|
|
111
|
-
|
|
|
112
|
-
| **
|
|
138
|
+
| R1 GAPS_FOUND | 需求评审发现缺口 | 补充访谈/上下文 | 重新 R1 评审(最多 5 轮) |
|
|
139
|
+
| **HARD-GATE** | 设计文档未 APPROVED | 用户审批设计文档 | 设计 APPROVED 后自动进入 Part B |
|
|
113
140
|
|
|
114
141
|
### 输出
|
|
115
142
|
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
- requirements-reviewed.json
|
|
143
|
+
- CONTEXT.md(项目上下文沉淀)
|
|
144
|
+
- ADR 文件(`docs/adr/ADR-NNNN-*.md`)
|
|
145
|
+
- requirements-reviewed.json(`.sprint-state/phase-outputs/`)
|
|
146
|
+
- Design Document(`docs/plans/YYYY-MM-DD-<topic>-design.md`)
|
|
119
147
|
- 进入 Part B 自动执行(使用设计文档作为输入)
|
|
120
148
|
|
|
121
149
|
---
|
|
122
150
|
|
|
123
151
|
## Part B: PLAN(共识评审)
|
|
124
152
|
|
|
125
|
-
###
|
|
153
|
+
### Step 5: 路由分叉(v0.14.0+ — Issue #306, #322)
|
|
126
154
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
155
|
+
根据 Phase 1/6 PREP (AUTO-ESTIMATE) 的 `change_type` 决定路径:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
读取 .sprint-state/sprint-state.json → auto_estimate.change_type
|
|
130
159
|
|
|
131
|
-
|
|
132
|
-
|
|
160
|
+
IF change_type == "修改已存在代码":
|
|
161
|
+
→ 增量优化路径: SKIP batch-grill-me
|
|
162
|
+
→ 直接进入 Step 7: R2 delphi-review(3 专家,最多 5 轮)
|
|
163
|
+
ELSE (change_type == "新增功能" 或 未定义):
|
|
164
|
+
→ 标准路径: 继续 Step 6 (batch-grill-me) → Step 7
|
|
165
|
+
```
|
|
133
166
|
|
|
134
|
-
|
|
135
|
-
- `design-shotgun` (gstack) — 移动端 UI 设计探索
|
|
167
|
+
**路由决策表**:
|
|
136
168
|
|
|
137
|
-
|
|
169
|
+
| change_type | batch-grill-me | R2 delphi-review |
|
|
170
|
+
|------------|----------------|------------------|
|
|
171
|
+
| `修改已存在代码` | ❌ SKIP | 3 专家,最多 5 轮 |
|
|
172
|
+
| `新增功能` | ✅ 执行 | 标准 (3 专家) |
|
|
173
|
+
| `undefined` / 缺失 | ✅ 执行 | 标准 (3 专家) |
|
|
138
174
|
|
|
139
|
-
|
|
175
|
+
**HARD-GATE 不变**: 两条路径最终都必须产出 APPROVED 的 delphi-reviewed.json。
|
|
140
176
|
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
skill(name="design-shotgun", user_message="[Pain Document 内容 + 需求描述]")
|
|
144
|
-
```
|
|
177
|
+
### Step 6: 调用 batch-grill-me(仅标准路径)
|
|
145
178
|
|
|
146
|
-
|
|
179
|
+
**仅当 change_type != "修改已存在代码" 时执行。**
|
|
147
180
|
|
|
148
181
|
```
|
|
149
|
-
skill(name="
|
|
182
|
+
skill(name="batch-grill-me", user_message="[设计文档 + 待确认决策列表]")
|
|
150
183
|
```
|
|
151
184
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
taste_decisions: [] | [decision1, decision2, ...]
|
|
157
|
-
verdict: "AUTO_APPROVED" | "NEEDS_REVIEW"
|
|
158
|
-
```
|
|
185
|
+
batch-grill-me 替代 autoplan 的 taste_decisions 功能:
|
|
186
|
+
- 前置已确定决策整批提出
|
|
187
|
+
- 用户一轮确认
|
|
188
|
+
- 输出批量决策结果
|
|
159
189
|
|
|
160
|
-
|
|
190
|
+
### Step 7: R2 设计评审(delphi-review,原生 HARD-GATE)
|
|
161
191
|
|
|
162
192
|
```
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
│ → 调用轻量上下文 delphi-review(三个 Custom Agent,最多 5 轮) │
|
|
169
|
-
│ │
|
|
170
|
-
│ IF autoplan_result.verdict == "NEEDS_REVIEW" │
|
|
171
|
-
│ OR autoplan_result.taste_decisions.length > 0 │
|
|
172
|
-
│ → ⚠️ 暂停等待用户确认 taste_decisions │
|
|
173
|
-
│ → 用户确认后,调用标准 delphi-review(3 专家) │
|
|
174
|
-
└───────────────────────────────────────────────────────────────────┘
|
|
193
|
+
# 标准路径(3 专家)
|
|
194
|
+
skill(name="delphi-review", user_message="[设计文档 + batch-grill-me 决策结果]")
|
|
195
|
+
|
|
196
|
+
# 增量优化路径(3 专家,最多 5 轮)
|
|
197
|
+
skill(name="delphi-review", user_message="[设计文档]", experts=3, max_rounds=5)
|
|
175
198
|
```
|
|
176
199
|
|
|
177
|
-
|
|
200
|
+
- **标准路径**: Round 1: 3 专家匿名独立评审 → Round 2+: 交换意见直到共识
|
|
201
|
+
- **增量优化路径**: 3 专家,最多 5 轮
|
|
202
|
+
- ≥90% 共识 + APPROVED 才通过
|
|
203
|
+
- 输出: APPROVED / REQUEST_CHANGES
|
|
178
204
|
|
|
179
|
-
|
|
205
|
+
**如果 REQUEST_CHANGES**: 暂停等待用户处理 → 修复后重新评审 → 直到 APPROVED
|
|
180
206
|
|
|
181
|
-
|
|
207
|
+
### Step 8: 调用 to-issues(原生保留)
|
|
182
208
|
|
|
183
209
|
```
|
|
184
|
-
skill(name="
|
|
210
|
+
skill(name="to-issues")
|
|
185
211
|
```
|
|
186
212
|
|
|
187
|
-
|
|
188
|
-
- 验证三份成功结果与三个 distinct trimmed `requested_model`
|
|
189
|
-
- Round 2+: 三个 Agent 交换意见直到共识,最多 5 轮
|
|
190
|
-
- 输出: APPROVED / REQUEST_CHANGES
|
|
213
|
+
垂直切片 Issue 拆分 → `slices-manifest.json`(格式不变,ralph-loop 零改动)
|
|
191
214
|
|
|
192
|
-
|
|
215
|
+
to-issues 原生能力:blocked_by/dependency_graph/DAG 循环检测/拓扑排序 → Phase 3/6 BUILD 按 execution_order 执行
|
|
216
|
+
|
|
217
|
+
### Step 9: 生成 specification.yaml
|
|
193
218
|
|
|
194
|
-
|
|
219
|
+
从 APPROVED 设计文档提取:
|
|
195
220
|
|
|
196
221
|
```yaml
|
|
197
222
|
specification:
|
|
@@ -202,7 +227,7 @@ specification:
|
|
|
202
227
|
acceptance_criteria:
|
|
203
228
|
- id: AC-001
|
|
204
229
|
requirement: REQ-001
|
|
205
|
-
criteria: [验收标准]
|
|
230
|
+
criteria: [验收标准] # #368: 每个 REQ 必须含清晰验收标准
|
|
206
231
|
test_type: [unit/integration/e2e]
|
|
207
232
|
design_decisions:
|
|
208
233
|
- id: DD-001
|
|
@@ -211,26 +236,38 @@ specification:
|
|
|
211
236
|
alternatives_considered: [备选方案]
|
|
212
237
|
```
|
|
213
238
|
|
|
214
|
-
|
|
239
|
+
### Step 10: 保存产出物
|
|
215
240
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
垂直切片 Issue 拆分 → `slices-manifest.json` → Phase 3/6 BUILD 按 execution_order 执行
|
|
241
|
+
保存到 `<project-root>/.sprint-state/phase-outputs/`:
|
|
242
|
+
- `specification.yaml`
|
|
243
|
+
- `slices-manifest.json`(to-issues 输出)
|
|
220
244
|
|
|
221
|
-
|
|
245
|
+
### Web 前端项目额外注入
|
|
222
246
|
|
|
223
|
-
|
|
247
|
+
**IF project_type is web-nextjs / web-react / web-vue / mobile-flutter / mobile-react-native:**
|
|
248
|
+
|
|
249
|
+
OPTIONAL: 若检测到 `design-shotgun` skill 已安装,可生成多版 UI 设计变体辅助设计评审。未安装则 SKIP。
|
|
224
250
|
|
|
225
251
|
### 暂停点
|
|
226
252
|
|
|
227
253
|
| 暂停点 | 触发条件 | 用户操作 |
|
|
228
254
|
|--------|---------|---------|
|
|
229
|
-
|
|
|
230
|
-
| delphi-review APPROVED | Round 结果 REQUEST_CHANGES | 用户修复并重新评审 |
|
|
255
|
+
| batch-grill-me 决策确认 | 批量决策需要用户确认 | 用户一轮确认所有决策 |
|
|
256
|
+
| R2 delphi-review APPROVED | Round 结果 REQUEST_CHANGES | 用户修复并重新评审 |
|
|
231
257
|
|
|
232
258
|
### 输出
|
|
233
259
|
|
|
234
|
-
- specification.yaml
|
|
260
|
+
- specification.yaml(每 REQ 含验收标准 — #368)
|
|
235
261
|
- slices-manifest.json
|
|
236
262
|
- 进入 Phase 3/6 BUILD(除非 `--stop-at design`)
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## 证据文件汇总
|
|
267
|
+
|
|
268
|
+
| 证据文件 | 路径 | 校验时机 | 防陈旧绑定 |
|
|
269
|
+
|----------|------|----------|-----------|
|
|
270
|
+
| requirements-reviewed.json | `.sprint-state/phase-outputs/` | `phase-transition 2 completed` | `requirements_hash`(SHA-256) |
|
|
271
|
+
| delphi-reviewed.json | `.sprint-state/` | DELPHI-GATE (Phase 2→3) | verdict + timestamp |
|
|
272
|
+
| specification.yaml | `.sprint-state/phase-outputs/` | `phase-transition 3 in_progress` | slice↔REQ 一致性 |
|
|
273
|
+
| slices-manifest.json | `.sprint-state/phase-outputs/` | `phase-transition 3 in_progress` | schema + REQ 引用校验 |
|