Skip to content

feat: OpenSpecUI 15 — adapt to OpenSpec CLI 1.15.x (>=1.15.0 <1.16.0) - #312

Merged
Gaubee merged 10 commits into
mainfrom
target/openspec-cli-15-line
Oct 25, 2026
Merged

Gaubee merged 10 commits into
mainfrom
target/openspec-cli-15-line

Conversation

@Gaubee

@Gaubee Gaubee commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

Summary

OpenSpecUI 15 opens a new single-series admission window for OpenSpec CLI >=1.15.0 <1.16.0 (one-line-per-series cadence; new major). CLI <1.15.0 (including the whole 1.14 v14 window), prereleases, and >=1.16.0 stay blocked by default.

  • Window + hard contract break: the ten compat constants rotate to the 15 line; CliVersionSchema.install.scope gains 'standalone' beside the four historical values (1.15.0 legally emits it; without it a standalone install's version --json fails the whole decode).
  • CLI-owned new surfaces, zero OpenSpecUI consumption this line: update --dry-run/--json (B1: needs a typed contract that does not exist) and openspec install (B2: standalone-aware update-method display deferred like the v14 version --check precedent). Standalone CLI installs are installed and upgraded with openspec install (upstream version-check.ts standaloneUpgradeCommand() reinstalls in place); openspec update remains the project instruction-file updater.
  • Agent delivery registry rotates to series '1.15' with every 1.14 physical fact carried forward (upstream AI_TOOLS is byte-identical — no new/removed tools); generator staleness baseline rotates to 1.15.0 with the historical provenance union retained.
  • Fixture matrix rotates: new pinned openspec-cli-115 (1.15.0) positive line; openspec-cli-114 (1.14.3) becomes the below-admitted boundary (identity, unsupported classification, update --dry-run unknown option / install unknown command — both verified on the real binary); openspec-cli-113 retires; 112/111 stay as historical generator-evidence facts. CP1 observation: the renamed matrix ran 47 tests against the 1.15.0 binary with zero contract reds (the 1.14-era brace-depth / x-keys / unapplied-content semantics all survive).
  • Cross-package alignment: 14 admitted-session sample files rotate to 1.15.0 with capability-gated expectations restored (two "helpful green" traps caught and fixed: batch-status fakes silently falling back to serial); tool-subscription-router now derives its version string from OPENSPEC_CLI_TARGET_SERIES; four pin guards rotate (prepare script, upstream-contract-regression, cold-start, w2 — the w2 script has no version in its filename and was caught by content-only grep).
  • Docs: AGENTS.md 2026-10-25 decision paragraph + pin line; CLAUDE.md pointer; README.md / README-zh.md re-faced for v15 with byte-exact archives README-1.14.0.md / README-zh-1.14.0.md; packages/cli/README.md re-scoped to the v15 line per the Release README law.
  • Changeset: major ×4 (@openspecui/core, @openspecui/server, @openspecui/web, openspecui), fixed-group propagation.

Evidence map: references/openspec-1.15.0-report.md (pin v1.15.0, 8e0288df); change artifacts under openspec/changes/target-openspec-cli-15-line/.

Review chain

Dual-channel Round-A (Codex 7/10 + research 5/10 → two P0s folded) → Round-B approval 9/10 → implementation Slices 1–4 → Round-C 7/10 with three P1s → all three resolved (P1-2 standalone guidance corrected to openspec install per upstream version-check.ts — commit dd75315; P1-3 was a brief omission, implementation was already correct) → Round-C2: 9/10, approved for PR.

Evidence

Focused suites: official-cli-v15 matrix + pin regression 54 green; boundary + rotated core suites 185 green; server rotated suites 187 green (incl. cold-start integration); web rotated suites 75 green; core/server/web typechecks green.

Broad gates: format:check / lint:ci / typecheck / test:ci / test:browser:ci all green. Note: the first test:ci run had exactly one failure (worktree-web-assets-product-chain.test.ts) caused by a port collision with the concurrently running walkthrough app server (lsof-evidenced, PID held :3100); a zero-change rerun of that file passed and a full test:ci rerun was recorded green afterward.

Vision smoke walkthrough (automated evidence only; final browser walkthrough stays Owner-owned): 5/5 PASS — admission under a 1.15.0 session with no mismatch dialog and Settings showing "Current 1.15 line"; Dashboard; Changes list + Detail + Evidence tab; Config → Agents inventory (50 official entries) rendering; Context ready. The negative case was also exercised: the system's 1.14.1 CLI correctly triggers the version-mismatch dialog. Environment note for local repro: the app resolves a bare openspec via $SHELL -lc, so a shell env that reorders PATH can shadow a caller-supplied PATH prefix (SHELL=/bin/sh was used to pin the walkthrough binary).

Release notes (for the changeversion/release step)

Standalone CLI users: install and upgrade the OpenSpec CLI with openspec install — the standalone upgrade command reinstalls the binary in place. openspec update remains the project instruction-file updater. Never switch an install to a different method on your own.

Gaubee added 10 commits October 25, 2026 15:38
…e (target-openspec-cli-15-line Slice 1)

Rotate the ten compat constants to the single-series >=1.15.0 <1.16.0 window
(TARGET_MAJOR 15, TARGET/SUPPORTED_SERIES 1.15, MIN/TARGET_MIN/RECOMMENDED_MIN
1.15.0, NEXT_SERIES_MIN 1.16.0, ACCEPTED/RECOMMENDED_RANGE >=1.15.0 <1.16.0,
REFERENCE_TAG_PATTERN v1.15.*) and admit the 1.15 standalone distribution in
the CliVersionSchema install.scope closed enum beside the four historical
values. Rotate the two Keep-in-sync mirrors (diagnose-cli-runner.mjs,
setup-example.ts) with their mirror-consistency test.

Red->green evidence: CliVersionSchema standalone decode failed on the old
enum (Invalid enum value, received 'standalone') then passed; the rewritten
compat classification suite failed 7 cases on the old constants (literal
anchors, 1.15-current, retired-window copy, below/above range, mismatch
naming, 1.15 capability grant, no-capability set) then passed 10/10; mirror
suite failed 3 mirror-consistency cases on rotated core then passed 3/3.
Known expected reds deferred to Slice 4: workflow.test.ts capability-argv
cases still sampling 1.14.0 as an admitted session (3 failures).
…-cli-15-line Slice 2)

