Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 09 Jul 11:01
Immutable release. Only release title and notes can be modified.
7cee9ba

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 openspec calls and a two-step store setup. New commands:

    command what it does
    cospec store <sub> manage stores: setup/register (auto-init) / unregister / remove / ls / doctor
    cospec context a store's cross-repo working-set brief (--json, --code-workspace)
    cospec workset <sub> personal cross-repo working views: create / list / remove / open
    cospec show <item> read a change or spec as markdown or JSON
    cospec view the OpenSpec dashboard
    cospec schemas / cospec schema which|validate|fork|init inspect and fork resolvable schemas
    cospec templates list 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-init

    validate now accepts --all/--changes/--specs, list --specs lists living specs, and cospec doctor folds in OpenSpec's own root-relationship, reference, and store-health diagnostics (read-only, never repair) when the operating root is store-backed or declares references:. 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 mutating store subcommands 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 by cospec schema fork/init, riding the legacy lane through validate/apply/archive while 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 no schemaVersion. schema fork/init refuse (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 canon schema.yaml.

  • Public docs site (cospec.aligned.team) (#17 by @replygirl) — a VitePress documentation site under apps/docs with 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 generated llms.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/, and openspec/.cospec-manifest.json are 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 with Argument list too long as the lockfile grew. The payload is now aggregated and submitted entirely through temp files, so it no longer depends on ARG_MAX.

Full Changelog: v0.3.0...v0.4.0