What's New in v1.13.0
Archive and the delta parser stop quietly changing or dropping what you wrote, and apply now tells you when a change has no specs.
New
- Apply flags a change with no delta specs -
openspec instructions applyused to report a change as ready whenever its tasks existed, even with no spec deltas at all, which is the stateopenspec validaterejects. It now warns in both text and--json, and names both ways out: write the specs, or declareskip_specs: true.
Improved
- Explore finds your existing specs - Generated guidance never named
openspec list --specs, so an agent asked to read the current specs enumerated in-flight changes instead and reported the step done against the wrong thing. Explore now lists the spec inventory beside the change list, and reads a capability with the store-aware command. - Init and update name the workflows your profile left out - A
/opsx:command that was never installed used to read as a broken setup. Both commands now say which workflows are missing and how to add them. - Propose reads project context before planning - Context is loaded from the selected project or store root before any planning decision. In a directory with no OpenSpec root, propose stops without writing and offers to initialize rather than creating one silently.
Fixed
- Archive no longer edits your fenced code - A requirement documenting a sample with two or more blank lines in a row had that sample rewritten on every archive. Blank-line tidying is now fence-aware, which matters for YAML, Python, and expected-output fixtures.
- Removals and renames written with
*or+now take effect - CommonMark allows all three bullet markers, but only-was read. A removal or rename written the other way matched nothing: validate passed, archive exited 0 reporting success, and the requirement stayed exactly as it was. - Every delta section applies, not just one copy - A file with two
## ADDED Requirementssections silently kept one of them, so archive applied less than was written and moved the change to the archive anyway. You do not have to repeat a header deliberately to hit this: a delta documenting OpenSpec's own syntax inside a fenced example produces the duplicate on its own. - Capabilities whose bullets wrap can be retired again -
retire_capabilitiesrefused any spec whose scenario bullets ran onto a second line, which is most of them in a repo that wraps prose at a column limit. Specs bulleted with+are covered too. - Update repairs damaged command files -
openspec updatedecided a tool was current from its skill files alone, so a hand-edited or truncated command file left it printing "All 1 tool(s) up to date" and repairing nothing. It now compares command-file content as well.
New Contributors
- @dwin-gharibi made their first contribution in #1800
Full Changelog: v1.12.0...v1.13.0