Skip to content

CLI parity with upstream OpenSpec v1.4.1 (release v0.3.0) - #3

Merged
oonid merged 3 commits into
masterfrom
change/cli-parity-upstream
Jun 25, 2026
Merged

oonid merged 3 commits into
masterfrom
change/cli-parity-upstream

Conversation

@oonid

@oonid oonid commented Jun 25, 2026

Copy link
Copy Markdown
Owner

CLI parity with upstream OpenSpec v1.4.1 (v0.3.0)

Closes the remaining CLI-surface gaps vs upstream v1.4.1 identified by the earlier parity audit, authored and tracked via the OpenSpec workflow
(openspec/changes/cli-parity-upstream/). 26 files, +2.6k/−283.

⚠ Breaking: the flat openspec config --set/--get/--list flags are replaced by upstream-style subcommands (see below). Hence the minor bump to 0.3.0.

Added

  • config subcommands — path | list | get <key> | set <key> <value> | unset <key> | reset --all | edit | profile [preset] (replaces the flat flags). reset requires --all; set validates enum values (profile, delivery).
  • feedback <message> [--body <text>] — files a GitHub issue via the gh CLI, with a manual issue-URL fallback when gh is missing/unauthenticated. (Explicit user action, not telemetry.)
  • schema fork <source> [name] / schema init <name>, copy/scaffold a project-local schema (joining the existing schema which|validate).
  • templates [--schema <name>] [--json] — show resolved template paths per artifact.
  • set change <name> --initiative <id> — link a repo-local change to an initiative.
  • new change flags: --json, --goal, --affected-areas, --initiative/--store/--store-path.
  • show spec-filter flags (JSON-only): --requirements, --requirement <n>, --no-scenarios.
  • validate --concurrency <n> — bounded parallel validation (also reads OPENSPEC_CONCURRENCY).
  • Global --no-interactive accepted as a no-op for upstream compatibility.

Changed / Fixed

  • show --json and new change --json now emit the upstream payload shapes (camelCase, nested change/initiative, rich deltas).
  • Built-in (package) schema resolution now uses the embedded spec-driven definition instead of a dev-only vendor/OpenSpec/schemas path, so installed binaries work from any directory.
  • ChangeMetadata gains goal/affected_areas.

Out of scope (documented)

  • The interactive view TUI dashboard, and the deprecated spec/change noun command groups + experimental alias.

Verification

  • cargo fmt --all -- --check, cargo clippy --all-targets -- -D warnings, cargo test (lib + 26 integration), all clean.
  • openspec validate --all → 10/10.

oonid added 3 commits June 22, 2026 23:32
Authored via the OpenSpec workflow (proposal/design/specs/tasks; 4/4 valid).
Closes the CLI-surface gaps the parity audit found vs upstream v1.4.1:

- config subcommands (path/list/get/set/unset/reset/edit/profile) — replaces
  the flat --set/--get/--list (BREAKING)
- feedback <message> (reuses telemetry transport + opt-out)
- show spec-filter flags (--requirements / --requirement <n> / --no-scenarios)
- new change flags (--json/--goal/--affected-areas/--initiative/--store/--store-path)
- validate --concurrency <n>
- --no-interactive accepted as a global no-op
- fix: package-schema resolution uses the embedded schema for installed
  binaries (not the dev-only vendor/OpenSpec/schemas path)

Out of scope (documented): the `view` TUI dashboard, and the deprecated
spec/change noun groups + `experimental` alias.

Spec deltas: cli-commands (MODIFIED new/show/validate + ADDED feedback /
no-interactive / package-schema-resolution), config-management (ADDED config
subcommand surface). No code yet — this is the plan.
…ack, flags)

Implements the cli-parity-upstream change (groups 1-7), reviewed and revised.

Commands & flags:
- config: subcommand group `path/list/get/set/unset/reset/edit/profile`,
  replacing the flat `--set/--get/--list` (BREAKING). `reset` requires `--all`;
  `set` validates enum values (profile ∈ core/custom, delivery ∈
  both/skills/commands).
- `feedback <message> [--body]`: files a GitHub issue via the `gh` CLI, with a
  manual issue-URL fallback when gh is missing/unauthenticated (explicit user
  action — not telemetry, not opt-out-gated).
- `show`: spec-filter flags `--requirements` / `--requirement <n>` /
  `--no-scenarios` (JSON-only; mirror upstream filterSpec — 1-based bounds,
  conflict + json-required checks).
- `new change`: `--json` (upstream `{change:{id,path,metadataPath,schema},
  initiative?}` shape), `--goal`, `--affected-areas`, and
  `--initiative/--store/--store-path` linking (reuses the initiatives
  resolution + `.openspec.yaml` metadata).
- `validate`: `--concurrency <n>` bounded worker pool (default 6) with
  deterministic sorted output; resolves `--concurrency` / `OPENSPEC_CONCURRENCY`
  / default.
- global `--no-interactive` accepted as a no-op for upstream compatibility.

Fixes:
- schema resolution: the built-in schema resolves from the embedded definition
  instead of the dev-only `vendor/OpenSpec/schemas` path, so installed binaries
  work from any directory.
- `ChangeMetadata` gains `goal`/`affected_areas` (optional, snake_case).
- telemetry: drop the unused feedback event path.

cargo test (lib + 26 integration), fmt, clippy --all-targets -D warnings clean.
- bump version 0.2.0 -> 0.3.0 (minor: removes the flat config flags — a
  breaking CLI surface change — plus several new commands/flags)
- CHANGELOG [0.3.0]: config subcommands, feedback (GitHub issue + --body),
  schema fork/init, templates, set change, show spec-filters,
  validate --concurrency, --no-interactive, embedded package-schema resolution
- README: add templates / schema / set / feedback to the command table and
  correct the feedback description (GitHub issue, not telemetry)
- docs/STATE.md: v0.3.0 release row, current-version section, known gaps
- mark cli-parity-upstream tasks.md groups 1-8 complete

cargo test (lib + 26 integration), fmt, clippy --all-targets -D warnings clean;
validate --all 10/10; binary reports 0.3.0.
@oonid
oonid merged commit 36efb88 into master Jun 25, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant