📄 本页由源文件
skills/dev-flow/steps/step-2-scope.md自动投影生成(单一权威源)。请勿直接编辑本页。
步骤 2:确认范围(影响范围报告)
本文件仅在执行步骤 2 时加载。执行完毕后输出完成标记 JSON,通过门控后加载步骤 3。
目标
基于步骤 1 的研究结果,输出结构化影响范围报告,向用户确认后锁定范围。
执行规范
1. 输出影响范围报告
证伪式标注原则(遵循
flow.md核心理念):只有「涉及文件清单」是必输项;「涉及功能模块」和「上下游依赖」按事实按需输出——空节不得静默省略,必须显式标注"无"并给出证伪理由,让用户能审计 AI 是否真的做过检查,禁止编造凑数。
## 影响范围
### 涉及文件清单(必输)
| 文件 | 操作 | 改动说明 |
| --- | --- | --- |
| `{相对路径}` | 新增/修改/删除 | {具体改动内容} |
### 涉及功能模块(按需)
> 若存在多模块联动 → 输出下方表格
> 若无多模块联动 → 必须显式标注"无"并给出证伪理由(如"改动仅涉及单文件工具函数,不跨模块边界")
| 模块 | 功能说明 | 影响程度 |
| --- | --- | --- |
| {模块名} | {该模块在本次需求中的作用} | 核心改动 / 联动影响 / 仅验证 |
### 上下游依赖(按需)
> 若存在上下游依赖 → 输出下方列表
> 若无依赖 → 必须显式标注"无"并给出证伪理由(如"已 grep 确认无其他文件 import 该函数")
- 上游:{哪些模块/文件调用了本次改动区域}
- 下游:{本次改动会影响哪些消费方}可视化补充:若 step-1 已输出调用链路图(见 references/call-graph-spec.md), 上下游依赖节直接引用该图,并在节点上标注 [核心改]/[联动]/[仅验证] (与 impact_levels 对齐);若范围确认新增/移除节点,用增量标注说明 (如 + NewCaller.tsx → 新发现的上游调用方)。禁止重画。
### 涉及功能模块
> 无(本次改动仅涉及 src/utils/validator.ts 单文件工具函数,不跨模块边界)
### 上下游依赖
> 无(步骤 1 已 grep "EMAIL_REG" 确认仅 UserSearch.tsx 一处调用,已在文件清单体现)判断指引:
- 单文件 bug 修复(如正则/校验/文案)→ 通常只需「涉及文件清单」+ 两处「无+理由」
- 多文件联动改动 → 输出「涉及功能模块」表格
- 改动可能影响其他模块 → 输出「上下游依赖」列表
- ❌ 禁止:静默省略整节(无法区分"确认为空"与"未检查")
- ❌ 禁止:仅写"无"而无理由
范围充分性交叉校验(防伪装简化)
步骤 2 必须与步骤 1 的 sufficiency_check 交叉校验:
- 若步骤 1
confidence = "low"→ 步骤 2 不得继续,回退步骤 1 - 若步骤 1
related_files_count≥ 3 而本步骤files_count = 1→ 必须显式说明"为何步骤 1 发现的其他文件不纳入改动范围" - 若用户原始描述 ≤ 20 字且
modules_count = 0→ AI 必须在报告中明确一句反思性说明,让用户有机会补充(如"任务描述较简短,已按单文件修复判断,若涉及其他模块请补充")
1.5 跨项目检测钩子(影响范围报告后、用户确认前)
在输出影响范围报告后,自动执行跨项目检测。触发后 →
read_file("references/cross-project-flow.md")加载完整流程。
触发条件(满足任一):
- 修改目标文件不在当前工作区目录下
- 修改目标是当前项目的依赖包(需要在依赖包的源码仓库修改)
- 用户明确说"需要去 XX 项目修改"
- 根因定位在上游组件库/公共包
检测方式:扫描影响范围报告中的文件清单,判断所有文件路径是否在当前 workspace 下。
未触发:静默跳过,直接进入用户确认环节。
触发后:
- 在影响范围报告末尾追加「🔗 跨项目衔接」区块
- 自动生成 B 项目衔接 prompt
- 用户确认选项中新增「📋 复制衔接 prompt 去 B 项目修复」
- 工作上下文写入
cross_project字段
完成标记扩展(追加到 outputs):
"cross_project_detected": "true | false",
"cross_project_target": "B 项目名(仅 detected=true 时)"2. 用户确认(交互式,必须等待)
影响范围报告输出后,必须使用 ask_followup_question 弹出交互式选项让用户确认:
影响范围报告已输出,请确认:| 选项 | 说明 |
|---|---|
| ✅ 确认 | 范围无误,继续制定方案 |
| 📋 复制衔接 prompt 去 B 项目修复 | 跨项目场景:复制后去 B 项目新对话粘贴(仅 §1.5 跨项目检测触发时显示) |
| ✏️ 补充 | 告诉我遗漏的文件/模块 |
| 🔄 重新分析 | 范围偏差较大,重新研究分析 |
📌 条件性隐藏规则:按
~/.codebuddy/rules/AI行为规范.mdc§「交互式选项一致性规则」 第 3 条,§1.5 未触发跨项目检测时,必须从文本表格与ask_followup_question的 options 数组中 同步移除「📋 复制衔接 prompt 去 B 项目修复」,编号自动顺延。调用前逐条核对: 表格行数 === options 数组长度。
3. 规则
- 文件/代码位置引用:按
~/.codebuddy/rules/AI行为规范.mdc「文件/代码位置引用」执行(反引号包裹相对路径`相对路径`+ 空格后缀行号) - 影响程度分三级:核心改动(直接修改)、联动影响(需同步调整)、仅验证(不改但需确认不受影响)
- 区分架构/模块边界,严格按用户指定范围操作
- 用户确认后,将此报告写入工作上下文
## 修改范围区块
4. 迭代修复场景
当通过迭代修复路径进入时,步骤 2 仅输出本轮新增的影响范围。详见 references/iteration-fix.md。
⛔ 退出自检清单(逐项口播确认后才能输出完成 JSON)
在输出完成标记 JSON 之前,逐项确认并口播:
- [ ] 影响范围报告已输出(三个节:文件清单 + 功能模块 + 上下游依赖)?
- [ ] 证伪式标注原则已遵循(空节已标注"无"并给出理由)?
- [ ] §1.5 跨项目检测已执行?
cross_project_detected字段正确? - [ ] 与步骤 1
sufficiency_check交叉校验已通过:- confidence != "low" ?
- related_files_count >= 3 但 files_count = 1 时已说明原因?
- [ ] 用户确认已完成?
user_confirmed= true? - [ ]
call_graph_referenced与步骤 1call_graph_drawn对齐? - [ ] 上述全部完成 → 才可输出完成标记 JSON
必须输出
步骤推进选项(标准模式必须)
注:§2「用户确认」已使用
ask_followup_question收集范围确认结果。若用户选择「✅ 确认」后进入本节,完成标记 JSON 输出并状态同步后,必须调用ask_followup_question弹出推进选项(先文本表格展示,再调用工具):
| 选项 | 说明 |
|---|---|
| ▶️ 继续步骤 3(制定方案) | 范围已锁定,开始方案设计 |
| ⏸️ 暂停,我有补充/疑问 | 暂停等待用户输入 |
| 🔁 回退步骤 1 重新研究 | 范围偏差较大,扩大研究 |
精简模式:步骤 2→3 无专属豁免,标准模式必须弹出;精简模式下若 §2 用户已确认,可合并为一次交互。
结构化完成标记(必须输出,缺字段视为未完成)
{
"step": 2,
"name": "确认范围",
"status": "completed",
"outputs": {
"modules_count": "涉及功能模块数量(数字)",
"files_count": "涉及文件数量(数字)",
"impact_levels": {"core": 0, "linked": 0, "verify_only": 0},
"user_confirmed": true,
"call_graph_referenced": "true | not_applicable(step-1 未画图)",
"cross_project_detected": "true | false",
"cross_project_target": "B 项目名(仅 detected=true 时,否则省略)"
},
"working_context_updated": true,
"next_step": 3
}完成标记校验规则:
user_confirmed必须为true(用户已确认范围)files_count必须 > 0modules_count允许为 0(单文件改动可能不涉及独立模块)status为completed时才能进入步骤 3- 用户选择「重新分析」时,
status设为blocked,回退步骤 1 重新研究 call_graph_referenced校验:若 step-1 的call_graph_drawn === "true",此处必须为"true"(证明本步骤确实引用了调用图);若 step-1 为not_applicable,此处必须为not_applicable——禁止出现 step-1 画了图而 step-2 未引用的情况。- 豁免条款:当
status === "blocked"(用户选择重新分析)时,call_graph_referenced字段可省略;流程回退 step-1 后以新一轮的call_graph_drawn为准。