用途
该技能用于在 OpenSpec 实验性工作流中归档一个已完成的变更(change)。当用户希望在某项变更实现完毕后对其进行最终确认并归档时使用。
主要能力
- 确定目标变更:可显式提供变更名;若省略,则尝试从对话上下文推断,或在仅有一个活跃变更时自动选择;若存在歧义,则列出可用变更并请用户选择。提示时只展示尚未归档的活跃变更,并尽量显示每个变更加入使用的 schema。选定后会公告“Using change: ”及覆盖方式(如
$openspec-archive-change(Codex)或/openspec-archive-change(其他代理)<other>)。 - 存储(store)选择:若用户指定 store,或工作位于某个 store 中,先运行
openspec store list --json发现已注册的 store id,然后在读写 specs、changes 的命令(new change、status、instructions、list、show、validate、archive、doctor、context、view)上追加--store <id>,并在后续流程中保持粘性。未指定 store 时,命令作用于最近的本地openspec/根目录。 - 加载归档输入:在归档检查前运行
openspec instructions archive --change "<name>" --json,该查询为建议性可选,失败或返回无效 JSON 时不应阻断归档,而是继续无上下文、无操作指引的归档流程。成功响应中的context为必需提示级输入,需阅读并考虑相关项目事实、约定与约束;operationGuidance为可选补充建议,需逐条阅读并遵循适用且与内置归档流程兼容的条目。两者不得与内置步骤、用户明确选择、已解析路径、CLI 检查与命令契约混淆;若冲突需报告并保留控制值。 - 检查工件完成状态:运行
openspec status --change "<name>" --json,解析schemaName、planningHome、changeRoot、artifactPaths、actionContext及artifacts状态。若有工件既非 done 也非 skipped(skipped 视为满足要求,变更声明了 skip_specs),显示警告并请用户确认是否继续。 - 检查任务完成状态:读取任务文件(通常为
tasks.md),统计- [ ](未完成)与- [x](已完成)。若存在未完成任务,显示数量警告并请用户确认;若无任务文件则直接继续,不给任务相关警告。 - 评估增量规范同步状态:仅以 status JSON 中
artifactPaths.specs.existingOutputPaths作为增量规范来源;缺失或为空则跳过同步提示。若存在增量规范,逐一与<planningHome.root>/openspec/specs/<capability-path>/spec.md对应的主规范比较,确定将应用的增、改、删、重命名,并在提示前显示合并摘要。提示选项按情况为“Sync now (recommended)”“Archive without syncing”或“Archive now”“Sync anyway”“Cancel”。选择 Cancel 停止;选择不 同步或直接归档则继续归档;选择同步则先同步并验证。 - 同步与验证:在同步写入任何主规范前,运行一次
openspec instructions specs --change "<name>" --json,要求退出码为零且返回有效工件指令 JSON,否则报错并在写入主规范或移动变更前停止。有效响应若省略 rules 即为无规则情形。随后行内运行openspec-sync-specs工作流(代理驱动的智能合并),复用上述规则快照而不重新获取,且不得委托到后台任务或异步执行。同步后需针对existingOutputPaths中每个有增量规范的能力重新做比较:ADDED 需求存在;MODIFIED 需求带有增量中所述场景与描述变更且其余场景完好;REMOVED 需求已消失,若同步使某能力退休(移除其最后一条需求、留下空## Requirements)则应删除其主规范;RENAMED 需求以新名称存在且旧名称不再存在。若同步失败或任一能力不匹配,报告差异并停止,不执行归档。 - 执行归档:在
planningHome.changesDir下创建archive目录(若不存在)。目标名:变更名已以YYYY-MM-DD-开头则原样使用,否则前置当前日期YYYY-MM-DD-<change-name>,绝不叠加第二个日期。若目标已存在则报错,建议重命名现有归档或换用不同日期;否则将changeRoot移动到archive/<target-name>。移动时保留.openspec.yaml(随目录一起移动)。 - 输出摘要:成功时输出“Archive Complete”,包含变更名、使用的 schema、归档路径、规范是否已同步(仅当第 4 步验证通过才写“✓ Synced to main specs”,否则写“No delta specs”或“Sync skipped”),以及工件与任务完成情况或归档时携带的警告。
使用方式
在支持该技能的环境中,调用 openspec-archive-change(依代理不同可能写作 $openspec-archive-change 或 /openspec-archive-change),可选后接变更名。技能会按上述步骤依次执行命令、必要时与用户交互确认,最终移动目录并给出摘要。
适用场景
- OpenSpec 实验性工作流中变更实现完毕后需要正式归档。
- 需要确认工件与任务完成度、评估并同步增量规范到主规范后再归档。
- 使用 store 管理多个独立 OpenSpec 仓库、需要按 store 作用域执行命令的场景。
限制与注意事项
- 该技能面向支持运行 OpenSpec CLI 与代理工作流的环境;需要本地存在
openspec/根目录或注册的 store。 openspec instructions archive为建议性可选,旧版 CLI 不支持时应静默继续,不报错不停止。- 同步阶段必须行内执行并等待完成,绝不能在规范同步仍在进行时归档。
- 运行时上下文、操作指引与工件规则文本不得原样复制到输出文件、specs、变更工件或归档摘要中。
- 归档不因警告而阻塞,仅提示并确认。
- 其他平台、收费、价格等信息暂未提供。