openspec批量归档变更技能Skill openspec-bulk-archive-change

此技能用于批量归档已完成变更,通过智能检查代码库解决spec冲突,提升变更管理效率。关键词:批量归档、变更管理、spec冲突、openspec CLI、DevOps工具

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

名称: openspec批量归档变更 描述: 一次性归档多个已完成变更。用于归档多个并行变更时。 许可证: MIT 兼容性: 需要openspec CLI。 元数据: 作者: openspec 版本: “1.0” 生成者: “1.0.0”

一次性归档多个已完成变更。

此技能允许您批量归档变更,通过智能检查代码库处理spec冲突,确定实际实现的内容。

输入: 无需输入(提示选择)

步骤

  1. 获取活动变更

    运行 openspec list --json 获取所有活动变更。

    如果没有活动变更,通知用户并停止。

  2. 提示选择变更

    使用 AskUserQuestion 工具 进行多选,让用户选择变更:

    • 显示每个变更及其模式
    • 包括“所有变更”选项
    • 允许任何数量的选择(1+有效,2+是典型用例)

    重要: 不要自动选择。始终让用户选择。

  3. 批量验证 - 收集所有选定变更的状态

    对于每个选定变更,收集:

    a. 工件状态 - 运行 openspec status --change "<名称>" --json

    • 解析 schemaNameartifacts 列表
    • 记录哪些工件是 done 与其他状态

    b. 任务完成情况 - 读取 openspec/changes/<名称>/tasks.md

    • 计算 - [ ](未完成) vs - [x](完成)
    • 如果没有任务文件,记为“无任务”

    c. Delta specs - 检查 openspec/changes/<名称>/specs/ 目录

    • 列出存在的功能specs
    • 对于每个,提取需求名称(匹配 ### Requirement: <名称> 的行)
  4. 检测spec冲突

    构建一个映射:capability -> [触摸它的变更]

    auth -> [change-a, change-b]  <- 冲突(2+变更)
    api  -> [change-c]            <- 确定(仅1变更)
    

    当2+选定变更具有相同功能的delta specs时,存在冲突。

  5. 智能解决冲突

    对于每个冲突,调查代码库:

    a. 读取delta specs 从每个冲突变更,了解每个声称添加/修改的内容

    b. 搜索代码库 寻找实现证据:

    • 查找实现来自每个delta spec的代码
    • 检查相关文件、函数或测试

    c. 确定解决方案

    • 如果只有一个变更实际实现 -> 同步该变更的specs
    • 如果两个都实现 -> 按时间顺序应用(较早的先,较新的覆盖)
    • 如果都没有实现 -> 跳过spec同步,警告用户

    d. 记录解决方案 对于每个冲突:

    • 应用哪个变更的specs
    • 顺序(如果两个)
    • 理由(代码库中发现的内容)
  6. 显示合并状态表

    显示一个表格总结所有变更:

    | 变更               | 工件 | 任务 | Specs   | 冲突 | 状态 |
    |---------------------|-----------|-------|---------|-----------|--------|
    | schema-management   | 完成      | 5/5   | 2 delta | 无      | 准备  |
    | project-config      | 完成      | 3/3   | 1 delta | 无      | 准备  |
    | add-oauth           | 完成      | 4/4   | 1 delta | auth (!)  | 准备* |
    | add-verify-skill    | 1 剩余    | 2/5   | 无    | 无      | 警告   |
    

    对于冲突,显示解决方案:

    * 冲突解决:
      - auth spec:将应用 add-oauth 然后 add-jwt(两个都实现,时间顺序)
    

    对于不完整变更,显示警告:

    警告:
    - add-verify-skill:1个不完整工件,3个不完整任务
    
  7. 确认批量操作

    使用 AskUserQuestion 工具 进行单一确认:

    • “归档N个变更?” 基于状态的选项
    • 选项可能包括:
      • “归档所有N个变更”
      • “仅归档N个准备好的变更(跳过不完整)”
      • “取消”

    如果存在不完整变更,明确说明它们将被归档并警告。

  8. 执行每个确认变更的归档

    按确定的顺序处理变更(尊重冲突解决方案):

    a. 同步specs 如果存在delta specs:

    • 使用openspec-sync-specs方法(智能合并)
    • 对于冲突,按解决方案顺序应用
    • 跟踪是否完成同步

    b. 执行归档

    mkdir -p openspec/changes/archive
    mv openspec/changes/<名称> openspec/changes/archive/YYYY-MM-DD-<名称>
    

    c. 跟踪结果 对于每个变更:

    • 成功:成功归档
    • 失败:归档期间错误(记录错误)
    • 跳过:用户选择不归档(如适用)
  9. 显示总结

    显示最终结果:

    ## 批量归档完成
    
    归档了3个变更:
    - schema-management-cli -> archive/2026-01-19-schema-management-cli/
    - project-config -> archive/2026-01-19-project-config/
    - add-oauth -> archive/2026-01-19-add-oauth/
    
    跳过了1个变更:
    - add-verify-skill(用户选择不归档不完整)
    
    Spec 同步总结:
    - 4个 delta specs 同步到主 specs
    - 1个冲突解决(auth:按时间顺序应用两个)
    

    如果任何失败:

    失败了1个变更:
    - some-change:归档目录已存在
    

冲突解决示例

示例1:仅一个实现

冲突:specs/auth/spec.md 被 [add-oauth, add-jwt] 触摸

检查 add-oauth:
- Delta 添加“OAuth Provider Integration”需求
- 搜索代码库... 找到 src/auth/oauth.ts 实现 OAuth 流程

检查 add-jwt:
- Delta 添加“JWT Token Handling”需求
- 搜索代码库... 未找到 JWT 实现

解决方案:仅 add-oauth 实现。将同步 add-oauth specs 仅。

示例2:两个都实现

冲突:specs/api/spec.md 被 [add-rest-api, add-graphql] 触摸

检查 add-rest-api(创建 2026-01-10):
- Delta 添加“REST Endpoints”需求
- 搜索代码库... 找到 src/api/rest.ts

检查 add-graphql(创建 2026-01-15):
- Delta 添加“GraphQL Schema”需求
- 搜索代码库... 找到 src/api/graphql.ts

解决方案:两个都实现。将应用 add-rest-api specs 先,
然后 add-graphql specs(时间顺序,较新的优先)。

成功时输出

## 批量归档完成

归档了N个变更:
- <变更-1> -> archive/YYYY-MM-DD-<变更-1>/
- <变更-2> -> archive/YYYY-MM-DD-<变更-2>/

Spec 同步总结:
- N个 delta specs 同步到主 specs
- 无冲突(或:M个冲突解决)

部分成功时输出

## 批量归档完成(部分)

归档了N个变更:
- <变更-1> -> archive/YYYY-MM-DD-<变更-1>/

跳过了M个变更:
- <变更-2>(用户选择不归档不完整)

失败了K个变更:
- <变更-3>:归档目录已存在

无变更时输出

## 无变更可归档

未找到活动变更。使用 `/opsx:new` 创建新变更。

防护措施

  • 允许任何数量的变更(1+有效,2+是典型用例)
  • 始终提示选择,从不自动选择
  • 早期检测spec冲突并通过检查代码库解决
  • 当两个变更都实现时,按时间顺序应用specs
  • 只有当实现缺失时跳过spec同步(警告用户)
  • 在确认前显示清晰的每个变更状态
  • 对整个批处理使用单一确认
  • 跟踪并报告所有结果(成功/跳过/失败)
  • 移动到归档时保留 .openspec.yaml
  • 归档目录目标使用当前日期:YYYY-MM-DD-<名称>
  • 如果归档目标存在,失败该变更但继续其他