chore(release): version packages#1380
Open
openspec-release-bot[bot] wants to merge 1 commit into
Open
Conversation
openspec-release-bot
Bot
force-pushed
the
changeset-release/main
branch
29 times, most recently
from
July 20, 2026 19:48
08ee775 to
25aa316
Compare
openspec-release-bot
Bot
force-pushed
the
changeset-release/main
branch
24 times, most recently
from
July 23, 2026 16:23
0e7e2c3 to
9f6e2f5
Compare
alfred-openspec
requested changes
Jul 23, 2026
alfred-openspec
left a comment
Collaborator
There was a problem hiding this comment.
The 1.7.0 candidate is green in-repo, but it still reproduces #1390 for downstream consumers: the packed manifest publishes posthog-node as ^5.46.0, and a Dependabot-style lock generated without the age policy resolved posthog-node@5.46.1, @posthog/core@1.45.1, and @posthog/types@1.398.0; pnpm@11.16.0 install --frozen-lockfile with minimumReleaseAge: 1440 then fails on those exact three entries.
Please fix the published dependency tree before release and add a packed-consumer regression for this policy. Pinning only posthog-node is not sufficient because its manifest still ranges over @posthog/core, which ranges over @posthog/types.
openspec-release-bot
Bot
force-pushed
the
changeset-release/main
branch
3 times, most recently
from
July 23, 2026 20:10
e9fa1a8 to
f193524
Compare
openspec-release-bot
Bot
force-pushed
the
changeset-release/main
branch
from
July 23, 2026 22:59
f193524 to
8128f87
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@fission-ai/openspec@1.7.0
Minor Changes
27b22abThanks @clay-good! - Addskip_specs: truechange metadata for work with no spec-level behavior change (pure refactors, tooling, docs).openspec validateaccepts a zero-delta change that declares the marker (honored only when the metadata parses under the shared change-metadata schema and names a schema that loads) and errors when the marker and delta specs are both present, the artifact graph no longer blockstaskson spec files for such changes,openspec statusrenders the specs stage as explicitly skipped, and the propose/specs guidance points to the marker instead of contradicting the validator.Patch Changes
#1404
a84ae70Thanks @clay-good! - Generated skills for tools without a command adapter (Kimi Code, Mistral Vibe, Hermes, ForgeCode, CodeArts) no longer reference/opsx:*commands that were never generated: skill cross-references, the init getting-started hint, and the profile-migration message now use each tool's documented skill invocation (Kimi Code:/skill:openspec-*; others:/openspec-*), and Codex — skills-invocable with no slash surface — gets a syntax-neutral hint that names the skill. Selections that mix invocation syntaxes print one labeled hint per distinct form, so every advertised instruction is usable by the tool it names. Whendelivery: commandswould generate nothing for a selected tool, init prints a configuration correction naming that tool, even when other tools did get commands or skills. The committed skills.sh distribution is regenerated with skill references (default/openspec-*form, as that channel installs skills only).#1363
5199f41Thanks @clay-good! - ### Featuresopenspec config set defaultStore <id>sets a machine-level fallback root: any command run outside a planning root, with no--storeflag and no projectstore:pointer, resolves to that store. It sits at the bottom of the precedence list, so--store, a local root, and a project pointer all still win. The root banner and JSONrootblock report the distinct provenancesource: "global_default", so users and tooling can tell a machine-wide default from a repo's own pointer. A stale id degrades to the underlying store error with a fix that namesopenspec config unset defaultStore.#1435
6a5171eThanks @clay-good! -openspec new changenow accepts numeric-prefixed names like100-add-featureor00001-add-auth, useful for ordering or tiering changes. Change names now use the same kebab-case grammar as store ids and change metadata (a leading digit is allowed);archivealready treated date-prefixed names as a supported convention. Uppercase, spaces, underscores, and leading/trailing or consecutive hyphens are still rejected, and every previously valid name stays valid.#1425
040a869Thanks @clay-good! - Compare config key guards literally instead of through a helper.setNestedValueanddeleteNestedValuerejected prototype-reaching key segments through a helper that did aSetlookup. That is correct, but static analysis could not follow it, so CodeQL kept reporting prototype-pollution on the very assignments the guard protects. The segments are now compared literally in the same function, still checked across the whole path before anything is written. Behavior is unchanged for every input, verified against the previous implementation across 400,000 generated cases.#1431
6a4f0d7Thanks @clay-good! - A delta spec that introduces a brand-new capability can now open with a## Purpose, andopenspec archiveuses it as the Purpose of the main spec it creates instead of writing theTBD - created by archiving change <name>. Update Purpose after archive.placeholder over it. Thespecsartifact instruction, its example, the delta template and theopenspec-sync-specsskill all tell authors and agents to write one, so the CLI and agent-driven sync paths produce the same main spec.Archive keeps the placeholder when the delta has no usable
## Purpose:## Purposeheader outside a code fence or HTML comment, or a body that is only a code fence or only a commentA carried Purpose under 50 characters is kept but warned about, since
openspec validate --strictreports it as too brief. The Purpose of an existing main spec is never touched; archive warns when it ignores a delta's Purpose there.#1437
19d4171Thanks @clay-good! -openspec archiveno longer aborts when a REMOVED delta's requirement is already gone from the main spec (the early-sync pattern the sync skill teaches): it warns, treats the removal as already applied, and reports applied-only totals. In--jsonmode those warnings are carried in a new optionalwarningsarray on the archive result. When every operation for a spec was already synced, archive skips rewriting that file instead of churning normalization differences into it. A delta that both RENAMEs and REMOVEs the same requirement is now rejected explicitly, by bothvalidateandarchive— the two spellings are compared case- and whitespace-insensitively — and a REMOVED header that differs only in case or whitespace from an existing requirement still aborts (that is a typo, not an early sync). Also fixed: the archive delta gate matches section headers case-insensitively like the parser; symlinkedspecs/<capability>/spec.mdfiles are discovered instead of silently dropped;openspec show <change>no longer prints a spurious "scenarios" flag warning; files generated for qwen and bob reference commands by their real hyphenated names (/opsx-<id>), and init's getting-started hint follows suit; apply/update/onboard guidance names the CLI fallback for profiles that don't install/opsx:continueor/opsx:new.#1411
c439a4eThanks @clay-good! - Fix phantom requirements parsed from delta specs, which madeopenspec archivewarn about problemsopenspec validatenever reported.A header inside a delta section that is not a
### Requirement:header — a divider such as### Documentation Requirements— was read as a requirement with no scenario.openspec archivewarned that it was missing a scenario, andopenspec show <change> --jsonandopenspec change listcounted it as an extra delta. The change parser now ignores those headers, matching the delta reader, so the phantom is gone from the warnings and from the JSON. Main spec parsing is unchanged.openspec archivealso no longer repeats requirement-level issues from the delta specs in its non-blocking "Proposal warnings in proposal.md" block. Each defect was printed twice there, and a## REMOVED Requirementsentry — names-only by design — was reported as missing a scenario on every correct removal. Delta spec validation still reports and blocks on genuine defects, and proposal-level warnings are unchanged.#1394
b474f81Thanks @clay-good! - ### Bug Fixesopenspec-archive-changeskill (and the matchingopsx:archivecommand) handed the spec sync to a background task and then moved the change folder immediately. The archive could move the delta specs out from under the running sync: the change ended up archived,openspec/specs/was never updated, and the summary still reportedSpecs: ✓ Synced. The sync now runs inline, and the archive only proceeds once every capability with a delta spec has been checked against it — ADDED present, MODIFIED changes applied, REMOVED gone, RENAMED under the new name and not the old. If the sync fails or a capability doesn't match, the archive stops and reports what differs instead of claiming success; nothing has moved, so you can fix it and retry.#1398
97d441aThanks @clay-good! - ### Bug Fixesopenspec-bulk-archive-changeskill (and the matchingopsx:bulk-archivecommand) offered a "Cancel" option at the confirmation prompt but never told the agent what to do with it, so the next step archived every selected change anyway. The prompt now routes each answer by intent: "Cancel" stops without archiving anything, the archive options proceed (the ready-only option archives just the changes the status table marksReadyorReady*), and any other answer re-asks instead of archiving. The single-change archive skill already routes Cancel this way; this brings the bulk variant in line.#1375
52a8bceThanks @clay-good! ---changenow accepts any change name that exists on disk (e.g. date-prefixed names like2026-07-04-voice-copilot-v1), matching whatlist,validate, andarchivealready resolve. Lookup still rejects unsafe names (path separators,.., hidden entries); the kebab-case naming rule still applies when creating a change.#1364
f58b445Thanks @clay-good! - Fixopenspec completion installdetecting the wrong shell for fish (and other)users whose interactive shell differs from their login shell. Detection now
consults the parent process before falling back to
$SHELL, so running thecommand from fish installs fish completions instead of defaulting to bash.
#1377
285dfd7Thanks @clay-good! - ### Bug Fixesrules:keys are no longer reported asUnknown artifact IDwhen they belong to a different schema. The global rules map is now validated against the union of artifact IDs across every available schema, so multi-schema projects stop seeing spurious warnings on every command (#1322).#1401
b33b15dThanks @clay-good! - Stopdesign.mdfrom restating the proposal. In the defaultspec-drivenschema, the design instruction asked for "Background, current state, constraints, stakeholders" and "What this design achieves and excludes" without saying that motivation and scope already live inproposal.md, so agents restated the proposal's Why and What Changes instead of adding the design's own value - approach, alternatives, and trade-offs. The instruction and the design template now state the boundary explicitly (the proposal covers why and what, design covers how) and tell the agent to reference those documents rather than repeat them (#1382).#1408
378d468Thanks @clay-good! - Explore now reads the project's context and rules fromopenspec/config.yaml(orconfig.yml) at the start of a session, so it reasons with the same tech stack and conventions the artifact-creating workflows already receive.#1396
60f720cThanks @clay-good! - Fixopenspec feedbackfailing when the repository does not define thefeedbacklabel. The command now retries without the label and notes that it was not applied, instead of exiting with an error and discarding the feedback.#1151
18cbf5dThanks @javigomez! - ### Fixed### Requirement:example was parsed as a real (phantom) requirement, producing spuriousvalidateerrors and risking incorrectarchiveoutput. Fenced-code detection is now shared across the Markdown parsers sovalidateandarchivebehave consistently.#1316
9b70481Thanks @mc856! - ### Bug Fixesarchiveno longer stacks a second date prefix — archiving a change whose name already starts with aYYYY-MM-DD-prefix (a common authoring convention) keeps the name as-is instead of prepending today's date. Previouslyopenspec archive 2026-07-04-voice-copilot-v1 --yesproduced2026-07-06-2026-07-04-voice-copilot-v1, and when run on a later day the folder sorted under a day on which the change did not happen. Names without a full date prefix (including partial dates like2026-07-feature) are dated as before, and the naming is now idempotent.#1374
da3907bThanks @clay-good! - fix(completion): make the PowerShell completion script parse and load againThe generated
OpenSpecCompletion.ps1contained 18 emptyswitch ($positionalIndex) { }blocks — emitted for commands whose positionals are allpath-typed (PowerShell completes paths natively, so those cases produce no clauses). A switch with no clauses is a PowerShell parse error ("Missing condition in switch statement clause"), and PowerShell parses the whole file before running it, so the script never loaded and completions never registered. The generator now skips the positional-index block entirely when no positional produces completions, so the script parses clean (18 → 0 errors) and tab completion works.#1388
9b5d2cdThanks @mc856! - ### Bug Fixesopenspec-archive-changeandopenspec-bulk-archive-changeskill/command templates (and the onboarding walkthrough's archived-path example) now mirror theopenspec archiverule: a change whose name already starts with aYYYY-MM-DD-prefix is archived under its own name, while other names get the current date prepended as before. Previously an agent following the workflow instructions on a change named2026-07-04-voice-copilot-v1producedarchive/2026-07-07-2026-07-04-voice-copilot-v1, whatever the CLI did.#1403
2d6c447Thanks @clay-good! - ### Bug Fixesopenspec-proposeandopenspec-ff-changeskills (and their/opsx:propose//opsx:ffcommands) told every agent to "Use the TodoWrite tool", which only exists in Claude Code. Codex, Cursor, Gemini, Copilot, and the other supported tools have no such tool, so agents either errored or stalled looking for it. The instruction is now runtime-neutral ("Use a todo list to track progress"), which works everywhere — including Claude Code.#1415
e2f748cThanks @clay-good! - Reject config key paths that reach the prototype chain, and update the bundledyamldependency.openspec config set --allow-unknown __proto__.polluted <value>reported success and assigned ontoObject.prototypefor the rest of the process.--allow-unknownwas meant to relax the known-key check only, but it skipped every key check, so__proto__,constructor, andprototypesegments reached the nested-write helper. Those segments are now rejected inconfig setwhether or not--allow-unknownis passed, andsetNestedValue/deleteNestedValuerefuse them regardless of caller. Ordinary keys such asfeatureFlags.myFlagbehave exactly as before.The
yamlruntime dependency moves from 2.8.2 to 2.9.0, picking up the fix for a stack overflow on deeply nested input (GHSA / advisory patched in 2.8.3).#1376
7958924Thanks @clay-good! - ### Bug Fixesopenspec archiveno longer fails withADDED failed … already existswhen a change's specs were already synced to the main specs before archiving (the early-sync pattern from thesyncworkflow). If an ADDED requirement already exists in the target spec with identical content, applying it is treated as a no-op; a same-named requirement with different content still aborts the archive as a genuine conflict (#1332).#1386
b419e96Thanks @mc856! - ### Bug Fixesopenspec archiveno longer fails withRENAMED failed … source not foundwhen a change's renames were already synced to the main specs before archiving (the early-sync pattern from thesyncworkflow). If a RENAMED requirement's source header is gone but the target header exists in the spec, applying the rename is treated as a no-op; a rename whose source and target are both missing still aborts the archive as a genuine error, and reported counts reflect only renames actually applied.#1405
5dfef4bThanks @clay-good! - ### Bug Fixesopenspec-continue-changeskill/command embedded one-line "common artifact patterns" for proposal.md, specs, design.md, and tasks.md, so agents followed those shortcuts instead of the schema'sinstructionfield whenever a custom schema reused familiar artifact names. The templates now state that theinstructionfield is the authoritative guidance, and thepropose,continue, andffworkflows direct the agent — both in the artifact-creation step and in the guidelines — to invoke a skill when the instruction delegates artifact creation to one, verifying the artifact exists afterward (fixes #777).#1415
e2f748cThanks @clay-good! - Parse spec headings in linear time when the title is padded with whitespace.Building the reference index read the first Purpose line with a regex that backtracked quadratically on a heading full of spaces: 10,000 characters of padding took 60ms, and 100,000 would have taken roughly six seconds. The heading scan is now hand-rolled and linear. Behavior is unchanged — the replacement was checked against the old implementation across 303,000 generated inputs, including CommonMark closing sequences (
## Purpose ##), seven-hash lines, and headings with no space after the hashes.#1428
81d5109Thanks @taltas! - Update current Roo Code product references to its community successor, Zoo Code.#1410
b3b05e1Thanks @clay-good! - Only advertise onboarding commands that will actually exist. Theopenspec initwelcome screen and theopenspec update"Getting started" summary listed/opsx:newand/opsx:continue, which the defaultcoreprofile never generates, so users were told to run commands that did not exist. Both surfaces now list the commands for the installed workflows. Theinitandupdatecompletion hints also name the skill (/openspec-propose) instead of a command for tools that receive no command files — Codex, and any tool under skills-only delivery.#1412
1dc670dThanks @clay-good! - ### Fixed/opsx:proposeand/opsx:ffno longer finish a change with no spec written. The workflows listed onlyproposal/design/tasksand treated the apply phase'stasksartifact as the stop condition — butstatusmarks an artifactdoneas soon as a matching file exists, so writingtasks.mdearly satisfied the loop whilespecs/<capability>/spec.mdwas never created (a spec-less change in a spec-driven tool). The loop now derives the full required set — every apply dependency plus everything it transitivelyrequires— from a singlestatuscall, creates each missing artifact, and only skips one when its owninstructionfield marks it conditional. (#1260, #788)Changed
openspec status --jsonnow reports each artifact'srequiresedges. Every entry in theartifactsarray carries arequiresarray of the ids it directly depends on, present for every status (includingdone) so agents can compute the transitive required set fromstatusalone. Additive and backward-compatible — existing fields are unchanged.#1191
7704702Thanks @mc856! - Generate Markdown commands for Qwen Code instead of deprecated TOML format. Qwen Code now recommends Markdown custom commands with YAML frontmatter; the old.qwen/commands/opsx-*.tomlfiles are cleaned up as legacy artifacts on update.#1368
de78c31Thanks @clay-good! - ### Fixesopenspec instructionsdependency block) now tell the agent to re-read dependency artifacts from disk before creating the next one, instead of trusting whatever version it saw earlier in the conversation. Previously, editingspec.mdand deletingdesign.md/tasks.mdto regenerate them could silently produce artifacts based on the stale, pre-edit content.#1392
a13abeaThanks @clay-good! - ### Fixedspecs/root from being silently dropped.validateacceptedspecs/spec.mdand counted its deltas, but the apply/archive merge only reads capability folders (specs/<capability>/spec.md), so the change could pass validation and be archived while its requirements never reachedopenspec/specs/.validatenow uses the same discovery rules as the merge path and reports the misplaced file with a fix hint, andarchiveblocks instead of completing.#1433
26f009dThanks @clay-good! - Change lookup no longer requiresproposal.md.openspec show,openspec change list/show/validate, and shell completion now resolve a change by its directory, matchingopenspec list,status,instructions, andvalidate.Previously a change created by
openspec new change— which scaffolds only.openspec.yaml— was reported asUnknown itembyopenspec showand was missing from completions andopenspec change listuntil a proposal was written, and a change from a schema with no proposal artifact was never resolvable.openspec change listnow reports the same set asopenspec list, keeps task counts for a change that has no proposal yet, and labels it(no proposal.md yet)rather than(unable to read). Showing such a change explains that the proposal is not written yet and points atopenspec status --change <name>.#1194
b7c85c7Thanks @mc856! - Fix skills-only delivery emitting/opsx:*command references. SKILL.md files generated by init, update, and workspace skill setup now reference the corresponding skills (e.g./openspec-apply-change) whendelivery: 'skills'is configured, instead of commands that were never generated.#1402
0da5f98Thanks @clay-good! - Show the main spec format in the sync-specs skill so agents stop leaving delta operation headers (## ADDED/MODIFIED Requirements) inopenspec/specs/— merged main specs with those headers parse as 0 requirements inopenspec view(#1120).