openspec-update-change
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRevise a change's existing planning artifacts and keep them coherent. Never edit code.
Store selection: If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run to discover registered store ids, then pass on the commands that read or write specs and changes (, , , , , , , , , ). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local root.
openspec store list --json--store <id>new changestatusinstructionslistshowvalidatearchivedoctorcontextviewopenspec/Input: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
Steps
-
Select the changeIf a name is provided, use it. Otherwise:
- Infer from conversation context if the user mentioned a change
- Auto-select if only one active change exists
- If ambiguous, run to get available changes sorted by most recently modified, and ask the user to select one
openspec list --json
When prompting, present the top 3-4 most recently modified changes as options, showing:- Change name
- Schema (from field if present, otherwise "spec-driven")
schema - Status (e.g., "0/5 tasks", "complete", "no tasks")
- How recently it was modified (from field)
lastModified
Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to update.Always announce: "Using change: <name>" and how to override (e.g.,)./openspec-update-change <other> -
Get the change's artifactsbash
openspec status --change "<name>" --jsonParse the JSON to understand current state. The response includes:- : The workflow schema being used (e.g., "spec-driven")
schemaName - : Array of artifacts with their status ("done", "skipped", "ready", "blocked")
artifacts - : Boolean indicating if all artifacts are complete
isComplete - ,
planningHome,changeRoot, andartifactPaths: path and scope context. Use these instead of assuming repo-local paths.actionContext
The artifact ids and paths come from the active schema - do NOT assume them, and do NOT branch on hardcoded artifact names. Custom schemas must work unchanged.The files to edit are- the concrete files that exist on disk, already glob-expanded for glob artifacts (e.g.artifactPaths.<id>.existingOutputPaths). Do NOT write tospecs/**/*.md: for a glob artifact it is still the glob pattern, not a real file.resolvedOutputPath -
Understand the request
- If the user asked for a specific revision ("the design now uses X"), that is the starting edit.
- If they only said "update" / "make this coherent", treat it as a coherence review: read the existing artifacts and check them against each other for contradictions, gaps, and duplication.
-
Read and reconcile
- Read the artifact(s) the request touches and the change's other existing artifacts.
- Apply the requested edit. Then check every other existing artifact against it - in ANY direction: an edit to a later artifact may require revising an earlier one, not only the other way around. Build order is a useful reading order, not a constraint on which artifacts may be revised.
- Note everything that is now inconsistent, missing, or contradictory.
- Revise only files that already exist (). Do NOT create artifacts that don't exist yet, and do NOT invent new files under a glob artifact - note them and point the user to
existingOutputPathsto create them./openspec-continue-change - If the change is already coherent, say so and make no edits.
-
Confirm and apply, one artifact at a time
- Show each proposed revision and why. Write only after the user confirms.
- If the user rejects a revision, do not write it - leave that artifact unchanged.
- When a substantial rewrite is needed, get that artifact's rules and template first:
bash
openspec instructions <artifact-id> --change "<name>" --json
-
Point to the next step (guidance only - NEVER act on it)
- Artifacts still missing -> suggest to create them.
/openspec-continue-change - Change already implemented (tasks checked off / already applied) -> the code may no longer match the revised plan; suggest to carry the delta into code.
/openspec-apply-change - Everything done and implemented -> suggest .
/openspec-archive-change
- Artifacts still missing -> suggest
Output
After each invocation, show:
- Which artifacts were revised (and which proposed revisions were rejected)
- Anything deferred to (not-yet-created artifacts or files)
/openspec-continue-change - Where the change stands and the recommended next command
Guardrails
- Planning artifacts only - NEVER edit implementation code. If the revised plan implies code changes, stop and point to .
/openspec-apply-change - Use the artifact ids and paths reported by ; never branch on hardcoded artifact names.
openspec status - Edit only the concrete files in ; never write to a glob
existingOutputPaths.resolvedOutputPath - Do not advance the build frontier: no new artifacts, no new files under glob artifacts - that is 's job.
/openspec-continue-change - Confirm every edit with the user before writing.
- If the request changes the change's intent rather than refining it, recommend starting fresh with (the "Update vs. Start Fresh" heuristic).
/openspec-new-change - and
/openspec-continue-changemay not be installed (core profile). When suggesting one that is unavailable, point to the CLI instead:/openspec-new-changeshows the next artifact andopenspec status --change "<name>" --jsonexplains how to create it.openspec instructions <artifact-id> --change "<name>" --json
修订变更的现有规划工件并保持它们的一致性。绝不编辑代码。
存储库选择:如果用户指定了存储库(存储库是在本机注册的独立OpenSpec仓库),或者工作内容位于某个存储库中,请运行来发现已注册的存储库ID,然后在读取或写入规范和变更的命令(、、、、、、、、、)中添加参数。其他命令不接受此参数。命令输出的提示信息已包含该参数;后续操作请保留该参数。如果未指定存储库,命令将作用于最近的本地根目录。
openspec store list --jsonnew changestatusinstructionslistshowvalidatearchivedoctorcontextview--store <id>openspec/输入:可选择指定变更名称。如果未指定,请检查是否可以从对话上下文推断。如果模糊或有歧义,必须提示用户选择可用的变更。
步骤
-
选择变更如果提供了名称,则使用该名称。否则:
- 如果用户提到过某个变更,从对话上下文推断
- 如果只有一个活跃变更,自动选择
- 如果存在歧义,运行获取按最近修改时间排序的可用变更,并让用户选择一个
openspec list --json
提示时,展示最近修改的3-4个变更作为选项,包含:- 变更名称
- 架构(如果存在字段则使用该字段,否则为“规范驱动”)
schema - 状态(例如:“0/5 任务”、“已完成”、“无任务”)
- 最近修改时间(来自字段)
lastModified
将最近修改的标记为“(推荐)”,因为这很可能是用户想要更新的变更。务必告知:“正在使用变更:<名称>”以及如何覆盖(例如:)。/openspec-update-change <其他变更> -
获取变更的工件bash
openspec status --change "<name>" --json解析JSON以了解当前状态。响应包含:- :正在使用的工作流架构(例如:“规范驱动”)
schemaName - :包含状态(“done”、“skipped”、“ready”、“blocked”)的工件数组
artifacts - :布尔值,表示所有工件是否已完成
isComplete - 、
planningHome、changeRoot和artifactPaths:路径和范围上下文。请使用这些信息,不要假设仓库本地路径。actionContext
工件ID和路径来自活跃架构——不要假设它们,也不要基于硬编码的工件名称进行分支处理。自定义架构必须无需修改即可正常工作。需要编辑的文件是——磁盘上已存在的具体文件,对于glob工件(例如artifactPaths.<id>.existingOutputPaths)已进行glob展开。不要写入specs/**/*.md:对于glob工件,它仍然是glob模式,而非真实文件。resolvedOutputPath -
理解请求
- 如果用户要求进行特定修订(“现在设计使用X”),这就是起始编辑点。
- 如果用户仅说“更新”/“使其保持一致”,则将其视为一致性审查:读取现有工件并检查它们之间是否存在矛盾、遗漏和重复。
-
读取与协调
- 读取请求涉及的工件以及变更的其他现有工件。
- 应用请求的编辑。然后检查所有其他现有工件是否与之一致——任何方向:对后续工件的编辑可能需要修订先前的工件,而不仅仅是反过来。构建顺序是有用的读取顺序,但不是限制哪些工件可以修订的约束。
- 记录所有现在不一致、缺失或矛盾的内容。
- 仅修订已存在的文件()。不要创建尚未存在的工件,也不要在glob工件下创建新文件——记录这些情况并引导用户使用
existingOutputPaths来创建它们。/openspec-continue-change - 如果变更已经一致,请告知用户并不要进行任何编辑。
-
确认并应用,逐个工件进行
- 展示每个提议的修订内容及其原因。仅在用户确认后再写入。
- 如果用户拒绝某个修订,不要写入——保持该工件不变。
- 当需要大幅重写时,先获取该工件的规则和模板:
bash
openspec instructions <artifact-id> --change "<name>" --json
-
指出下一步(仅提供指导——绝不主动执行)
- 仍有缺失的工件 -> 建议使用来创建它们。
/openspec-continue-change - 变更已实施(任务已勾选/已应用)-> 代码可能不再与修订后的计划匹配;建议使用将差异同步到代码中。
/openspec-apply-change - 所有工作已完成并实施 -> 建议使用。
/openspec-archive-change
- 仍有缺失的工件 -> 建议使用
输出
每次调用后,展示:
- 哪些工件已修订(以及哪些提议的修订被拒绝)
- 哪些内容推迟到处理(尚未创建的工件或文件)
/openspec-continue-change - 当前变更的状态以及推荐的下一个命令
约束规则
- 仅处理规划工件——绝不编辑实现代码。如果修订后的计划意味着需要修改代码,请停止操作并引导用户使用。
/openspec-apply-change - 使用返回的工件ID和路径;绝不要基于硬编码的工件名称进行分支处理。
openspec status - 仅编辑中的具体文件;绝不写入glob类型的
existingOutputPaths。resolvedOutputPath - 不要推进构建边界:不创建新工件,不在glob工件下创建新文件——这是的职责。
/openspec-continue-change - 写入前务必让用户确认每个编辑。
- 如果请求改变了变更的意图而非细化它,建议使用重新开始(“更新 vs. 重新开始”启发式规则)。
/openspec-new-change - 和
/openspec-continue-change可能未安装(核心配置文件)。当建议使用的命令不可用时,请指向CLI:/openspec-new-change会显示下一个工件,openspec status --change "<name>" --json会说明如何创建它。openspec instructions <artifact-id> --change "<name>" --json