name: openspec-continue-change description: 通过创建下一个工件继续处理 OpenSpec 变更。当用户想要推进变更、创建下一个工件或继续工作流程时使用。 license: MIT compatibility: 需要 openspec CLI。 metadata: author: openspec version: “1.0” generatedBy: “1.0.0”
通过创建下一个工件继续处理变更。
输入:可选指定变更名称。如果省略,检查是否可以从对话上下文中推断。如果模糊或歧义,必须提示可用变更。
步骤
-
如果未提供变更名称,提示选择
运行
openspec list --json获取按最近修改排序的可用变更。然后使用 AskUserQuestion 工具 让用户选择要处理的变更。将前 3-4 个最近修改的变更作为选项呈现,显示:
- 变更名称
- 模式(如果存在
schema字段,否则为 “spec-driven”) - 状态(例如,“0/5 任务”、“完成”、“无任务”)
- 最近修改时间(来自
lastModified字段)
将最近修改的变更标记为 “(推荐)”,因为它可能是用户想要继续的。
重要:不要猜测或自动选择变更。始终让用户选择。
-
检查当前状态
openspec status --change "<名称>" --json解析 JSON 以了解当前状态。响应包括:
schemaName:使用的流程模式(例如,“spec-driven”、“tdd”)artifacts:工件数组及其状态(“完成”、“就绪”、“阻塞”)isComplete:布尔值,指示所有工件是否完成
-
根据状态行动:
如果所有工件都完成(
isComplete: true):- 祝贺用户
- 显示最终状态,包括使用的模式
- 建议:“所有工件已创建!您现在可以实现此变更或归档它。”
- 停止
如果工件已就绪可创建(状态显示工件状态为 “就绪”):
- 从状态输出中选取第一个状态为 “就绪” 的工件
- 获取其指令:
openspec instructions <工件-id> --change "<名称>" --json - 解析 JSON。关键字段为:
context:项目背景(对您的约束 - 不要包含在输出中)rules:工件特定规则(对您的约束 - 不要包含在输出中)template:用于输出文件的结构instruction:模式特定指导outputPath:写入工件的位置dependencies:已完成工件,用于上下文
- 创建工件文件:
- 读取任何已完成的依赖文件以获取上下文
- 使用
template作为结构 - 填写其部分 - 应用
context和rules作为写作时的约束 - 但不要将它们复制到文件中 - 写入指令中指定的输出路径
- 显示创建的内容和现在解锁的内容
- 创建一个工件后停止
如果没有工件就绪(全部阻塞):
- 对于有效模式,这不应发生
- 显示状态并建议检查问题
-
创建工件后,显示进度
openspec status --change "<名称>"
输出
每次调用后,显示:
- 创建了哪个工件
- 使用的流程模式
- 当前进度(完成 N/M)
- 现在解锁了哪些工件
- 提示:“想要继续吗?只需让我继续或告诉我下一步做什么。”
工件创建指南
工件类型及其用途取决于模式。使用指令输出中的 instruction 字段来理解要创建的内容。
常见工件模式:
spec-driven 模式(提案 → 规范 → 设计 → 任务):
- proposal.md:如果不清楚,询问用户关于变更。填写原因、变更内容、能力、影响。
- 能力部分至关重要 - 列出的每个能力都需要一个规范文件。
- specs/*.md:为提案中列出的每个能力创建一个规范。
- design.md:记录技术决策、架构和实施方法。
- tasks.md:将实现分解为带复选框的任务。
tdd 模式(规范 → 测试 → 实现 → 文档):
- spec.md:功能规范,定义要构建的内容。
- tests/*.test.ts:在实现之前编写测试(TDD 红色阶段)。
- src/*.ts:实现以使测试通过(TDD 绿色阶段)。
- docs/*.md:记录已实现的功能。
对于其他模式,遵循 CLI 输出中的 instruction 字段。
护栏
- 每次调用创建一个工件
- 在创建新工件前始终读取依赖工件
- 不要跳过工件或无序创建
- 如果上下文不清晰,创建前询问用户
- 在标记进度前验证工件文件是否存在
- 使用模式的工件序列,不要假设特定工件名称
- 重要:
context和rules是对您的约束,不是文件内容- 不要将
<context>、<rules>、<project_context>块复制到工件中 - 这些指导您写作,但绝不应出现在输出中
- 不要将