@boyingliu01/xp-gate 0.7.0 → 0.8.0
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 +212 -42
- package/lib/__tests__/doctor.test.js +1 -0
- package/lib/__tests__/gate-audit.test.ts +59 -0
- package/lib/__tests__/init.test.js +47 -1
- package/lib/__tests__/install-skill.test.js +1 -45
- package/lib/__tests__/ui-detector.test.ts +186 -26
- package/lib/__tests__/ui-review.test.ts +119 -0
- package/lib/__tests__/uninstall.test.js +1 -0
- package/lib/detect-deps.js +180 -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 +20 -14
- 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/plugins/claude-code/skills/admin-template-guidelines/SKILL.md +904 -0
- package/plugins/claude-code/skills/delphi-review/.delphi-config.json.example +45 -0
- package/plugins/claude-code/skills/delphi-review/AGENTS.md +66 -0
- package/plugins/claude-code/skills/delphi-review/INSTALL.md +152 -0
- package/plugins/claude-code/skills/delphi-review/SKILL.md +454 -0
- package/plugins/claude-code/skills/delphi-review/opencode.json.delphi.example +56 -0
- package/plugins/claude-code/skills/delphi-review/references/code-walkthrough.md +486 -0
- package/plugins/claude-code/skills/improve-codebase-architecture/SKILL.md +156 -0
- package/plugins/claude-code/skills/ralph-loop/SKILL.md +501 -0
- package/plugins/claude-code/skills/ralph-loop/references/components/memory.md +55 -0
- package/plugins/claude-code/skills/ralph-loop/references/components/middleware.md +54 -0
- package/plugins/claude-code/skills/ralph-loop/references/components/skill-invocations.md +39 -0
- package/plugins/claude-code/skills/ralph-loop/references/components/system-prompt.md +24 -0
- package/plugins/claude-code/skills/ralph-loop/references/components/tool-descriptions.md +32 -0
- package/plugins/claude-code/skills/ralph-loop/references/phase-2-build-ralph.md +89 -0
- package/plugins/claude-code/skills/ralph-loop/templates/progress-log.md +36 -0
- package/plugins/claude-code/skills/sprint-flow/AGENTS.md +68 -0
- package/plugins/claude-code/skills/sprint-flow/SKILL.md +1248 -0
- package/plugins/claude-code/skills/sprint-flow/references/components/memory.md +87 -0
- package/plugins/claude-code/skills/sprint-flow/references/components/middleware.md +72 -0
- package/plugins/claude-code/skills/sprint-flow/references/components/skill-invocations.md +104 -0
- package/plugins/claude-code/skills/sprint-flow/references/components/system-prompt.md +27 -0
- package/plugins/claude-code/skills/sprint-flow/references/components/tool-descriptions.md +96 -0
- package/plugins/claude-code/skills/sprint-flow/references/force-levels.md +203 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-0-think.md +115 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-1-plan.md +178 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-2-build.md +198 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-3-review.md +213 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-4-uat.md +125 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-5-feedback.md +100 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-6-ship.md +193 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-7-land.md +140 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-8-cleanup.md +192 -0
- package/plugins/claude-code/skills/sprint-flow/references/phase-minus-0-5-auto-estimate.md +257 -0
- package/plugins/claude-code/skills/sprint-flow/templates/auto-estimate-learning-log.md +136 -0
- package/plugins/claude-code/skills/sprint-flow/templates/auto-estimate-output-template.md +132 -0
- package/plugins/claude-code/skills/sprint-flow/templates/emergent-issues-template.md +120 -0
- package/plugins/claude-code/skills/sprint-flow/templates/pain-document-template.md +115 -0
- package/plugins/claude-code/skills/sprint-flow/templates/sprint-progress-template.md +151 -0
- package/plugins/claude-code/skills/sprint-flow/templates/sprint-summary-template.md +120 -0
- package/plugins/claude-code/skills/test-driven-development/SKILL.md +71 -0
- package/plugins/claude-code/skills/test-specification-alignment/AGENTS.md +56 -0
- package/plugins/claude-code/skills/test-specification-alignment/SKILL.md +702 -0
- package/plugins/claude-code/skills/test-specification-alignment/references/alignment-verification-algorithm.md +493 -0
- package/plugins/claude-code/skills/test-specification-alignment/references/phase2-constraint-enforcement.md +431 -0
- package/plugins/claude-code/skills/test-specification-alignment/references/specification-format.md +348 -0
- package/plugins/claude-code/skills/to-issues/SKILL.md +277 -0
- package/plugins/opencode/README.md +38 -0
- package/plugins/opencode/index.ts +85 -0
- package/plugins/opencode/package.json +18 -0
- package/plugins/opencode/skills/admin-template-guidelines/SKILL.md +904 -0
- package/plugins/opencode/skills/delphi-review/.delphi-config.json.example +45 -0
- package/plugins/opencode/skills/delphi-review/AGENTS.md +66 -0
- package/plugins/opencode/skills/delphi-review/INSTALL.md +152 -0
- package/plugins/opencode/skills/delphi-review/SKILL.md +454 -0
- package/plugins/opencode/skills/delphi-review/opencode.json.delphi.example +56 -0
- package/plugins/opencode/skills/delphi-review/references/code-walkthrough.md +486 -0
- package/plugins/opencode/skills/improve-codebase-architecture/SKILL.md +156 -0
- package/plugins/opencode/skills/ralph-loop/SKILL.md +501 -0
- package/plugins/opencode/skills/ralph-loop/references/components/memory.md +55 -0
- package/plugins/opencode/skills/ralph-loop/references/components/middleware.md +54 -0
- package/plugins/opencode/skills/ralph-loop/references/components/skill-invocations.md +39 -0
- package/plugins/opencode/skills/ralph-loop/references/components/system-prompt.md +24 -0
- package/plugins/opencode/skills/ralph-loop/references/components/tool-descriptions.md +32 -0
- package/plugins/opencode/skills/ralph-loop/references/phase-2-build-ralph.md +89 -0
- package/plugins/opencode/skills/ralph-loop/templates/progress-log.md +36 -0
- package/plugins/opencode/skills/sprint-flow/AGENTS.md +68 -0
- package/plugins/opencode/skills/sprint-flow/SKILL.md +1248 -0
- package/plugins/opencode/skills/sprint-flow/references/components/memory.md +87 -0
- package/plugins/opencode/skills/sprint-flow/references/components/middleware.md +72 -0
- package/plugins/opencode/skills/sprint-flow/references/components/skill-invocations.md +104 -0
- package/plugins/opencode/skills/sprint-flow/references/components/system-prompt.md +27 -0
- package/plugins/opencode/skills/sprint-flow/references/components/tool-descriptions.md +96 -0
- package/plugins/opencode/skills/sprint-flow/references/force-levels.md +203 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-0-think.md +115 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-1-plan.md +178 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-2-build.md +198 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-3-review.md +213 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-4-uat.md +125 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-5-feedback.md +100 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-6-ship.md +193 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-7-land.md +140 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-8-cleanup.md +192 -0
- package/plugins/opencode/skills/sprint-flow/references/phase-minus-0-5-auto-estimate.md +257 -0
- package/plugins/opencode/skills/sprint-flow/templates/auto-estimate-learning-log.md +136 -0
- package/plugins/opencode/skills/sprint-flow/templates/auto-estimate-output-template.md +132 -0
- package/plugins/opencode/skills/sprint-flow/templates/emergent-issues-template.md +120 -0
- package/plugins/opencode/skills/sprint-flow/templates/pain-document-template.md +115 -0
- package/plugins/opencode/skills/sprint-flow/templates/sprint-progress-template.md +151 -0
- package/plugins/opencode/skills/sprint-flow/templates/sprint-summary-template.md +120 -0
- package/plugins/opencode/skills/test-driven-development/SKILL.md +71 -0
- package/plugins/opencode/skills/test-specification-alignment/AGENTS.md +56 -0
- package/plugins/opencode/skills/test-specification-alignment/SKILL.md +702 -0
- package/plugins/opencode/skills/test-specification-alignment/references/alignment-verification-algorithm.md +493 -0
- package/plugins/opencode/skills/test-specification-alignment/references/phase2-constraint-enforcement.md +431 -0
- package/plugins/opencode/skills/test-specification-alignment/references/specification-format.md +348 -0
- package/plugins/opencode/skills/to-issues/SKILL.md +277 -0
- package/plugins/opencode/tsconfig.json +15 -0
- package/plugins/qoder/skills/admin-template-guidelines/SKILL.md +904 -0
- package/plugins/qoder/skills/delphi-review/.delphi-config.json.example +45 -0
- package/plugins/qoder/skills/delphi-review/AGENTS.md +66 -0
- package/plugins/qoder/skills/delphi-review/INSTALL.md +152 -0
- package/plugins/qoder/skills/delphi-review/SKILL.md +454 -0
- package/plugins/qoder/skills/delphi-review/opencode.json.delphi.example +56 -0
- package/plugins/qoder/skills/delphi-review/references/code-walkthrough.md +486 -0
- package/plugins/qoder/skills/improve-codebase-architecture/SKILL.md +156 -0
- package/plugins/qoder/skills/ralph-loop/SKILL.md +501 -0
- package/plugins/qoder/skills/ralph-loop/references/components/memory.md +55 -0
- package/plugins/qoder/skills/ralph-loop/references/components/middleware.md +54 -0
- package/plugins/qoder/skills/ralph-loop/references/components/skill-invocations.md +39 -0
- package/plugins/qoder/skills/ralph-loop/references/components/system-prompt.md +24 -0
- package/plugins/qoder/skills/ralph-loop/references/components/tool-descriptions.md +32 -0
- package/plugins/qoder/skills/ralph-loop/references/phase-2-build-ralph.md +89 -0
- package/plugins/qoder/skills/ralph-loop/templates/progress-log.md +36 -0
- package/plugins/qoder/skills/sprint-flow/AGENTS.md +68 -0
- package/plugins/qoder/skills/sprint-flow/SKILL.md +1248 -0
- package/plugins/qoder/skills/sprint-flow/references/components/memory.md +87 -0
- package/plugins/qoder/skills/sprint-flow/references/components/middleware.md +72 -0
- package/plugins/qoder/skills/sprint-flow/references/components/skill-invocations.md +104 -0
- package/plugins/qoder/skills/sprint-flow/references/components/system-prompt.md +27 -0
- package/plugins/qoder/skills/sprint-flow/references/components/tool-descriptions.md +96 -0
- package/plugins/qoder/skills/sprint-flow/references/force-levels.md +203 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-0-think.md +115 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-1-plan.md +178 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-2-build.md +198 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-3-review.md +213 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-4-uat.md +125 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-5-feedback.md +100 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-6-ship.md +193 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-7-land.md +140 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-8-cleanup.md +192 -0
- package/plugins/qoder/skills/sprint-flow/references/phase-minus-0-5-auto-estimate.md +257 -0
- package/plugins/qoder/skills/sprint-flow/templates/auto-estimate-learning-log.md +136 -0
- package/plugins/qoder/skills/sprint-flow/templates/auto-estimate-output-template.md +132 -0
- package/plugins/qoder/skills/sprint-flow/templates/emergent-issues-template.md +120 -0
- package/plugins/qoder/skills/sprint-flow/templates/pain-document-template.md +115 -0
- package/plugins/qoder/skills/sprint-flow/templates/sprint-progress-template.md +151 -0
- package/plugins/qoder/skills/sprint-flow/templates/sprint-summary-template.md +120 -0
- package/plugins/qoder/skills/test-driven-development/SKILL.md +71 -0
- package/plugins/qoder/skills/test-specification-alignment/AGENTS.md +56 -0
- package/plugins/qoder/skills/test-specification-alignment/SKILL.md +702 -0
- package/plugins/qoder/skills/test-specification-alignment/references/alignment-verification-algorithm.md +493 -0
- package/plugins/qoder/skills/test-specification-alignment/references/phase2-constraint-enforcement.md +431 -0
- package/plugins/qoder/skills/test-specification-alignment/references/specification-format.md +348 -0
- package/plugins/qoder/skills/to-issues/SKILL.md +277 -0
- package/skills/admin-template-guidelines/SKILL.md +904 -0
- package/skills/delphi-review/SKILL.md +112 -77
- package/skills/improve-codebase-architecture/SKILL.md +156 -0
- package/skills/ralph-loop/SKILL.md +165 -34
- package/skills/sprint-flow/SKILL.md +448 -107
- 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-driven-development/SKILL.md +71 -0
- package/skills/test-specification-alignment/SKILL.md +98 -24
- package/skills/to-issues/SKILL.md +277 -0
- 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/evals/evals.json +0 -82
- package/skills/delphi-review/references/qoder-multi-model.md +0 -191
- package/skills/ralph-loop/evals/evals.json +0 -311
- package/skills/ralph-loop/evolution-history.json +0 -59
- package/skills/ralph-loop/evolution-log.md +0 -16
- package/skills/sprint-flow/evals/evals.json +0 -130
- package/skills/sprint-flow/evolution-history.json +0 -39
- package/skills/sprint-flow/evolution-log.md +0 -23
- package/skills/sprint-flow/references/qoder-adaptation.md +0 -173
- package/skills/test-specification-alignment/evals/evals.json +0 -75
|
@@ -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
|
+
```
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-driven-development
|
|
3
|
+
description: >
|
|
4
|
+
Test-Driven Development enforcement: RED → GREEN → REFACTOR cycle.
|
|
5
|
+
Write failing test first, then minimum code to pass, then refactor.
|
|
6
|
+
Includes Mock Usage Guidelines for integration-first testing.
|
|
7
|
+
|
|
8
|
+
maturity: stable
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Test-Driven Development
|
|
12
|
+
|
|
13
|
+
## Core Principles
|
|
14
|
+
|
|
15
|
+
| Principle | Description |
|
|
16
|
+
|-----------|-------------|
|
|
17
|
+
| **RED First** | Write a failing test before ANY implementation code |
|
|
18
|
+
| **GREEN Minimum** | Write minimum code to pass the test — no extra features |
|
|
19
|
+
| **REFACTOR** | Clean up code while keeping tests green |
|
|
20
|
+
| **Delete & Restart** | If you write code before test — delete it and start over |
|
|
21
|
+
|
|
22
|
+
## Workflow
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
1. RED: Write failing test (describe/it + expect)
|
|
26
|
+
2. GREEN: Write minimum implementation to pass
|
|
27
|
+
3. REFACTOR: Clean up, extract, simplify — tests stay green
|
|
28
|
+
4. Repeat for next behavior
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Mock Usage Guidelines (MANDATORY)
|
|
32
|
+
|
|
33
|
+
### When to use mocks (ONLY these cases):
|
|
34
|
+
1. External API/HTTP calls — use testcontainers or nock
|
|
35
|
+
2. Database I/O — use in-memory DB (sqlite, testcontainers)
|
|
36
|
+
3. File system I/O — use tmpdir / memfs
|
|
37
|
+
4. Time-dependent code — inject clock dependency
|
|
38
|
+
5. Non-deterministic behavior (random, UUID) — inject dependency
|
|
39
|
+
|
|
40
|
+
### When NOT to use mocks:
|
|
41
|
+
- Pure business logic → test with real values
|
|
42
|
+
- In-memory data transformations → test with real data
|
|
43
|
+
- Validation logic → test with real input/output
|
|
44
|
+
- State machines → test with real state transitions
|
|
45
|
+
|
|
46
|
+
### Mock Density Rule:
|
|
47
|
+
If > 30% of test lines contain mock/spy/fn references,
|
|
48
|
+
you are likely over-mocking. Add `// @mock-justified: <reason>` comment
|
|
49
|
+
explaining why integration test is not feasible.
|
|
50
|
+
|
|
51
|
+
### Annotation Format:
|
|
52
|
+
```typescript
|
|
53
|
+
// @mock-justified: external API wrapper, no sandbox environment available
|
|
54
|
+
```
|
|
55
|
+
Reason text must be at least 10 characters. Bare `@mock-justified` without colon+reason is invalid.
|
|
56
|
+
|
|
57
|
+
## Test Annotations
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
/**
|
|
61
|
+
* @test REQ-XXX Feature name
|
|
62
|
+
* @intent Verify specific behavior
|
|
63
|
+
* @covers AC-XXX-01, AC-XXX-02
|
|
64
|
+
*/
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Coverage Requirements
|
|
68
|
+
|
|
69
|
+
- Minimum 80% line coverage
|
|
70
|
+
- All acceptance criteria must have corresponding tests
|
|
71
|
+
- Tests must survive mutation testing (Gate M pre-push)
|