Skip to content

feat: OpenSpecUI 15 — adapt to OpenSpec CLI 1.15.x (target-openspec-cli-115-line) - #315

Closed
Gaubee wants to merge 7 commits into
mainfrom
target-openspec-cli-115-line
Closed

Gaubee wants to merge 7 commits into
mainfrom
target-openspec-cli-115-line

Conversation

@Gaubee

@Gaubee Gaubee commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Upstream @fission-ai/openspec released 1.14.2 (10-15), 1.14.3 (10-17), and 1.15.0 (10-24) after our v14 pin (1.14.1). Per the one-line-per-series cadence this opens the OpenSpecUI 15 single-series window >=1.15.0 <1.16.0 as a one-hop rotation: the v15 pin contains every 1.14.2/1.14.3 commit (neither patch changed a JSON shape) and the boundary fixture carries their obligations at 1.14.3. Evidence: references/openspec-1.15.0-report.md; change loop: openspec/changes/target-openspec-cli-115-line/.

What changed

  • Pin barrier: submodule gitlink → v1.15.0 (8e0288df); all four pin guards rotate; the stale v9-era check-openspec-reference.mjs fake green gate is repaired to the v1.15 assertion in the same PR.
  • Core contracts: compat window + new updateDryRun capability; typed UpdatePlan schema family (three keys always arrays, closed add|update|delete action and two-code note enums, no rename action — moves plan as delete+add pairs, per-tool failures are data beside exit 0, failed-command envelope status[]/update_error at exit 1) with a gated updatePlan executor method; install.scope gains 'standalone' (typed decode only; npm consumption unchanged).
  • Agent registry: constants-only rotation to series '1.15' (upstream config.ts byte-unchanged — zero tool delta; every 1.14 physical fact carries forward); generator staleness baseline → 1.15.0.
  • Update plan preview (the new capability, end-to-end): agentIntegrations.updatePlanPreview (typed read through runPlanningRootRead, refused pre-argv on non-admitted sessions) + Config Agents Update/Repair dialog preview (action chips, wrapped paths, notes by code, amber would-fail rows, failed-command alert; unavailability never gates the real mutation; fetch carries a generation guard).
  • Fixtures: openspec-cli-115 (1.15.0) positive matrix, openspec-cli-114 → 1.14.3 boundary (identity, unsupported classification, --dry-run rejection, 1.15-only member absence — never asserting v14-era absence), v13 boundary suite + v14 helper retire, positive files renamed official-cli-v15-*, new real-binary non-empty plan positive (corrupt/delete → update/add rows → disk unwritten → settle → empty re-plan); upstream source anchors re-derived with a new UpdatePlan source lock.
  • Docs: README ×2 + packages/cli/README.md (release README law) with verbatim legacy snapshots; AGENTS.md v15 architecture decision; changeset (major ×4); living spec admission law + "Accept the current 1.14 line" era scenario.

Verification (all run in this worktree)

Gate Result
pnpm format:check ✅ 70 files
pnpm lint:ci ✅ 0 errors (6 pre-existing warnings)
typecheck (core, server, web, cli — all lanes) ✅
core full suite ✅ 859 passed (incl. rotated fixture matrix, boundary suite, compat/regression/registry/tool-init/workflow-contract lanes)
server full suite ✅ 673 passed, 2 skipped
web full unit suite ✅ 1232 passed
dialog browser lane ✅ 4/4 (vitest.browser.config.ts)
node scripts/prepare-openspec-reference.mjs ✅ builds at 8e0288df
node scripts/check-openspec-reference.mjs ✅ OK: v1.15.0
Executed-CLI evidence 1.15.0 positive matrix + 1.14.3 boundary rejections (see report)

Independent adversarial subagent review round 1 scored 8/10; all findings (P1 living-spec range contradiction, P2 stale governance parenthetical, P2 missing real-binary plan positive, P3 batch) were fixed before this PR — see the change's loop/implementation.md.

Notes for review

  • The two unshipped upstream patches (1.14.2/1.14.3) are intentionally not given separate OpenSpecUI releases; the v15 pin absorbs them and the boundary fixture proves their window is closed. Vetoable per the change intake.
  • pnpm test:browser:ci includes the dialog file in CI lanes; locally verified via vitest.browser.config.ts.
  • Scoped-subset justification for local runs: changes span core/server/web, so full package suites were run for all three instead of the recursive test:ci monolith; cli package changes are constant-driven only (typecheck green).

…nd fixture matrix to CLI 1.15

- compat window >=1.15.0 <1.16.0 (single series) with the updateDryRun capability;
  pinned references/openspec gitlink rotates to v1.15.0 (8e0288df), absorbing the
  unshipped in-window patches 1.14.2/1.14.3 (no JSON shape change; obligations carried)
