用途
openspec-bulk-archive-change 用于在一次操作中批量归档多个已完成的变更(change)。它适合在存在多个并行变更、需要集中归档时使用。该技能会智能处理规格冲突,通过检查代码库来确定实际已实现的内容。
主要能力
- 批量归档多个变更,支持任意数量(1 个以上即可,2 个以上为典型场景)。
- 通过
openspec list --json获取所有活动变更。 - 使用 AskUserQuestion 工具进行多选,让用户选择要归档的变更,并显示每个变更及其 schema,包含“所有变更”选项。
- 对所选变更进行批量校验,收集以下状态:
- 工件状态:运行
openspec status --change "<name>" --json,解析 schemaName 和 artifacts 列表,标记哪些工件已完成。 - 任务完成情况:读取
openspec/changes/<name>/tasks.md,统计未完成(- [ ])与已完成(- [x])任务;若无任务文件则记为“No tasks”。 - 增量规格:检查
openspec/changes/<name>/specs/目录,列出存在的能力规格,并提取需求名称(匹配### Requirement: <name>的行)。
- 工件状态:运行
- 检测规格冲突:构建“能力 -> 触及该能力的变更”映射,当 2 个以上所选变更对同一能力有增量规格时判定为冲突。
- 智能解决冲突:对每个冲突调查代码库,读取各冲突变更的增量规格,搜索实现证据(相关文件、函数或测试),据此决定解决方式:
- 若只有一个变更实际已实现,则同步该变更的规格。
- 若两者都已实现,则按时间顺序应用(较旧者先,较新者覆盖)。
- 若两者都未实现,则跳过规格同步并警告用户。
- 展示合并状态表,汇总所有变更的工件、任务、规格、冲突与状态,并显示冲突解决说明与不完整变更的警告。
- 使用单次确认提示用户确认批量操作,选项可能包括“归档全部 N 个变更”“仅归档 N 个就绪变更(跳过不完整)”“取消”。
- 按确定顺序逐一执行归档:
- 若存在增量规格,先同步规格(采用 openspec-sync-specs 的智能合并方式),冲突按解决顺序应用。
- 执行归档:
mkdir -p openspec/changes/archive与mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>。 - 记录每个变更的结果:成功、失败(记录错误)或跳过。
- 输出最终汇总,包括已归档、跳过、失败的变更,以及规格同步摘要。
使用方式
无需输入参数,技能会提示用户进行选择。主要步骤为:获取活动变更、提示选择、批量校验、检测冲突、智能解决冲突、展示合并状态表、确认批量操作、逐一执行归档、显示汇总。
适用场景
- 需要同时归档多个并行变更时。
- 多个变更触及同一能力规格、需要判断实际实现并解决冲突时。
- 需要在不完整变更存在的情况下,仍可选择归档并附带警告时。
限制与注意事项
- 始终提示用户选择,绝不自动选择。
- 仅当实现缺失时才跳过规格同步(并警告用户)。
- 归档目录目标使用当前日期:
YYYY-MM-DD-。 - 移动到归档时保留
.openspec.yaml。 - 若归档目标已存在,则该变更失败,但继续处理其他变更。
- 若没有活动变更,则告知用户并停止;提示可使用
/opsx:new创建新变更。 - 若存在不完整变更,需明确说明它们将带警告归档。
- 使用单次确认覆盖整个批次。
- 跟踪并报告所有结果(成功/跳过/失败)。