SuperAPI AI 工具集

openspec-archive-change

编程与开发

查看项目

更新于 10-15 10:51

技能介绍

用途

openspec-archive-change 用于在实验性工作流中归档已完成的变更。当用户希望在实现完成后最终确定并归档某个变更时,可以使用该技能。

主要能力

该技能提供以下能力:

  • 变更选择:如果未提供变更名称,会运行 openspec list --json 获取可用变更,并通过 AskUserQuestion 工具让用户选择。只显示活跃变更(尚未归档),并尽可能包含每个变更使用的 schema。不会猜测或自动选择变更,始终让用户选择。
  • 工件完成状态检查:运行 openspec status --change "<name>" --json 检查工件完成情况,解析 JSON 以了解 schemaName 和 artifacts 列表及其状态。如果有工件未完成,会显示警告并让用户确认是否继续。
  • 任务完成状态检查:读取任务文件(通常是 tasks.md),统计未完成任务(- [ ])与已完成任务(- [x])。如果发现未完成任务,会显示警告并让用户确认是否继续。如果不存在任务文件,则跳过任务相关警告。
  • 增量规格同步状态评估:检查 openspec/changes/<name>/specs/ 下是否存在增量规格。如果不存在,则跳过同步提示。如果存在,则与 openspec/specs/<capability>/spec.md 下的对应主规格进行比较,确定将要应用的更改(新增、修改、删除、重命名),并在提示前显示合并摘要。提示选项包括:如果需要更改,显示“立即同步(推荐)”和“不同步直接归档”;如果已同步,显示“立即归档”、“仍然同步”和“取消”。如果用户选择同步,则手动将增量规格复制到主规格,并将同步后的规格提交到 git。无论选择如何,都会继续归档。
  • 执行归档:创建归档目录(如果不存在),使用当前日期生成目标名称 YYYY-MM-DD-<change-name>,检查目标是否已存在。如果存在则报错并建议重命名现有归档或使用不同日期;如果不存在则将变更目录移动到归档目录。
  • 显示摘要:展示归档完成摘要,包括变更名称、使用的 schema、归档位置、规格是否已同步(如适用),以及任何警告(未完成的工件/任务)。

使用方式

该技能通过一系列步骤引导用户完成归档过程。用户可以选择性地指定变更名称;如果省略,则从对话上下文中推断,如果模糊或不明确,则必须提示用户从可用变更中选择。技能会依次检查工件完成状态、任务完成状态和增量规格同步状态,并在每个可能阻塞的步骤让用户确认。最后执行归档并显示摘要。

适用场景

适用于使用实验性工作流、需要在变更实现完成后进行归档的场景。用户希望最终确定并归档某个变更时使用。

限制

  • 该技能属于实验性工作流的一部分。
  • 如果未提供变更名称且无法从上下文推断,必须提示用户选择,不会自动选择。
  • 归档不会因警告而阻塞,只会通知并确认。
  • 移动归档时会保留 .openspec.yaml(随目录移动)。
  • 如果请求同步,会将增量规格复制到 openspec/specs/(在 git 中跟踪)并提交。
  • 如果存在增量规格,始终运行同步评估并在提示前显示合并摘要。
  • 如果目标归档名称已存在,会失败并建议重命名现有归档或使用不同日期。

输出

成功时输出归档完成摘要,格式如下:

## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs (or "No delta specs" or "Sync skipped")

All artifacts complete. All tasks complete.

防护措施

  • 如果未提供变更选择,始终提示选择。
  • 使用工件图(openspec status --json)进行完成检查。
  • 不要因警告而阻塞归档——只需通知并确认。
  • 移动到归档时保留 .openspec.yaml(随目录移动)。
  • 显示清晰的摘要说明发生了什么。
  • 如果请求同步,将增量规格复制到 openspec/specs/(在 git 中跟踪)并提交。
  • 如果存在增量规格,始终运行同步评估并在提示前显示合并摘要。