# $cm-prd 模式文件 — 变更模式

> 由 $cm-prd 模式判断检测到 `--change` 时读取本文件。规则内容与主文件同源拆分,语义未变。

## 变更模式

当输入 `$cm-prd --change {N}.{feature-name} 变更内容` 时执行。

### Step C1: 定位已有 specs

在 `{SPECS_DIR}/` 中查找匹配的编号目录。

如果只传了序号（如 `--change 1`），自动匹配 `1.*` 目录。

找不到则报错提示。

### Step C2: 读取现有 specs

读取该目录下的：

- `requirements.md` — 当前需求
- `design.md` — 当前设计
- `tasks.md` — 当前任务（注意哪些已完成 `[x]`）
- `test-cases.json` — 可选 AI 测试合同；存在时按
  `../../../runtime/test-contract.md` 读取

### Step C3: 解析变更内容

变更内容可以是：

- 纯文本描述变更
- 文件路径（新的需求文档）
- URL
- `--cases {json/md/txt路径}` 或本轮直接粘贴的新测试用例

### Step C4: 对比分析

**调用 `cm-product-manager` skill 的变更影响分析**：除识别增删改外，评估波及哪些已完成任务（返工风险）、哪些验收标准失效。

变更内容涉及**交易/资产/支付/代币/证券/金融营销**时，同时协同 `cm-finance-expert`：对变更做领域正确性审核与营销红线扫描，新引入的合规问题并入变更摘要供人审。

将变更内容与现有 requirements.md 对比，识别：

- **新增**的功能需求
- **修改**的功能需求
- **删除**的功能需求
- 对验收标准的影响

### Step C5: 更新 requirements.md

- 在「需求版本」表中追加新版本行：

```markdown
## 需求版本

| 日期       | 版本 | 说明             |
| ---------- | ---- | ---------------- |
| 2026-04-11 | v1   | 初始需求         |
| 2026-04-15 | v2   | 新增微信登录方式 |
```

- 在功能需求中标注变更：

```markdown
## 功能需求

1. [F-001] 邮箱 + 密码登录
2. [F-002] 手机号 + 验证码登录
3. [F-003] Tab 切换登录方式
4. [F-004] ~~短信验证码 5 分钟过期~~ `[v2 删除]`
5. [F-005] 微信扫码登录 `[v2 新增]`
6. [F-006] 表单验证 `[v2 修改: 新增微信回调校验]`
```

### Step C6: 更新 design.md

- 追加设计版本
- 新增/修改受影响的功能模块设计
- 不动未受影响的模块
- 标注变更原因

### Step C7: 更新 tasks.md

- 追加任务版本
- 已完成的任务 `[x]` 保持不动
- 受变更影响的未完成任务标记 `[CHANGED]` 并更新描述
- 因变更作废的任务标记 `[DROPPED]`
- 新增的任务标记 `[NEW]`

```markdown
## 任务列表

### 功能 1: 登录表单

- [x] T-001: 创建登录页面和 Tab 切换组件 ~30min
- [x] T-002: 实现邮箱登录表单 ~30min
- [ ] T-003: 实现手机号登录表单 ~30min `[CHANGED v2: 去掉倒计时]`
- [ ] ~~T-004: 短信过期逻辑~~ `[DROPPED v2]`

### 功能 2: 微信登录 `[NEW v2]`

- [ ] T-008: [NEW] 微信 OAuth 回调处理 ~30min
- [ ] T-009: [NEW] 微信登录按钮组件 ~15min
```

### Step C7.5: 更新 AI 测试合同

C7 完成后先按 `runtime/test-contract.md` 更新 `test-cases.json`：保留未受影响
用例，新增/修改受影响 AC 的用例，移除已删除需求对应的 generated 用例。变更会
删除或弱化 `origin: "user"` 用例时，必须在 C4 暂停取得明确确认；未确认则保留
需求与用例并将冲突列入摘要。最后重新校验 AC→TC→Task 引用和 JSON。

### Step C8: 输出变更摘要

```
📝 需求变更: 1.user-auth v1 → v2

新增: 2 个功能需求, 2 个任务
修改: 1 个功能需求, 1 个任务
删除: 1 个功能需求, 1 个任务
未受影响: 3 个已完成任务保持不动
测试合同: 新增 2 / 修改 1 / 待删除 1

请产品审查变更后，运行 $cm-ai 继续开发（会跳过已完成任务）
```

---

## 示例用法

```bash
# 新建需求 — 提供项目文件夹路径，docs/ 下放需求文档
$cm-prd ~/projects/my-app-specs
$cm-prd /path/to/project-specs

# 需求变更 — 同样基于项目文件夹，指定要变更的 feature
$cm-prd --change 1.user-auth 新增微信扫码登录方式
$cm-prd --change 2 ~/projects/my-app-specs
```

**审批位重置**：变更落盘后，将 `{SPECS_DIR}/.cm-specs-status` 重置为
`awaiting_review`，运行 `scripts/cm-spec-manifest.py` 重算 requirements/design/tasks/
test-cases 的完整 `specFiles`，并同步兼容字段 `testCases`；按 `runtime/logging.md` 写 `spec_lifecycle/changed`、
`spec_lifecycle/awaiting_review` 和 `run_done`。改过的规格等于没审过，N1 入口闸将
再次要求确认。
