名称: openspec-continue-change 描述: 通过创建下一个工件来继续处理 OpenSpec 更改。当用户想要推进更改、创建下一个工件或继续工作流程时使用。 许可证: MIT 兼容性: 需要 openspec CLI。 元数据: 作者: openspec 版本: “1.0” 生成者: “1.0.0”
通过创建下一个工件来继续处理更改。
输入: 可选指定更改名称。如果省略,检查是否可以从对话上下文中推断。如果模糊或模糊,必须提示可用的更改。
步骤
-
如果没有提供更改名称,提示选择
运行
openspec list --json获取按最近修改排序的可用更改。然后使用 AskUserQuestion 工具 让用户选择要处理的更改。展示前 3-4 个最近修改的更改作为选项,显示:
- 更改名称
- 模式(来自
schema字段,如果存在,否则为 “spec-driven”) - 状态(例如,“0/5 任务”, “完成”, “无任务”)
- 最近修改时间(来自
lastModified字段)
将最近修改的更改标记为"(推荐)",因为这可能是用户想要继续的。
重要: 不要猜测或自动选择更改。始终让用户选择。
-
检查当前状态
openspec status --change "<name>" --json解析 JSON 以理解当前状态。响应包括:
schemaName: 正在使用的工作流模式(例如,“spec-driven”, “tdd”)artifacts: 工件数组及其状态(“完成”, “就绪”, “阻塞”)isComplete: 布尔值,指示是否所有工件都完成
-
根据状态行动:
如果所有工件都完成(
isComplete: true):- 祝贺用户
- 显示最终状态,包括使用的模式
- 建议:“所有工件已创建!您现在可以实现此更改或存档它。”
- 停止
如果工件准备好创建(状态显示状态为
status: "就绪"的工件):- 从状态输出中选取第一个状态为
status: "就绪"的工件 - 获取其指令:
openspec instructions <artifact-id> --change "<name>" --json - 解析 JSON。关键字段是:
context: 项目背景(对您的约束 - 不要包含在输出中)rules: 工件特定规则(对您的约束 - 不要包含在输出中)template: 用于输出文件的结构instruction: 模式特定指导outputPath: 写入工件的位置dependencies: 已完成的工件,用于读取上下文
- 创建工件文件:
- 读取任何已完成的依赖文件以获取上下文
- 使用
template作为结构 - 填充其部分 - 应用
context和rules作为约束写入 - 但不要将它们复制到文件中 - 写入指令中指定的输出路径
- 显示创建的内容以及现在解锁的内容
- 在创建一个工件后停止
如果没有工件就绪(全部阻塞):
- 这不应该在使用有效模式时发生
- 显示状态并建议检查问题
-
创建工件后,显示进度
openspec status --change "<name>"
输出
每次调用后显示:
- 创建了哪个工件
- 正在使用的工作流模式
- 当前进度(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>块复制到工件中 - 这些指导您写什么,但不应出现在输出中
- 不要将