# 02-sdd-loop-prompt.md 修改说明

## 需要修改的位置

### 1. 循环工作流部分（第 12 行附近）

**当前内容**：
```markdown
### 🔄 循环工作流 (Loop Protocol)
请严格遵守以下循环逻辑，直到满足"循环结束条件"：
1.  **输入**：接收 PRD 文档、`openspec/` 现有知识库，以及 `source/analysis-input-scan.md` 记录的后端代码与 mock 数据扫描结果。
```

**应该改为**：
```markdown
### 🔄 循环工作流 (Loop Protocol)

**⚠️ 重要前提：优先使用前端需求文档**

在开始分析前，必须先检查前端需求筛选状态：

1. **检查 `.fe-filter-required.json` 标记文件**
2. **如果 `status: "pending"`**：
   - 停止并返回：`⚠️ 前端需求筛选未完成，请先调用 fe-requirement-filter skill 生成 PRD-frontend.md`
   - 提示用户："请在 AI 工具中说：'提取前端需求' 或 '过滤前端需求'"
   - **不得继续生成 03/05/04**

3. **如果 `status: "completed"`**：
   - 验证 `source/PRD-frontend.md` 存在
   - **使用 `PRD-frontend.md` 作为后续所有分析的输入**（已筛选掉后端需求）
   - 继续执行下面的循环步骤

4. **如果标记文件不存在或 `status: "skipped"`**：
   - 使用完整 `source/PRD.md`（包含前后端需求）
   - 记录日志：使用完整 PRD（未筛选）

---

**循环逻辑**：请严格遵守以下循环逻辑，直到满足"循环结束条件"：

1.  **输入**：
    - **优先**读取 `source/PRD-frontend.md`（纯前端需求）
    - 兜底读取 `source/PRD.md`（完整需求）
    - `openspec/` 现有知识库
    - `source/analysis-input-scan.md` 后端代码与 mock 数据扫描结果
```

### 2. 文档职责表格（第 52 行附近）

**已完成** ✅
```markdown
| `05` | **唯一验收 SSOT**（从 `source/PRD-frontend.md` 或 `source/PRD.md` 逐条抽 AC） |
```

### 3. 额外信息部分（最后）

**已完成** ✅
```markdown
## 额外信息（由执行工具在运行时注入）
- **前端需求文档内容**（优先）：{{PRD_FRONTEND_MARKDOWN}}
- PRD 文档内容（完整，兜底）：{{PRD_MARKDOWN}}
```

---

## 完整的修改后的 "循环工作流" 章节

```markdown
### 🔄 循环工作流 (Loop Protocol)

**⚠️ 重要前提：优先使用前端需求文档**

在开始分析前，必须先检查前端需求筛选状态：

1. **检查 `.fe-filter-required.json` 标记文件**

2. **如果 `status: "pending"`**：
   - 停止并返回：`⚠️ 前端需求筛选未完成`
   - 提示：`请先调用 fe-requirement-filter skill 生成 PRD-frontend.md`
   - 说明：`在 AI 工具中说：'提取前端需求' 或 '过滤前端需求'`
   - **不得继续生成 03/05/04**

3. **如果 `status: "completed"`**：
   - 验证 `source/PRD-frontend.md` 存在
   - **使用 `PRD-frontend.md` 作为后续所有分析的输入**
   - 说明：此文档已筛选掉后端需求，只包含纯前端需求
   - 继续执行下面的循环步骤

4. **如果标记文件不存在或 `status: "skipped"`**：
   - 使用完整 `source/PRD.md`（包含前后端需求）
   - 记录日志：使用完整 PRD（未筛选）

---

**循环逻辑**：请严格遵守以下循环逻辑，直到满足"循环结束条件"：

1.  **输入**：
    - **优先**读取 `source/PRD-frontend.md`（纯前端需求，由 fe-requirement-filter 生成）
    - 兜底读取 `source/PRD.md`（完整需求，包含前后端）
    - `openspec/` 现有知识库
    - `source/analysis-input-scan.md` 后端代码与 mock 数据扫描结果

2.  **探索**：
    - 先读取扫描记录
    - 若后端接口或 mock 存在，逐项对照 PRD 与现有前端代码
    - 若未发现，记录"已扫描未发现"及由此产生的不确定性

3.  **矛盾点识别**：
    *   **断点 (Breakpoint)**：代码中已存在但与 PRD 冲突、缺失实现或逻辑无法理解的部分
    *   **起点缺失 (Missing Starting Point)**：PRD 中描述的流程，在现有代码中找不到对应的触发点
    *   **推测缺口 (Speculative Gap)**：基于现有代码的假设，在未与人工确认前存在不确定性
    *   **前端专项问题 (Frontend Specifics)**：页面结构、路由设计、交互流程、状态反馈等前端特有的细节缺口

4.  **判断**：
    *   如果 **存在** 断点/起点缺失/推测缺口 -> 进入 **"提问模式"**
    *   如果 **不存在** -> 进入 **"交付模式"**

5.  **迭代**：根据人工反馈更新矛盾点池，直到所有问题闭合
```

---

## 修改要点总结

1. ✅ **优先使用 PRD-frontend.md**：在所有提到 `source/PRD.md` 的地方，改为优先使用 `PRD-frontend.md`
2. ✅ **增加前置检查**：在循环开始前检查 `.fe-filter-required.json` 状态
3. ✅ **状态判断逻辑**：
   - `pending` → 停止，提示用户调用 skill
   - `completed` → 使用 PRD-frontend.md
   - 不存在/skipped → 使用完整 PRD.md
4. ✅ **更新变量占位符**：`{{PRD_FRONTEND_MARKDOWN}}` 优先于 `{{PRD_MARKDOWN}}`

---

## 测试验证

修改完成后，执行流程应该是：

```
用户：开发 ADI V2.3.4
  ↓
guard 识别 → 拉取 PRD → 生成 PRD.md
  ↓
检查 .fe-filter-required.json (status: pending)
  ↓
AI 读取 02-sdd-loop-prompt.md
  ↓
发现 status: pending
  ↓
停止并提示：请先调用 fe-requirement-filter
  ↓
用户："提取前端需求"
  ↓
skill 执行 → 生成 PRD-frontend.md → 更新 status: completed
  ↓
AI 重新读取 02-sdd-loop-prompt.md
  ↓
检测到 status: completed
  ↓
使用 PRD-frontend.md 生成 03 待确认清单
  ↓
继续后续流程（05, 04, 01, 02）
```

---

## 需要手动修改的文件

**文件路径**：`src/templates/prompts/02-sdd-loop-prompt.md`

**修改位置**：第 12-14 行（"循环工作流"章节开头）

**修改方式**：用上面的完整内容替换现有的 1-2 两步
