## 目标筛选策略

> 本文件定义第一阶段的编排流程——确认输出目录、获取扫描目标、保存分析草稿。

### 1. 确认输出目录

1. 询问用户确认输出目录（默认：`code-review_result/`）
2. 如果输出目录已存在，询问用户是重命名备份还是直接删除（默认：备份）
3. 创建输出目录

后续所有阶段的中间草稿和最终报告都将写入此目录。记录技能根路径为 `<skill-root>`，后续所有子任务 prompt 中的 reference 路径都基于此目录。

### 2. 获取扫描目标

支持以下三种模式：

**模式一：分支扫描**（默认）— 用户提供源分支和目标分支名称：
```bash
git diff <目标分支>..<源分支> --name-only --diff-filter=AM
```

**模式二：文件扫描** — 用户提供文件路径，支持 `:起始行:行数`：
- `src/app.ts`
- `src/app.ts:10:50`（从第10行开始，扫描50行）

**模式三：目录扫描** — 用户提供目录路径，递归扫描所有非空文件。

**扫描模式判定规则**（按用户提供的内容自动识别）：
- 包含两个分支名称 → 分支扫描
- 包含文件路径（带扩展名） → 文件扫描
- 包含目录路径 → 目录扫描
- 无法判定时，询问用户确认

### 3. 项目环境识别

1. 识别编程语言、类型系统（静态/动态）和内存管理模型（手动管理：C/C++/Rust；自动管理：Java/JS/Python/Go）
2. 读取构建配置文件（`package.json`、`pom.xml`、`go.mod`）识别框架和关键依赖
3. 识别 API 框架（Express/FastAPI/Spring/Gin 等）和认证机制（JWT/Session/OAuth 等）
4. 识别数据库访问方式（ORM / Raw Query / Query Builder）

### 4. 保存扫描分析草稿

写入 `<输出目录>/.draft-01-change-analysis.md`：

```
## 审查范围
- 扫描模式：...
- 扫描目标：...
（分支扫描模式下还包括源分支、目标分支、MR 地址）

## 项目环境
- **语言/类型系统**：...（静态类型 / 动态类型）
- **内存管理模型**：手动管理 / 自动管理
- **框架**：...
- **API 框架**：...
- **认证机制**：...
- **数据库访问**：ORM / Raw Query / Query Builder

## 扫描文件列表
- file1.ts
- file2.ts
...
```
