デルタスペックの変更をメインスペックに同期します。
これはエージェント駆動型の操作です。デルタスペックを読み取り、変更を適用するためにメインスペックを直接編集します。これにより、インテリジェントなマージ(例:要件全体をコピーせずにシナリオを追加するなど)が可能になります。
ストアの選択: ユーザーがストア(このマシンに登録された独立した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 "<name>" --json -
デルタスペックを検索する
status JSON の
artifactPaths.specs.existingOutputPathsをデルタスペックファイルのリストとして使用します。各デルタスペックファイルには、次のようなセクションが含まれています:
## ADDED Requirements- 追加する新しい要件## MODIFIED Requirements- 既存の要件に対する変更## REMOVED Requirements- 削除する要件## RENAMED Requirements- 名前を変更する要件(FROM:/TO: 形式)
デルタスペックが見つからない場合は、ユーザーに通知して停止します。
-
各デルタスペックについて、メインスペックに変更を適用する
CLI から返されたリポジトリローカルの機能デルタスペックパスごとに:
a. デルタスペックを読み取り、意図された変更を理解します
b. メインスペック
openspec/specs/<capability>/spec.mdを読み取ります(まだ存在しない場合もあります)c. 変更をインテリジェントに適用します:
ADDED Requirements:
- 要件がメインスペックに存在しない場合 → 追加します
- 要件がすでに存在する場合 → 一致するように更新します(暗黙の MODIFIED として扱います)
MODIFIED Requirements:
- メインスペック内の要件を見つけます
- 変更を適用します。これには以下が含まれます:
- 新しいシナリオの追加(既存のシナリオをコピーする必要はありません)
- 既存のシナリオの変更
- 要件の説明の変更
- デルタで言及されていないシナリオ/コンテンツは保持します
REMOVED Requirements:
- メインスペックから要件ブロック全体を削除します
RENAMED Requirements:
- FROM 要件を見つけ、TO に名前を変更します
d. 機能がまだ存在しない場合、新しいメインスペックを作成します:
openspec/specs/<capability>/spec.mdを作成します- Purpose セクションを追加します(簡潔で構いません。TBD とマークします)
- ADDED 要件を含む Requirements セクションを追加します
-
サマリーを表示する
すべての変更を適用した後、次の内容を要約します:
- どの機能が更新されたか
- どのような変更が行われたか(要件の追加/変更/削除/名前変更)
デルタスペック形式リファレンス
## ADDED Requirements
### Requirement: 新機能
システムは何か新しいことを行うものとする(SHALL)。
#### Scenario: 基本ケース
- **WHEN** ユーザーがXを行う
- **THEN** システムはYを行う
## MODIFIED Requirements
### Requirement: 既存機能
#### Scenario: 追加する新しいシナリオ
- **WHEN** ユーザーがAを行う
- **THEN** システムはBを行う
## REMOVED Requirements
### Requirement: 非推奨機能
## RENAMED Requirements
- FROM: `### Requirement: 旧名`
- TO: `### Requirement: 新名`
重要な原則: インテリジェントマージ
プログラムによるマージとは異なり、部分的な更新を適用できます:
- シナリオを追加するには、そのシナリオのみを MODIFIED の下に含めます。既存のシナリオをコピーする必要はありません
- デルタは意図を表し、全体を置き換えるものではありません
- あなたの判断で変更を適切にマージしてください
成功時の出力
## Specs Synced: <change-name>
Updated main specs:
**<capability-1>**:
- Added requirement: "New Feature"
- Modified requirement: "Existing Feature" (added 1 scenario)
**<capability-2>**:
- Created new spec file
- Added requirement: "Another Feature"
Main specs are now updated. The change remains active - archive when implementation is complete.
ガードレール
- 変更を加える前に、デルタスペックとメインスペックの両方を読み取ってください
- デルタで言及されていない既存のコンテンツは保持してください
- 不明な点がある場合は、明確化を求めてください
- 変更内容はその都度表示してください
- この操作は冪等であるべきです。2回実行しても同じ結果になる必要があります