将增量规范从变更同步至主规范。
这是一个由代理驱动的操作——您将读取增量规范并直接编辑主规范以应用变更。这允许智能合并(例如,添加一个场景而不复制整个需求)。
存储选择: 如果用户命名了一个存储(存储是在此机器上注册的独立 OpenSpec 仓库),或者工作存在于某个存储中,请运行 openspec store list --json 发现已注册的存储 ID,然后在读取或写入规范和变更的命令(new change, status, instructions, list, show, validate, archive, doctor, context)中传递 --store <id>。其他命令不接受此标志。命令输出的提示信息已包含该标志;请在后续操作中保留它。没有存储时,命令作用于最近的本地 openspec/ 根目录。
输入:可选择指定变更名称。如果省略,则检查是否可以从对话上下文中推断。如果模糊或不明确,您必须提示用户选择可用的变更。
步骤
-
如果未提供变更名称,提示用户选择
运行
openspec list --json获取可用变更。使用 AskUserQuestion 工具 让用户选择。显示包含增量规范(位于
specs/目录下)的变更。重要:不要猜测或自动选择变更。始终让用户选择。
-
解析变更上下文
运行:
openspec status --change "<名称>" --json -
查找增量规范
使用状态 JSON 中的
artifactPaths.specs.existingOutputPaths作为增量规范文件列表。每个增量规范文件包含以下部分:
## ADDED Requirements- 需要添加的新需求## MODIFIED Requirements- 对现有需求的更改## REMOVED Requirements- 需要删除的需求## RENAMED Requirements- 需要重命名的需求(FROM:/TO: 格式)
如果未找到增量规范,请通知用户并停止。
-
对于每个增量规范,将变更应用到主规范
对于 CLI 返回的每个仓库本地能力增量规范路径:
a. 读取增量规范 以了解预期的变更
b. 读取主规范
openspec/specs/<能力>/spec.md(可能尚不存在)c. 智能应用变更:
ADDED Requirements:
- 如果主规范中不存在该需求 → 添加它
- 如果需求已存在 → 更新以匹配(视为隐式 MODIFIED)
MODIFIED Requirements:
- 在主规范中找到该需求
- 应用变更——可以是:
- 添加新场景(无需复制现有场景)
- 修改现有场景
- 更改需求描述
- 保留增量中未提及的场景/内容
REMOVED Requirements:
- 从主规范中删除整个需求块
RENAMED Requirements:
- 找到 FROM 需求,重命名为 TO
d. 如果能力尚不存在,创建新的主规范:
- 创建
openspec/specs/<能力>/spec.md - 添加 Purpose 部分(可以简短,标记为 TBD)
- 添加 Requirements 部分,包含 ADDED 需求
-
显示摘要
应用所有变更后,汇总:
- 更新了哪些能力模块
- 做了哪些更改(添加/修改/删除/重命名的需求)
增量规范格式参考
## ADDED Requirements
### Requirement: New Feature
系统应当做某事。
#### Scenario: Basic case
- **WHEN** 用户执行 X
- **THEN** 系统执行 Y
## MODIFIED Requirements
### Requirement: Existing Feature
#### Scenario: New scenario to add
- **WHEN** 用户执行 A
- **THEN** 系统执行 B
## REMOVED Requirements
### Requirement: Deprecated Feature
## RENAMED Requirements
- FROM: `### Requirement: Old Name`
- TO: `### Requirement: New Name`
关键原则:智能合并
与程序化合并不同,您可以应用部分更新:
- 要添加一个场景,只需在 MODIFIED 下包含该场景——不要复制现有场景
- 增量代表意图,而不是整体替换
- 使用您的判断力合理合并变更
成功时的输出
## Specs Synced: <变更名称>
更新的主规范:
**<能力1>**:
- 添加了需求:“新功能”
- 修改了需求:“现有功能”(添加了 1 个场景)
**<能力2>**:
- 创建了新规范文件
- 添加了需求:“另一个功能”
主规范现已更新。该变更仍处于活跃状态——实现完成后请归档。
防护措施
- 在进行更改前,读取增量规范和主规范
- 保留增量中未提及的现有内容
- 如果某些内容不清楚,请询问澄清
- 在操作过程中显示您正在更改的内容
- 该操作应该是幂等的——运行两次应得到相同结果