name: openspec-ff-change description: 快速转发OpenSpec工件创建。当用户想要快速创建所有实现所需的工件,而不需要逐个步骤执行时使用。 license: MIT compatibility: 需要openspec CLI。 metadata: author: openspec version: “1.0” generatedBy: “1.0.0”
快速转发工件创建 - 一次性生成所有启动实现所需的内容。
输入:用户的请求应包括变更名称(kebab-case)或他们想要构建的描述。
步骤
-
如果没有提供清晰的输入,询问他们想要构建什么
使用AskUserQuestion工具(开放式,无预设选项)询问:
“你想处理什么变更?描述你想要构建或修复的内容。”
从他们的描述中,推导出一个kebab-case名称(例如,“添加用户认证” →
add-user-auth)。重要:在没有理解用户想要构建什么之前,不要继续。
-
创建变更目录
openspec new change "<名称>"这会在
openspec/changes/<名称>/处创建一个脚手架的变更。 -
获取工件的构建顺序
openspec status --change "<名称>" --json解析JSON以获取:
applyRequires:实现前所需的工件ID数组(例如,["tasks"])artifacts:所有工件的列表及其状态和依赖关系
-
按顺序创建工件,直到准备就绪
使用TodoWrite工具来跟踪工件的进度。
按依赖顺序循环处理工件(先处理没有待处理依赖关系的工件):
a. 对于每个
ready(依赖关系满足)的工件:- 获取指令:
openspec instructions <artifact-id> --change "<名称>" --json - 指令JSON包括:
context:项目背景(对你的约束 - 不要在输出中包含)rules:工件特定规则(对你的约束 - 不要在输出中包含)template:用于输出文件的结构instruction:此类工件的模式特定指导outputPath:写入工件的位置dependencies:为上下文读取的已完成的工件
- 读取任何已完成的依赖文件以获取上下文
- 使用
template作为结构创建工件文件 - 应用
context和rules作为约束 - 但不要将它们复制到文件中 - 显示简要进度:“✓ 创建了 <artifact-id>”
b. 继续直到所有
applyRequires工件完成- 在创建每个工件后,重新运行
openspec status --change "<名称>" --json - 检查
applyRequires中的每个工件ID在artifacts数组中是否有status: "done" - 当所有
applyRequires工件完成后停止
c. 如果工件需要用户输入(上下文不清晰):
- 使用AskUserQuestion工具来澄清
- 然后继续创建
- 获取指令:
-
显示最终状态
openspec status --change "<名称>"
输出
完成所有工件后,总结:
- 变更名称和位置
- 创建的工件列表及简要描述
- 准备就绪:“所有工件已创建!准备实施。”
- 提示:“运行
/opsx:apply或要求我实施以开始处理任务。”
工件创建指南
- 遵循
openspec instructions中每个工件类型的instruction字段 - 模式定义了每个工件应包含的内容 - 遵循它
- 在创建新工件之前,阅读依赖工件以获取上下文
- 使用
template作为输出文件的结构 - 填充其部分 - 重要:
context和rules是对你的约束,不是文件的内容- 不要将
<context>、<rules>、<project_context>块复制到工件中 - 这些指导你写什么,但绝不应该出现在输出中
- 不要将
防护措施
- 创建所有实现所需的工件(根据模式的
apply.requires定义) - 在创建新工件之前,总是阅读依赖工件
- 如果上下文严重不清晰,询问用户 - 但偏好做出合理决策以保持动力
- 如果已经存在具有该名称的变更,建议继续该变更
- 在继续下一个之前,验证每个工件文件是否在写入后存在