在實驗工作流程中封存一個已完成的變更。
儲存庫選擇: 如果使用者指定了一個儲存庫(一個儲存庫是此機器上註冊的獨立 OpenSpec 倉庫),或者工作位於其中,請執行 openspec store list --json 來發現已註冊的儲存庫 ID,然後在讀取或寫入規格和變更的指令(new change、status、instructions、list、show、validate、archive、doctor、context)中傳遞 --store <id>。其他指令不接受此旗標。指令輸出的提示已包含該旗標;請在後續操作中保留它。若無指定儲存庫,指令會在最近的本地 openspec/ 根目錄中執行。
輸入:可選,指定變更名稱。若省略,請檢查是否能從對話上下文中推斷。如果模糊或不明確,你必須提示可用的變更。
步驟
-
若未提供變更名稱,提示選擇
執行
openspec list --json以取得可用的變更。使用 AskUserQuestion 工具 讓使用者選擇。僅顯示活躍的變更(尚未封存的)。 若可行,包含每個變更所使用的 schema。
重要事項:請勿猜測或自動選擇變更。務必讓使用者選擇。
-
檢查成品完成狀態
執行
openspec status --change "<name>" --json以檢查成品完成度。解析 JSON 以了解:
schemaName:正在使用的 workflowplanningHome、changeRoot、artifactPaths與actionContext:路徑與作用域上下文artifacts:成品列表及其狀態(done或其他)
若有任何成品狀態不是
done:- 顯示警告,列出未完成的成品
- 使用 AskUserQuestion 工具 確認使用者是否要繼續
- 若使用者確認,則繼續
-
檢查任務完成狀態
讀取任務檔案(通常為
tasks.md)以檢查是否有未完成的任務。計算標記為
- [ ](未完成)與- [x](完成)的任務數量。若發現未完成的任務:
- 顯示警告,說明未完成的任務數量
- 使用 AskUserQuestion 工具 確認使用者是否要繼續
- 若使用者確認,則繼續
若任務檔案不存在: 直接進行,不發送與任務相關的警告。
-
評估增量規格同步狀態
使用狀態 JSON 中的
artifactPaths.specs.existingOutputPaths檢查是否存在增量規格。若無,則直接進行,不發送同步提示。若存在增量規格:
- 將每個增量規格與
openspec/specs/<capability>/spec.md中對應的主要規格進行比較 - 判斷會套用哪些變更(新增、修改、刪除、重新命名)
- 在提示之前顯示合併摘要
提示選項:
- 如果需要變更:「立即同步(建議)」、「不進行同步即封存」
- 如果已經同步:「立即封存」、「無論如何都同步」、「取消」
若使用者選擇同步,請使用 Task 工具(subagent_type: "general-purpose",提示詞:「使用 Skill 工具為變更 '' 調用 openspec-sync-specs。增量規格分析:<包含分析的增量規格摘要>」)。無論選擇為何,都繼續進行封存。
- 將每個增量規格與
-
執行封存
在
planningHome.changesDir下建立archive目錄(如果不存在):mkdir -p "<planningHome.changesDir>/archive"使用目前日期產生目標名稱:
YYYY-MM-DD-<change-name>檢查目標是否已存在:
- 如果是:因錯誤而失敗,建議重新命名現有封存或使用不同日期
- 如果否:將
changeRoot移動到封存目錄
mv "<changeRoot>" "<planningHome.changesDir>/archive/YYYY-MM-DD-<name>" -
顯示摘要
顯示封存完成摘要,包含:
- 變更名稱
- 所使用的 Schema
- 封存位置
- 規格是否已同步(如果適用)
- 關於任何警告的備註(未完成的成品/任務)
成功時輸出
## 封存完成
**變更:** <change-name>
**Schema:** <schema-name>
**封存至:** 從 `planningHome.changesDir` 推導出的路徑/YYYY-MM-DD-<name>/
**規格:** ✓ 已同步至主要規格(或「無增量規格」或「跳過同步」)
所有成品已完成。所有任務已完成。
防護措施
- 若未提供變更,務必提示選擇
- 使用成品圖表(openspec status --json)進行完成度檢查
- 不要因警告而阻止封存 - 只需告知並確認
- 移動至封存時保留 .openspec.yaml(它會隨目錄一起移動)
- 顯示清楚的事件摘要
- 如果要求同步,使用 openspec-sync-specs 方法(由代理驅動)
- 若存在增量規格,務必先執行同步評估並在提示前顯示合併摘要