---
name: openmole-apply
description: mole:apply — 执行当前 change 下一个未完成的 B-Txx
---

# OpenMole Apply — 执行重构

> **路径解析说明**：
> - `{cwd}` = 用户运行 mole 命令时的当前工作目录（目标项目根目录）
> - `{config_dir}` = OpenMole 用户级配置目录（`~/.config/openmole/`）
> - 项目级文件（`config.yaml`、`changes/`）位于 `{cwd}/openmole/`
> - 共享资源（`templates/`）位于 `{config_dir}/`

## 何时使用

用户运行 `mole:apply`，且当前 change 有未完成任务。

## 工作区解析

1. 读取 `{cwd}/openmole/config.yaml` → `current_change`
2. `{change_dir}` = `{cwd}/openmole/changes/{change_name}/`
3. 无 `current_change` → **停止**，提示先 `mole:explore`

## 级别感知

从 `tasks.md` 中任务条目的 **级别** 字段推断当前级别（ARCH / DESIGN / IMPL），自动切换到对应子目录的文档链。

## 选取任务

1. 读取 `{change_dir}/{level}/tasks.md` §3
2. 下一 `[ ]` 的 **B-Txx**，依赖均已 `[x]`
3. **每次 invocation 仅一个任务**

## 执行步骤（级别特定）

### IMPL（6 步）

| 步骤 | 动作 | 写操作门禁 |
|------|------|-----------|
| ① | 确认 BS-ID 与 badsmells 一致 | 只读 |
| ② | 补测（语言对应测试框架） | 展示 diff → 用户确认 |
| ③ | 测绿 | 只读 |
| ④ | 应用重构手法（语言感知） | 展示 diff → 用户确认 |
| ⑤ | 回归测绿 | 只读 |
| ⑥ | **用户确认** | 最终确认 |

### DESIGN（7 步）

| 步骤 | 动作 | 写操作门禁 |
|------|------|-----------|
| ① | 确认 BS-ID 与 badsmells 一致 | 只读 |
| ② | 识别接缝（Feathers 技术） | 只读 |
| ③ | 测试安全网 | 展示 diff → 用户确认 |
| ④ | 应用解依赖技术 | 展示 diff → 用户确认 |
| ⑤ | 应用重构 | 展示 diff → 用户确认 |
| ⑥ | 回归测绿 | 只读 |
| ⑦ | **用户确认** | 最终确认 |

### ARCH（8 步）

| 步骤 | 动作 | 写操作门禁 |
|------|------|-----------|
| ① | 确认 BS-ID 与 badsmells 一致 | 只读 |
| ② | 影响分析 | 展示报告 → 用户确认 |
| ③ | 测试安全网（契约测试） | 展示 diff → 用户确认 |
| ④ | 选择架构模式 | 只读（用户决策）|
| ⑤ | 迁移/回滚计划（可豁免） | 展示计划 → 用户确认 |
| ⑥ | 增量执行（每步可回退） | **每步** 展示 diff → 用户确认 |
| ⑦ | 回归测绿 | 只读 |
| ⑧ | **用户确认** | 最终确认 |

## 写操作确认门禁（跨级约束）

**任一步骤涉及写操作时**，AI 必须先展示：
1. 待变更文件列表
2. 变更内容摘要（diff 或结构性描述）
3. 风险提示（影响范围 / 是否涉及共享接口）

用户输入 `Y` 或 `确认` 后，AI 才执行写操作。

**该门禁不可豁免。**

## 完成后

- `{change_dir}/{level}/tasks.md` 标记 `[x]`
- 满足 DoD 时更新 `{change_dir}/{level}/badsmells.md` §2.0
- 若还有未完成的任务，建议继续执行 `mole:apply`
- 若所有任务已完成，建议执行 `mole:archive` 归档此 change

## OpenMole 规约摘要（内嵌于各 Skill，非独立文件）

### constitution §2 — 三级坏味道

| 级别 | ID前缀 | 范围 |
|------|--------|------|
| 架构级 | ARCH | 模块化、耦合、内聚、层次、边界、演进 |
| 设计级 | DESIGN | 封装、继承、模块化、冗余 |
| 实现级 | IMPL | 函数、命名、参数、注释、语言惯用法 |

### constitution §3 — 八项第一性原则

清晰性、一致性、可读性、复用性、可扩展性、健壮性、安全性、简洁性。

### constitution §3a — 安全原则（写操作门禁）

> 所有写操作（文档/代码的新建、修改、删除）必须由 AI 生成操作范围与变更 diff，展示给用户并获得明确确认后方可执行。**该门禁不可豁免。**

### constitution §4 — 标准重构步骤（级别特定）

**IMPL（6 步）**：① 确认坏味道 / ② 补测 / ③ 测绿 / ④ 应用重构手法（语言感知）/ ⑤ 回归测绿 / ⑥ **用户确认**（写操作门禁）

**DESIGN（7 步）**：① 确认坏味道 / ② 识别接缝（Feathers）/ ③ 测试安全网 / ④ 解依赖 / ⑤ 应用重构 / ⑥ 回归测绿 / ⑦ **用户确认**（写操作门禁）

**ARCH（8 步）**：① 确认坏味道 / ② 影响分析 / ③ 测试安全网 / ④ 选择架构模式 / ⑤ 迁移计划（可豁免）/ ⑥ 增量执行 / ⑦ 回归测绿 / ⑧ **用户确认**（写操作门禁）

### constitution §5 — 执行粒度

每次 `mole:apply` 仅处理一个未完成任务。

### specification §4 — badsmells 条目

**级别** + 六字段 + §2.0 状态：**未清除** / **已消除** / **部分残余**。

### specification §7 — 修订历史

升版时 **提交版本** = `git rev-parse HEAD`，未提交填 `—`。

## RED FLAGS

- 测试未绿仍标记完成
- 跳过用户确认
- 一次 apply 多个任务
- 写操作未展示 diff 即执行
- 未问询用户即修改生产代码
