Files
commands/gudaspec/plan-review.md
2026-02-06 11:11:39 +08:00

406 lines
17 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: GudaSpec: Plan Review
description: Review plan structure, write detailed implementation plan with test specifications, and approve.
category: GudaSpec
tags: [gudaspec, plan, review, detail, tdd, approval]
argument-hint: [requirement-id]
---
<!-- GUDASPEC:PLAN-REVIEW:START -->
## Purpose
基于已确认的计划结构,编写详细实施计划,生成测试规格(如适用),多模型审查,最终用户批准。
## Core Principles
1. **Structure First** — 结构已在plan阶段确认本阶段聚焦细节
2. **Test-First When TDD** — Level 1-2时测试规格先于实现细节
3. **Interactive Review** — 逐Phase与用户确认非一次性输出
4. **Multi-Model Verification** — 多模型审查计划完整性
5. **Explicit Approval** — 必须获得用户明确批准
## Guardrails
- **MUST** load both structure.md and requirement.md first.
- **MUST** confirm each Phase with user before moving to next.
- **MUST** generate test specifications if test_level >= 1.
- **MUST** run multi-model review before final approval.
- **NEVER** finalize plan with open questions.
- Keep context under 60K tokens.
---
## Steps
### Step 0: Load Documents
```bash
cat gudaspec/plans/<requirement-id>/structure.md
cat gudaspec/research/<requirement-id>/requirement.md
```
Extract:
- Phase结构
- 测试策略Level
- 约束集
- 技术决策
### Step 1: Structure Confirmation
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 计划详细化: <Requirement Title>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
需求ID: <requirement-id>
测试策略: Level <X>
【计划结构回顾】
Phase 1: <name> — <goal>
Phase 2: <name> — <goal>
Phase 3: <name> — <goal>
接下来我将逐Phase编写详细内容。
每个Phase完成后会请您确认。
准备开始?
```
### Step 2: Detail Each Phase (Interactive Loop)
**For each Phase:**
#### 2.1 Generate Test Specifications (if Level >= 1)
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🧪 Phase 1 测试规格
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【测试目标】
验证: <what this phase should achieve>
【测试用例】
┌─────────────────────────────────────────────────────────────┐
│ Test 1: <test_name> │
├─────────────────────────────────────────────────────────────┤
│ 场景: <scenario description> │
│ 输入: <input> │
│ 期望: <expected output> │
│ 验证: <how to verify> │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Test 2: <test_name> │
├─────────────────────────────────────────────────────────────┤
│ 场景: <edge case> │
│ 输入: <input> │
│ 期望: <expected output> │
│ 验证: <how to verify> │
└─────────────────────────────────────────────────────────────┘
【测试代码骨架】
```python
# tests/test_<module>.py
class TestPhase1<Feature>:
"""Phase 1: <name> 测试"""
def test_<scenario_1>(self):
"""
场景: <description>
期望: <expected>
"""
# Arrange
<setup code hint>
# Act
<action code hint>
# Assert
assert <condition>, "<failure message>"
def test_<scenario_2>(self):
"""边界情况: <description>"""
# TODO: Implement
pass
```
【Property Tests】(if Level 2)
```python
from hypothesis import given, strategies as st
@given(st.text(min_size=1, max_size=100))
def test_<property_name>(input_value):
"""
Property: <invariant description>
"""
result = <function>(input_value)
assert <property_condition>
```
```
Use `AskUserQuestions`:
```
question: "Phase 1 测试规格是否完整?"
options: [
"完整,继续编写实现细节",
"需要添加更多测试场景",
"需要修改某个测试",
"测试粒度不合适"
]
```
### Step 2.2: Write Implementation Details
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 Phase 1 变更规格
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【变更清单】
1⃣ 认证服务扩展
┌─────────────────────────────────────────────────────────────┐
│ 文件: `src/auth/service.py`
│ 类型: 修改现有类 │
├─────────────────────────────────────────────────────────────┤
│ 【接口定义】 │
│ ```python │
│ async def verify_2fa( │
│ self, │
│ user_id: UUID, │
│ code: str │
│ ) -> bool: │
│ """ │
│ 验证用户的双因素认证码 │
│ │
│ Args: │
│ user_id: 用户唯一标识 │
│ code: 6位TOTP验证码 │
│ │
│ Returns: │
│ 验证成功True失败False │
│ │
│ Raises: │
│ UserNotFoundError: 用户不存在 │
│ TwoFactorNotEnabledError: 用户未启用2FA │
│ """ │
│ ``` │
├─────────────────────────────────────────────────────────────┤
│ 【行为规格】 │
│ • 用户不存在 → 抛出 UserNotFoundError │
│ • 用户未启用2FA → 抛出 TwoFactorNotEnabledError │
│ • 验证码正确 → 返回 True重置失败计数 │
│ • 验证码错误 → 返回 False增加失败计数 │
│ • 验证窗口 → ±1周期允许30秒误差
├─────────────────────────────────────────────────────────────┤
│ 【实现要点】 │
│ • 使用现有 TotpService.verify() 方法 │
│ • 遵循 authenticate() 的错误处理模式 │
│ • 失败计数存储于 user.failed_2fa_attempts │
├─────────────────────────────────────────────────────────────┤
│ 【参考模式】 │
│ • src/auth/service.py:78-95 authenticate() 方法 │
│ • src/auth/totp.py:23 TotpService.verify() 方法 │
├─────────────────────────────────────────────────────────────┤
│ 关联约束: HC-I-1复用TotpService, SC-I-2错误处理模式
│ 关联测试: test_valid_code_passes, test_invalid_code_fails │
└─────────────────────────────────────────────────────────────┘
【注意】: 以上是规格说明,非完整实现代码。
Implementation阶段将基于此规格编写实际代码。
```
Use `AskUserQuestions`:
```
question: "Phase 1 实现细节是否清晰完整?"
options: [
"清晰继续Phase 2",
"代码变更需要调整",
"执行顺序需要修改",
"Success Criteria需要补充"
]
```
#### 2.3 Repeat for Each Phase
Continue until all Phases are detailed.
### Step 3: Multi-Model Review
**Invoke `mcp__codex__codex`:**
```
Review this implementation plan:
[paste complete plan]
Check for:
1. Missing files that should be modified
2. Incorrect dependency order
3. Incomplete success criteria
4. Edge cases not covered by tests
Format: [ISSUE] <description> → [SUGGESTION] <fix>
```
**Invoke `mcp__gemini__gemini`:**
```
Review this implementation plan:
[paste complete plan]
Check for:
1. UI/UX gaps
2. Accessibility issues
3. Component interaction problems
4. Missing manual verification steps
Format: [ISSUE] <description> → [SUGGESTION] <fix>
```
**Present review findings:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 多模型审查结果
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【Codex 发现】
• ⚠️ <issue 1> → 建议: <fix>
• ✅ 依赖顺序正确
• ✅ 测试覆盖完整
【Gemini 发现】
• ⚠️ <issue 2> → 建议: <fix>
• ✅ UI变更合理
【已自动修正】
• <auto-fixed issue>
【需要您确认】
• <issue requiring user decision>
```
### Step 4: Final Summary & Approval
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 计划总结
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【计划概览】
┌─────────────────────────────────────────────────────────────┐
│ 需求: <requirement title> │
│ ID: <requirement-id> │
│ 测试策略: Level <X> │
├─────────────────────────────────────────────────────────────┤
│ │
│ Phase 1: <name> │
│ ├─ 文件变更: <N>个 │
│ ├─ 测试用例: <M>个 │
│ └─ 验证点: 自动<A>个 + 手动<B>个 │
│ │
│ Phase 2: <name> │
│ ├─ 文件变更: <N>个 │
│ ├─ 测试用例: <M>个 │
│ └─ 验证点: 自动<A>个 + 手动<B>个 │
│ │
│ Phase 3: <name> │
│ ├─ 文件变更: <N>个 │
│ ├─ 测试用例: <M>个 │
│ └─ 验证点: 自动<A>个 + 手动<B>个 │
│ │
├─────────────────────────────────────────────────────────────┤
│ 总计: │
│ • 文件变更: <total>个 │
│ • 测试用例: <total>个 │
│ • 自动验证: <total>个 │
│ • 手动验证: <total>个 │
│ • 风险等级: 中 │
└─────────────────────────────────────────────────────────────┘
【执行流程预览】
Phase 1 → 自动验证 → ⏸️手动确认 → Phase 2 → 自动验证 → ⏸️手动确认 → ...
【回滚计划】
如果任何Phase失败: <rollback strategy>
```
Use `AskUserQuestions`:
```
question: "是否批准此计划?"
options: [
"批准,保存完整计划",
"需要修改某个Phase",
"需要调整整体结构",
"有问题需要讨论"
]
```
### Step 5: Save Complete Plan
Save to: `gudaspec/plans/<requirement-id>/plan.md`
Also save test skeletons (if Level >= 1):
```
gudaspec/plans/<requirement-id>/tests/
├── test_spec.md
└── skeletons/
├── test_phase1.py
├── test_phase2.py
└── ...
```
Update structure.md status: `status: plan-approved`
### Step 6: Completion Output
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 计划已批准
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
需求ID: <requirement-id>
📁 生成的文件:
gudaspec/plans/<requirement-id>/
├── structure.md (已更新状态)
├── plan.md (完整计划) ⭐
└── tests/
├── test_spec.md (测试规格)
└── skeletons/ (测试骨架代码)
📊 计划摘要:
┌─────────────────────────────────────────┐
│ Phases: [N] │
│ 文件变更: [X] │
│ 测试用例: [Y] │
│ 测试策略: Level [Z] │
└─────────────────────────────────────────┘
📋 下一步操作:
1. 输入 /clear 清空当前上下文
2. 输入 /gudaspec:implementation gudaspec/plans/<requirement-id>/plan.md
⚠️ 实施阶段提示:
• 将逐Phase执行每Phase有明确的停止点
• 测试将在实现前/后运行取决于TDD Level
• 每个Phase自动验证通过后等待您的手动确认
```
---
## Exit Criteria
- [ ] Structure document loaded and confirmed
- [ ] All Phases detailed with implementation steps
- [ ] Test specifications generated (if Level >= 1)
- [ ] Multi-model review completed and issues addressed
- [ ] User explicitly approved the plan
- [ ] plan.md saved with all details
- [ ] Test skeletons saved (if applicable)
- [ ] User directed to /gudaspec:implementation
<!-- GUDASPEC:PLAN-REVIEW:END -->