归档实验工作流程中的一个已完成变更。
商店选择: 如果用户指定了一个商店(商店是在本机上注册的独立 OpenSpec 仓库)或变更位于某个商店中,请运行 openspec store list --json 发现已注册的商店 ID,然后在读写规格和变更的命令(如 new change、status、instructions、list、show、validate、archive、doctor、context)中传递 --store <id>。其他命令不接受此标志。命令打印的提示已经包含了该标志;在后续操作中请保留。如果未指定商店,命令将在最近的本地 openspec/ 根目录上操作。
输入:可选地指定变更名称。如果省略,检查能否从对话上下文中推断出来。如果描述模糊或有歧义,你必须提示用户选择可用变更。
步骤
-
如果未提供变更名称,提示用户选择
运行
openspec list --json获取可用的变更。使用 AskUserQuestion 工具 让用户选择。仅显示活跃的变更(尚未归档)。 如果可用,包含每个变更所使用的架构。
重要:不要猜测或自动选择变更。始终让用户选择。
-
检查工件完成状态
运行
openspec status --change "<name>" --json检查工件完成情况。解析 JSON 以了解:
schemaName:正在使用的工作流程planningHome、changeRoot、artifactPaths和actionContext:路径和作用域上下文artifacts:工件列表,及其状态(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>" -
显示摘要
显示归档完成摘要,包括:
- 变更名称
- 所使用的架构
- 归档位置
- 规格是否已同步(如果适用)
- 关于任何警告(未完成的工件/任务)的说明
成功输出
## 归档完成
**变更:** <change-name>
**架构:** <schema-name>
**归档至:** 从 `planningHome.changesDir`/YYYY-MM-DD-<name>/ 派生的归档路径
**规格:** ✓ 已同步到主规格(或“无差异规格”或“跳过同步”)
所有工件已完成。所有任务已完成。
护栏
- 如果未提供变更,始终提示用户选择
- 使用工件图(openspec status --json)检查完成状态
- 不要因警告而阻止归档——仅通知并确认
- 在移动到归档时保留 .openspec.yaml(它会随目录一起移动)
- 显示发生了什么情况的清晰摘要
- 如果请求同步,请使用 openspec-sync-specs 方法(代理驱动)
- 如果存在差异规格,始终运行同步评估,并在提示前显示汇总摘要