- typed UpdatePlan contract (three keys always arrays, closed add|update|delete and
  two-code note enums, no rename action, failures-as-data beside exit 0, failure
  envelope status[]/update_error beside exit 1) plus the gated updatePlan executor
  method; install.scope decodes the new 'standalone' member
- agent registry series rotates to '1.15' constants-only (upstream config.ts is
  byte-unchanged); staleness baseline moves to 1.15.0
- fixture matrix rotates: openspec-cli-115 (1.15.0) positive line, openspec-cli-114
  to 1.14.3 boundary with 1.15-only member absence proofs, v13 boundary suite and
  v14 helper retire, positive files rename to official-cli-v15-*, and the new
  real-binary update-plan positive lands; upstream-contract anchors re-derived and
  the UpdatePlan source lock added
- pin guards rotate (prepare script, upstream-contract regression, server cold-start,
  W2 playwright probe) and the stale v9-era check-openspec-reference gate is repaired
  to the v1.15 assertion
…tate admitted fixtures

- agentIntegrations.updatePlanPreview reads the typed plan through
  runPlanningRootRead and the gated executor: executed evidence keeps exit code,
  diagnostics, stderr, and contract error separate; a non-admitted session learns
  unavailability before any argv; the real update/repair mutation streams are unchanged
  and never gated by the preview; router lane proves argv/force, exit-0-with-failures,
  the update_error envelope, and the pre-argv refusal
- the Config Agents Update/Repair dialog renders the plan as verbatim evidence: action
  chips, wrapped mono paths, notes by code, per-tool would-fail rows as amber data,
  the failed-command envelope as the only destructive alert, muted unavailability that
  never disables the real run; the preview fetch carries a generation guard
- admitted-version fixtures rotate to 1.15 across findings/diff/archived/health-gate/
  agent-integrations/tool-subscription/projection/router lanes; mismatch copy, retired
  1.14 gate case, and install-command assertions follow the rotated constants
…d governance

- root README + README-zh rotate tables, narrative, and compatibility facts with
  verbatim legacy snapshots (README-1.14.0.md / README-zh-1.14.0.md); the CLI package
  README rotates under the release README law
- AGENTS.md gains the v15 architecture decision, pin bullet, clean-build law, and the
  release-README-law current-line parenthetical
- changeset openspec-115-line-adaptation.md bumps core/server/web/cli major
- living spec openspec-cli-integration rotates the admission law with the new
  'Accept the current 1.14 line' era scenario
- evidence report references/openspec-1.15.0-report.md and the target change loop
  artifacts record the investigation, plan, checkpoints, and review round
@Gaubee

Gaubee commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

Note: the pull_request CI events (opened + synchronize) did not produce any workflow runs for this branch (verified via the Actions API — zero runs for the head SHA). pr-quality.yml was therefore dispatched manually via workflow_dispatch on the same head commit (run 40866352796), which runs the identical quality gate and reports the same check names on this SHA. Local CI-equivalent evidence is in the PR description.

… to 1.15

The fallback-probe mirror constant (and its pinned assertion in the process-topology
lane) still named the retired 1.14 series, failing both the Fast Gate and the Windows
Portability Gate on the dispatched PR Quality run; both rotate with the core compat
constant they mirror.
…15-line

# Conflicts:
#	AGENTS.md
#	packages/core/package.json
#	packages/core/src/__tests__/official-cli-v15-fixtures.ts
#	packages/core/src/official-cli-v13-boundary-fixtures.test.ts
#	packages/core/src/official-cli-v15-validation-findings-fixtures.test.ts
#	packages/core/src/official-cli-v15-workflow-fixtures.test.ts
#	packages/core/src/opsx-kernel-schemas-root.fixtures.test.ts
#	packages/core/src/upstream-contract-regression.test.ts
#	packages/server/src/root-context-cold-start.integration.test.ts
#	packages/web/scripts/w2-project-binding-playwright.ts
#	pnpm-lock.yaml
#	references/openspec
#	scripts/prepare-openspec-reference.mjs
@Gaubee

Gaubee commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

Superseded: while this line was in flight, the parallel target-openspec-cli-15-line (PR #312) was merged and released as 15.0.0 (PR #314) — this branch had been cut from a stale local main ref and duplicated its window/registry/fixture/docs rotations. The genuinely missing piece (the deferred dry-run plan preview projection) plus the stale check-gate repair were re-based onto current main as #316. The duplicated rotations here are superseded by main's released 15.0.0; no unique content is lost — see #316 for the carried-forward delta.

@Gaubee Gaubee closed this Oct 29, 2026
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