用途
openspec-apply-change 用于实施 OpenSpec 变更的待完成任务。它围绕变更的任务清单,对照真实代码逐项推进,每次只处理一项任务,只有真正完成后才把 - [ ] 勾选为 - [x]。该技能适用于“实施这个变更”等场景。
主要能力
- 选择变更:若给定名称则直接使用;否则从上下文中推断,或在只有唯一活动变更时自动选择。若存在歧义,则运行 openspec list --json 让用户选择,并始终声明正在使用哪个变更。
- 检查状态:通过 openspec status --change "<name>" --json 读取 schemaName 以及哪个工件承载任务。
- 获取应用指令:运行 openspec instructions apply --change "<name>" --json,返回 contextFiles(工件 ID 到文件路径)、任务进度、带状态的任务列表以及动态指令。若 state 为 "blocked"(缺少工件),建议改用 /openspec-continue-change;若 state 为 "all_done",则祝贺并建议 /openspec-archive-change。
- 阅读上下文文件:在开始前阅读 contextFiles 下列出的每个文件。对于 rhdh-spec-driven,包括 proposal、specs、design 和 tasks。
- 选择执行模式:依据 /rhdh-spec-driven-schema 的 schema.yaml apply 块,机械、低风险的工作使用 direct 模式;语义复杂、受 ADR 约束或跨层范围广的工作使用 team 模式(implementer 加独立 verifier 子智能体)。在改动前声明选择和理由,运行中不得静默切换。
- 推进任务:持续处理待办任务直到完成或阻塞。显示当前活动任务,做最小且聚焦的改动,完成后立即将 - [ ] 改为 - [x],然后继续下一项。遇到不明确任务、实施暴露设计问题、错误或用户中断时暂停。
- 记录日志:随时调用 /openspec-journal,开始时记录 mode.chosen;每项任务记录 task.start/task.complete(team 模式下按分配范围记录);team 模式下每个判定记录 verifier.result;暂停时记录 task.blocked;有分量的决策记录 decision;停止前最后一行和恢复时第一行记录 handoff。同时保留该处描述的默认 turn 书挡(turn.start/turn.end)。
- 展示状态:完成或暂停时显示本次会话完成的任务、总体进度(N/M),并给出归档建议或暂停说明及选项。
使用方式
在实现过程中,展示每项任务的开始和完成。完成时显示最终进度和归档就绪状态。暂停时显示问题、2-3 个选项和“Other approach”,然后等待。日志方面,开始调用 /openspec-journal 记录 mode.chosen,每项任务记录开始与完成,遇到阻塞记录 task.blocked,关键决策记录 decision,并在停止和恢复时记录 handoff,同时保留默认的 turn 书挡。
适用场景
适用于依据 OpenSpec 提案、规格和设计实施变更任务的工作流,尤其适合需要逐项跟踪任务进度、并在实施过程中保持设计一致性的场景。既可用于机械、低风险的直接实施,也可用于语义复杂或跨层范围广、需要独立验证的团队模式实施。
限制
- 开始前必须始终阅读上下文文件。
- 改动需保持最小并限定在每项任务范围内。
- 遇到错误、阻塞或需求不明确时必须暂停,绝不猜测。
- 必须使用 CLI 输出中的 contextFiles,绝不假定文件名。
- 若实施过程中发现设计问题,应暂停并建议更新工件,而不是静默偏离设计。
- 本次会话尝试的每项任务必须要么随匹配的代码改动被勾选,要么明确报告暂停原因和选项,绝不能悄悄半途而废,并且必须写入本次会话的应用阶段日志事件。