v0.4.0
v0.4.0: Full OpenSpec parity, no more bare openspec
This release closes the OpenSpec command-parity gap: every everyday OpenSpec operation now has a first-class cospec command, so you never have to drop out to bare openspec. It also ships a public documentation site (cospec.aligned.team) and hardens the release pipeline.
Added
-
Full OpenSpec command coverage (#19 by @replygirl) — cospec now wraps every OpenSpec surface it previously left native, reversing v0.3.0's "store management stays native" split that forced manual
openspeccalls and a two-step store setup. New commands:command what it does cospec store <sub>manage stores: setup/register(auto-init) /unregister/remove/ls/doctorcospec contexta store's cross-repo working-set brief ( --json,--code-workspace)cospec workset <sub>personal cross-repo working views: create/list/remove/opencospec show <item>read a change or spec as markdown or JSON cospec viewthe OpenSpec dashboard cospec schemas/cospec schema which|validate|fork|initinspect and fork resolvable schemas cospec templateslist per-artifact template paths Store setup is now one command —
cospec store setup <id> --path <p>registers the root and stamps it with cospec's typed schemas (cospec init <root> --harness none), eliminating the old manual second step (opt out with--no-cospec-init):cospec store setup platform --path ./platform-store # register + auto-initvalidatenow accepts--all/--changes/--specs,list --specslists living specs, andcospec doctorfolds in OpenSpec's own root-relationship, reference, and store-health diagnostics (read-only, never repair) when the operating root is store-backed or declaresreferences:. Every new read-only/personal command is a disciplined passthrough — a version-asserted spawn, an exit-code allow-list, a stdout deny-list, and a guaranteed single JSON document on--json— while mutatingstoresubcommands verify their own disk/registry post-condition rather than trusting the wrapped exit code. -
Legacy (forked) schema changes (#19 by @replygirl) —
cospec new <legacy-schema> <slug>runs a change against a project-local schema created bycospec schema fork/init, riding the legacy lane throughvalidate/apply/archivewhile keeping cospec's schema-agnostic hard gates (tasks, scenario preservation, filesystem move, blocker fan-out) and delegating structural checks to OpenSpec. It prints a reduced-guarantees note and stamps noschemaVersion.schema fork/initrefuse (exit 1, before spawning the binary) any destination name that collides with one of the 11 canon cospec types, so a fork can never overwrite a canonschema.yaml. -
Public docs site (cospec.aligned.team) (#17 by @replygirl) — a VitePress documentation site under
apps/docswith guides (installation, workflow, harness setup), concept pages (relation to OpenSpec, types & artifacts, apply & archive, verification, blocking changes), and full reference (commands, configuration, validation rules), plus generatedllms.txt/llms-full.txt. The site builds and deploys per release, so it always matches the released CLI.
Fixed
-
Managed files stamped with the correct version on release (#18 by @replygirl) — managed files that embed the cospec version (
generatedBy: cospec@X.Y.Z) under.claude/,.codex/,.opencode/, andopenspec/.cospec-manifest.jsonare now regenerated inside the version-bump commit, rather than trailing a release by one version until a separate restamp. Also caught and corrected 31 files that had drifted since v0.3.0. -
Release bump survives large lockfiles (#21 by @replygirl) — the release bump commit step was passing its GraphQL payload (embedding base64-encoded
bun.lock) through jq's argv, which failed withArgument list too longas the lockfile grew. The payload is now aggregated and submitted entirely through temp files, so it no longer depends onARG_MAX.
Full Changelog: v0.3.0...v0.4.0