我的博客
返回首页

archive

分类:.claude/commands/opsx
发布于:
阅读时间:14 分钟

在实验性工作流中归档已完成的变更。

输入: 可选地在

/opsx:archive
后指定变更名称(例如
/opsx:archive add-auth
)。如果省略,检查是否可以从对话上下文中推断。如果模糊或含糊不清,必须提示可用的变更。

步骤

  1. 如果没有提供变更名称,提示选择

    运行

    openspec list --json
    获取可用的变更。使用 AskUserQuestion 工具 让用户选择。

    仅显示活动的变更(尚未归档)。 如果可用,包含每个变更使用的 schema。

    重要: 不要猜测或自动选择变更。始终让用户选择。

  2. 检查 artifact 完成状态

    运行

    openspec status --change "<name>" --json
    检查 artifact 完成情况。

    解析 JSON 以了解:

    • schemaName
      : 正在使用的工作流
    • artifacts
      : artifact 列表及其状态(
      done
      或其他)

    如果有任何 artifact 未完成:

    • 显示警告,列出未完成的 artifacts
    • 提示用户确认继续
    • 如果用户确认,继续
  3. 检查任务完成状态

    读取 tasks 文件(通常是

    tasks.md
    )以检查未完成的任务。

    统计标记为

    - [ ]
    (未完成)与
    - [x]
    (完成)的任务数量。

    如果发现未完成的任务:

    • 显示警告,显示未完成任务的数量
    • 提示用户确认继续
    • 如果用户确认,继续

    如果不存在 tasks 文件:继续,不显示任务相关警告。

  4. 评估 delta spec 同步状态

    openspec/changes/<name>/specs/
    检查 delta specs。如果不存在,继续而不提示同步。

    如果 delta specs 存在:

    • 将每个 delta spec 与
      openspec/specs/<capability>/spec.md
      中对应的主 spec 进行比较
    • 确定将应用哪些更改(添加、修改、删除、重命名)
    • 在提示前显示组合摘要

    提示选项:

    • 如果需要更改:"立即同步(推荐)"、"不同步归档"
    • 如果已同步:"立即归档"、"无论如何同步"、"取消"

    如果用户选择同步,使用 Task 工具(subagent_type: "general-purpose", prompt: "使用 Skill 工具调用 openspec-sync-specs 进行变更 '<name>'。Delta spec 分析:<包含分析的 delta spec 摘要>")。无论选择如何,继续归档。

  5. 执行归档

    如果归档目录不存在,创建它:

    mkdir -p openspec/changes/archive
    

    使用当前日期生成目标名称:

    YYYY-MM-DD-<change-name>

    检查目标是否已存在:

    • 如果存在:失败并显示错误,建议重命名现有归档或使用不同日期
    • 如果不存在:将变更目录移动到归档
    mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
    
  6. 显示摘要

    显示归档完成摘要,包括:

    • 变更名称
    • 使用的 schema
    • 归档位置
    • Spec 同步状态(已同步 / 跳过同步 / 无 delta specs)
    • 关于任何警告的说明(未完成的 artifacts/tasks)

成功时的输出

## 归档完成

**变更:** <change-name>
**Schema:** <schema-name>
**归档到:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ 已同步到主 specs

所有 artifacts 完成。所有任务完成。

成功时的输出(无 Delta Specs)

## 归档完成

**变更:** <change-name>
**Schema:** <schema-name>
**归档到:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** 无 delta specs

所有 artifacts 完成。所有任务完成。

带警告的成功时的输出

## 归档完成(带警告)

**变更:** <change-name>
**Schema:** <schema-name>
**归档到:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** 跳过同步(用户选择跳过)

**警告:**
- 带有 2 个未完成的 artifacts 归档
- 带有 3 个未完成的任务归档
- Delta spec 同步被跳过(用户选择跳过)

如果这不是有意的,请检查归档。

错误时的输出(归档已存在)

## 归档失败

**变更:** <change-name>
**目标:** openspec/changes/archive/YYYY-MM-DD-<name>/

目标归档目录已存在。

**选项:**
1. 重命名现有归档
2. 如果现有归档是重复的,删除它
3. 等待不同的日期再归档

护栏

  • 如果未提供,始终提示进行变更选择
  • 使用 artifact 图(openspec status --json)进行完成检查
  • 不要因警告阻止归档 - 只是通知并确认
  • 移动到归档时保留 .openspec.yaml(它随目录一起移动)
  • 显示发生了什么的清晰摘要
  • 如果请求同步,使用 Skill 工具调用
    openspec-sync-specs
    (代理驱动)
  • 如果 delta specs 存在,始终运行同步评估并在提示前显示组合摘要
#workflow#archive#experimental