Pure series rotation with zero upstream tool changes (AI registry byte-identical;
1.15.0 adds no tools): AgentCliSeries '1.15', '1.14' joins the provenance history
union with the 14/15 ordering cases, parseOpenSpecCliSeries admits only minor 15,
and every physical fact (ten 1.14 entries, Kilo command-path rotation, provenance
gates) carries forward. PINNED_AGENT_GENERATOR_VERSION rotates to 1.15.0 and the
replacement label to the 1.15 line.

Helpful-green rewrites: registry selection now proves selectAgentDeliveryRegistry
('1.15.0') returns the full inventory (the old suite asserted the 1.15 gap), the
1.14 classification cases move to the retired-lines history ('1.14.3' joins the
below-range set), and the parse matrix admits 1.15.x while prerelease/2.0.0/
garbage/null stay empty. Server projection gains the retired-1.14 boundary
(1.14.3 -> [] agreeing with the Core selector) and the admitted-1.15 session
(1.15.0 -> full inventory, value-sequence equality with the selector; the service
strips internal provenance fields before publishing); router fixture session
rotates to 1.15.0.

Green gates: core registry/tool-init-state/policy/compat battery 99/99, server
projection+router 20/20, core+server+web typechecks exit 0. Known expected reds
deferred to Slice 4: web admitted-session fixtures still sampling 1.14.0 as the
current line (35 failures in 5 files, capability/gate-copy class) and the three
workflow.test.ts capability-argv cases from Slice 1.
…c-cli-15-line Slice 3)

- Rename the 13 official-cli-v14 matrix suites to official-cli-v15 (git-tracked
  renames R081-R097); imports rotate to the new v15 helper and identity
  literals/describe titles rotate to the pinned 1.15.0 executable.
- Add __tests__/official-cli-v15-fixtures.ts (PINNED_OPENSPEC_V15_VERSIONS =
  ['1.15.0'], bins -> openspec-cli-115) mirroring the v14 helper surface.
- Keep official-cli-v14-fixtures.ts at 1.14.3 as the boundary-only service;
  header intent rewritten for the boundary role.
- package.json: add openspec-cli-115 (@fission-ai/openspec@1.15.0), retire
  openspec-cli-113 with its 1.13.2 negatives; 114 stays @1.14.3.
- Rewrite the boundary suite as official-cli-v14-boundary-fixtures.test.ts:
  1.14.3 identity, v15-gate unsupported classification, 1.15-only standalone
  surfaces absent on the real binary (update --dry-run unknown option, install
  unknown command, both exit 1 with empty stdout), and the v14-era members
  asserted present (LocatedTask sourcePath/line, status warnings advisory,
  show-Spec names, working list --archived).
- Move the 14th helper consumer (opsx-kernel-schemas-root) to the v15 helper
  with local bins key 1.15.0; update the stale fixture-role notes in
  tool-init-state/agent-command-content to point at the v15 suite.
- CP1 observation: renamed matrix ran 13 files / 47 tests green on 1.15.0 with
  zero contract reds before any contract assertion changed (the three
  1.14.2-era semantic fixtures - x- keys, brace-depth guard, unapplied-content
  warning - all survive on 1.15.0).
- Audit: zero code references to the v14 helper outside the boundary suite and
  zero live openspec-cli-113 references.
…ndow (target-openspec-cli-15-line Slice 4)

- Admitted-session samples rotate to 1.15.0 across core/server/web; the kernel
  capability-transport fixture pair follows the d0af507 precedent (admitted
  1.15.0 / retired 1.14.0) and the two silent-serial-fallback fakes now report
  1.15.0 so the batch transport is genuinely exercised; capability-gated
  expectations restored (capabilities115 admitted, 114 first below-window
  refusal); cli-health-gate boundary reworked (admitted 1.15.x, retired 1.13/1.14
  window, prerelease 1.15.0-rc.1, next-series block 1.16.0+).
- Pin guards rotate to 8e0288df / 1.15.0: prepare-openspec-reference, the core
  upstream-contract-regression, the server root-context cold-start integration,
  and the w2 project-binding playwright guard (found by content grep — the file
  name carries no version). tool-subscription-router now derives its npm install
  spec from OPENSPEC_CLI_TARGET_SERIES instead of a hardcoded @1.14 literal.
- cli-validate-findings-router range copy rotates to >=1.15.0 <1.16.0.
- Docs: CLAUDE.md session pointer to the 1.15.0 report; AGENTS.md pin line plus
  the 2026-10-25 v15 architecture decision; README.md/README-zh.md re-faced for
  the 1.15 line with byte-exact archives README-1.14.0.md/README-zh-1.14.0.md
  (c6a0b78 precedent); packages/cli/README.md re-scoped to v15 per the release
  README law; settings.tsx install-stream comment rotated (comment-only).
- Major changeset x4 (fixed-group propagation); release notes point standalone
  CLI users at openspec install / openspec update.
- Gates: official-cli-v15 matrix + pin regression 54 green; boundary + rotated
  core suites 185 green; server rotated suites 187 green; web rotated suites 75
  green; core/server/web typechecks green; prettier clean on the explicit set.
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