--- name: intent-changes description: Manage structured change proposals for design documents with PR-like review experience. Use /intent-changes start to begin, /intent-changes propose to suggest changes, /intent-changes accept/reject to decide, /intent-changes finalize to apply. --- # Intent Changes 设计文档的结构化变更提案与协作 Review 工具。 ## 核心概念 ### Change Proposal 每个变更是一个独立提案: | 字段 | 说明 | |------|------| | **ID** | 唯一标识 (C001, C002...) | | **Type** | ADD / MODIFY / REPLACE / DELETE | | **Status** | PENDING / ACCEPTED / REJECTED | | **Target** | 变更位置 | | **Before/After** | 变更内容 | | **Decision** | 决策记录 (reviewer, timestamp, comment) | ### 状态流 ``` PENDING ──accept──> ACCEPTED ──finalize──> Applied │ └──reject──> REJECTED ``` ## 命令 | 命令 | 说明 | |------|------| | `/intent-changes start ` | 启动或恢复 review | | `/intent-changes propose` | 提出变更建议 | | `/intent-changes accept ` | 接受变更 | | `/intent-changes reject ` | 拒绝变更 | | `/intent-changes status` | 查看当前状态 | | `/intent-changes finalize` | 交互式 apply | ## 工作流程 ``` /intent-changes start ↓ ┌───────────────────┐ │ 检查 .reviews/ │ │ 有则恢复 │ │ 无则创建 │ └─────────┬─────────┘ ↓ /intent-changes propose ↓ ┌───────────────────────────────────────┐ │ 读取源文档 │ │ 与用户讨论变更内容 │ │ 生成 Change Proposal (C001, C002...) │ │ 写入 .reviews/{name}.review.md │ └─────────┬─────────────────────────────┘ ↓ /intent-changes accept/reject ↓ ┌───────────────────┐ │ 更新 status │ │ 记录 reviewer │ │ 记录 timestamp │ └─────────┬─────────┘ ↓ /intent-changes finalize ↓ ┌───────────────────────────────────────┐ │ 逐个显示 ACCEPTED 变更 │ │ 交互确认: Apply? [Y/n/view] │ │ Apply 到源文档 │ │ 生成变更摘要 │ └───────────────────────────────────────┘ ``` ## 执行步骤 ### 命令: start **输入**: 文件路径 **步骤**: 1. 验证源文件存在 2. 确定 review 文件路径: `.reviews/{basename}.review.md` 3. 如果 review 文件存在: - 读取并解析 - 显示当前状态概览 4. 如果不存在: - 创建 `.reviews/` 目录(如不存在) - 创建 review 文件,写入 frontmatter 5. 设置当前 session 的 source 和 review 路径 **输出**: ``` Review session started. Source: intent/specs/kind-system-spec.md Review: .reviews/kind-system-spec.review.md Status: 3 PENDING, 2 ACCEPTED, 1 REJECTED Commands: /intent-changes propose - 提出新变更 /intent-changes status - 查看详情 /intent-changes finalize - 应用变更 ``` ### 命令: propose **前置条件**: 已执行 start **步骤**: 1. 读取源文档内容 2. 读取当前 review 文件,获取已有提案 3. 计算下一个 ID (如已有 C001-C005,下一个是 C006) 4. 与用户讨论: - 展示源文档结构 - 使用 AskUserQuestion 询问变更类型和位置 - 收集变更内容 5. 生成 Change Proposal 块 6. 追加到 review 文件 **交互流程**: ``` 使用 AskUserQuestion: - question: "你想对哪个部分提出变更?" - header: "变更位置" - options: - "## Kind 定义" - 第一个 section - "## Actions" - 第二个 section - "## 示例" - 第三个 section - "其他位置" - 手动指定 ``` ``` 使用 AskUserQuestion: - question: "变更类型是什么?" - header: "变更类型" - options: - "ADD" - 新增内容 - "MODIFY" - 修改现有内容 - "REPLACE" - 替换整个 section - "DELETE" - 删除内容 ``` 然后收集具体内容,生成提案。 ### 命令: accept / reject **输入**: 提案 ID,可选 comment/reason **语法**: ``` /intent-changes accept C001 /intent-changes accept C001 --comment "LGTM" /intent-changes reject C002 --reason "不同意这个改法" ``` **步骤**: 1. 读取 review 文件 2. 找到对应 ID 的提案 3. 验证当前状态是 PENDING 4. 更新状态为 ACCEPTED 或 REJECTED 5. 添加 Decision 记录: - reviewer: 从 git config user.name 或 $USER 获取 - timestamp: 当前日期 - comment: 用户提供的评论 6. 写回 review 文件 **Decision 格式**: ```markdown **Decision:** - ✓ @robmao (2026-01-21): "LGTM" ``` 或拒绝时: ```markdown **Decision:** - ✗ @robmao (2026-01-21): "不同意这个改法" ``` ### 命令: status **输出详情**: ``` Review: kind-system-spec.md Source: intent/specs/kind-system-spec.md Reviewers: @robmao, @claude ───────────────────────────────── PENDING (2): C002 [MODIFY] 修改 Kind 定义的措辞 C004 [ADD] 新增性能章节 ACCEPTED (3): C001 [ADD] 新增 Action 分类说明 ✓ @robmao (2026-01-21) C003 [MODIFY] 调整示例代码 ✓ @claude (2026-01-21) C005 [DELETE] 删除过时章节 ✓ @robmao (2026-01-21) REJECTED (1): C006 [REPLACE] 重写整个文档 ✗ @robmao (2026-01-21): "改动太大" ───────────────────────────────── Next: /intent-changes finalize (3 changes ready) ``` ### 命令: finalize **前置条件**: 至少有一个 ACCEPTED 的提案 **步骤**: 1. 读取 review 文件,筛选 ACCEPTED 提案 2. 按 Target 位置排序(从文档末尾往前,避免位置偏移) 3. 对每个提案交互确认: ``` [1/3] C001 [ADD]: 新增 Action 分类说明 Target: After "## Actions" Content to add: ┌────────────────────────────────────────┐ │ Actions 分为三类: │ │ - Inline: 同步执行,决定 commit 成功与否 │ │ - Deferred: 异步执行,失败不影响 commit │ │ - Observational: 只读,可以慢 │ └────────────────────────────────────────┘ Apply this change? [Y/n/view/quit] ``` 用户选项: - `Y` (默认): Apply 并继续 - `n`: Skip 此变更(保持 ACCEPTED 状态但不 apply) - `view`: 显示完整的 before/after diff - `quit`: 中止 finalize 4. Apply 变更到源文档 5. 更新 review 文件: - 已 apply 的标记为 `[APPLIED]` - 更新 frontmatter status 为 `finalized`(如果全部处理完) 6. 输出摘要 **Apply 摘要**: ``` Finalize complete. Applied: 2 C001 - 新增 Action 分类说明 C003 - 调整示例代码 Skipped: 1 C005 - 删除过时章节 (user chose to skip) Source updated: intent/specs/kind-system-spec.md Review archived: .reviews/kind-system-spec.review.md ``` ## Review 文件格式 ### Frontmatter ```yaml --- source: intent/specs/kind-system-spec.md created: 2026-01-21 reviewers: - robmao - claude status: active --- ``` status 值: - `active`: 进行中 - `finalized`: 已完成 apply - `abandoned`: 已放弃 ### Change Proposal 块 ```markdown --- ## C001 [ADD] [PENDING] > 简短描述 **Target:** After "## Actions" **After:** ```markdown 新增的内容... ``` --- ## C002 [MODIFY] [ACCEPTED] > 简短描述 **Target:** Section "## Kind 定义" **Before:** ```markdown 原内容... ``` **After:** ```markdown 新内容... ``` **Reason:** 变更理由 **Decision:** - ✓ @robmao (2026-01-21): "LGTM" ``` ## 获取 Reviewer 名称 按优先级: 1. 命令参数 `--reviewer` 2. `git config user.name` 3. 环境变量 `$USER` ```bash # 获取方式 git config user.name || echo $USER ``` ## 边界 ### 做什么 - ✓ 结构化管理变更提案 - ✓ 追踪决策过程 - ✓ 支持多 reviewer 署名 - ✓ 交互式 apply ### 不做什么 - ✗ 格式校验 → intent-validate - ✗ Section 审批 → intent-review - ✗ 设计质量判断 → intent-critique - ✗ 实现一致性 → intent-sync ## 与其他工具配合 ``` intent-interview → 创建 Intent ↓ intent-critique → 质疑设计 ↓ /intent-changes → 管理变更提案 ← 本 Skill ↓ intent-review → 锁定 sections ↓ intent-plan → 开始实现 ``` ## 示例 ### 独立 Review ```bash # 开始 /intent-changes start intent/specs/tools-spec.md # 提出建议 /intent-changes propose # 决策 /intent-changes accept C001 /intent-changes reject C002 --reason "不需要" # 应用 /intent-changes finalize ``` ### 协作 Review ```bash # A 启动并提建议 /intent-changes start spec.md /intent-changes propose # C001-C003 # B 来 review /intent-changes accept C001 --comment "Good" /intent-changes reject C002 --reason "换个方式" # A 提新方案 /intent-changes propose # C004 替代 C002 # B 接受 /intent-changes accept C004 # 最终 apply /intent-changes finalize ```