SuperAPI AI 工具集

openspec-archive-change

部署与运维

查看项目

更新于 11-02 02:06

技能介绍

用途

该技能用于在 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、变更工件或归档摘要中。
  • 归档不因警告而阻塞,仅提示并确认。
  • 其他平台、收费、价格等信息暂未提供。