Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/update-openspec-cli-1141.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'openspecui': patch
'@openspecui/core': patch
'@openspecui/server': patch
'@openspecui/web': patch
---

Rotate the pinned OpenSpec CLI fixture to 1.14.1 inside the unchanged v14 window (`>=1.14.0 <1.15.0`): every pin guard (reference prepare script, contract regression, cold-start integration, web playwright probe) and the `openspec-cli-114` npm alias move to `v1.14.1` (`87c3595`), which also repairs the submodule gitlink that the 2026-10-02 release commit accidentally reverted to v1.13.0. The 1.14.1 patch facts join the executable proof matrix as two new pinned fixtures — apply `all_done` now reports tracked-task completion and asks for review before archiving (the retired `ready to be archived` phrasing never appears in the payload), and an overlength (>500 characters) requirement description, including ADDED requirements in a change, is a strict-failing WARNING. No production schema or projection changes: the new archive diagnostic code `archive_retirement_cleanup_failed` passes through the existing open-string diagnostic typing as verbatim evidence.
5 changes: 3 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ Architecture decision (2026-09-12): OpenSpecUI 13 supports OpenSpec CLI `>=1.13.
Architecture decision (2026-09-17): OpenSpec CLI 1.13.1 is an in-window patch rotation for the unchanged `>=1.13.0 <1.14.0` v13 window — no new command, flag, or capability moves the compat gate, Agent registry series, or series-aware staleness. `list --json` gains per-entry `nested?: string[]` and top-level `warnings` (absent-when-empty; `code` typed open-string): the kernel `opsx-change-list` projection keeps `entries` and compat `value` actionable-only, carries a required structurally-derived `namespaces` set (entry names bearing `nested`; warnings are display evidence and message text is never parsed), and every change-row builder subtracts that set at its own id source (Changes projection, Dashboard inputs, search documents, Store content decode, and the `change.listWithMeta`/`change.subscribe` transports); CLI-list loss degrades to today's local-row behavior and never gates row visibility. Local task-line reading and `toggleMarkdownTask` mirror the CLI 1.13.1 pattern verbatim (all CommonMark + ordered markers, indentation, single-token markers incl. padded `[ x]`=done, whitespace-only boxes, link-continuation guard, CRLF tolerance) while CLI progress authority stays untouched. Pinned fixture rotation: `openspec-cli-113` = 1.13.1 (positive line), `openspec-cli-112` = 1.12.0 (boundary line); the reference pin guard and every `PINNED_OPENSPEC_COMMIT` constant rotate together. Evidence map: `references/openspec-1.13.1-report.md` (pin `v1.13.1`, `634c557`).
Architecture decision (2026-09-26): OpenSpec CLI 1.13.2 is an in-window patch rotation for the unchanged `>=1.13.0 <1.14.0` v13 window — no new command, flag, or capability moves the compat gate, Agent registry series, or series-aware staleness. `instructions apply --json` adds two optional tracking-evidence members with absent-when-empty honesty: `taskTrackingConfigured` is a boolean whenever emitted (true for any non-null `apply.tracks`, even a glob matching zero files; absence means a pre-1.13.2 CLI, never a synthesized `false`) and `unavailableTrackingFiles` carries `{path, reason}` for every matched-but-unreadable tracking file (never `[]`); both are non-gating evidence projected end-to-end onto the Change Detail status region, apply aggregation resolves `apply.tracks` with glob semantics across every matched file, and `all_done` additionally requires zero unavailable files. The Kilo Code registry entry rotates its command delivery to `.kilo/command/opsx-<id>.md` with the former `.kilocode/workflows/` path as legacy evidence plus two-generation cleanup (`opsx-*.md` and the three `openspec-*.md` files). Artifact-glob recognition parity (brace/extglob) is watcher-granularity only (`isGlobPattern`/dependency watching); `opsxPathMatchesPattern` tracked-task matching stays wildcard-class as a documented boundary. Pinned fixture roles unchanged: `openspec-cli-113` = 1.13.2 (positive line), `openspec-cli-112` = 1.12.0 (boundary line). Evidence map: `references/openspec-1.13.2-report.md` (pin `v1.13.2`, `db23097`).
Architecture decision (2026-10-02): OpenSpecUI 14 supports OpenSpec CLI `>=1.14.0 <1.15.0` as a single-series window — stable 1.14.x is current/recommended; `1.15` is not pre-claimed, and its admission is a separately verified decision (14.x widening or a new major). CLI `<1.14.0` (including the whole 1.13 v13 window), prereleases, and `>=1.15.0` are blocked by default. Six 1.14 JSON surfaces become typed contract facts projected end-to-end: `openspec version [--check] [--json]` (schemaVersion-1 envelope, no network probing), `instructions apply` task `sourcePath`/`line` (present whenever tasks exist), `list --archived`/`--all` per-entry `archived` (the one new list member; `nested`/list `warnings` are 1.13.1 carry-forward facts whose fixtures migrate only), `status` top-level advisory `warnings` (single and batch entry shapes; batch never synthesizes a top-level array) preserved verbatim through the kernel `projectWorkflowStatus` explicit rebuild on both paths, `show --type spec --json` requirement/scenario `name`, and store-backed `allowedEditRoots` two-branch action context (declaring project present: implementation root then store root; absent: store root only with the ask-user constraint) — none of which gates action authority. The Agent registry rotates its series to `'1.14'` with every 1.13 physical fact carried forward plus ten new tools (amp and gsd join the shared `.agents` skills root, widening `SHARED_AGENTS_SKILLS_OWNER_CANDIDATES` to the five upstream writers — antigravity stays commands-only; atomcode, codestudio, dsh, easycode, gigacode, grok, veai, warp, IBM Bob), and generator staleness rotates to the 1.14.0 baseline with the historical provenance union retained. Fixture roles rotate: pinned `openspec-cli-114` (1.14.0) proves accepted contracts across the full positive matrix including the 1132 tracking regressions; `openspec-cli-113` (1.13.2) proves the just-retired line rejected with identity, unsupported classification, and 1.14-only members absent (never asserting v13-era members absent); the `openspec-cli-112` alias stays for its two historical consumers (tool-init-state, agent-command-content) while the v12 boundary suite and both v12/v13 helpers retire. Evidence map: `references/openspec-1.14.0-report.md` (pin `v1.14.0`, `94ca9c1e`).
Architecture decision (2026-10-06): OpenSpec CLI 1.14.1 is an in-window patch rotation for the unchanged `>=1.14.0 <1.15.0` v14 window — no new command, flag, or capability moves the compat gate, Agent registry series, or series-aware staleness (`src/index.ts` byte-identical; zero agent-delivery-surface commits). The archive diagnostic gains the `archive_retirement_cleanup_failed` code value, which the open-string `code` typing passes through verbatim as evidence (report-documented; forcing a cleanup failure needs filesystem fault injection, so no fixture pins it). The apply `all_done` state separates tracked-task completion from archive readiness — state value and chain unchanged while the instruction reports completion and asks for review or verification before archiving, retiring the `ready to be archived` phrasing — and an overlength (>500 characters) requirement description, including ADDED requirements in a change, becomes a strict-failing WARNING; both are pinned fixture proofs. Pinned fixtures rotate: `openspec-cli-114` = 1.14.1 (positive line), `openspec-cli-113` = 1.13.2 (boundary line, unchanged). Recorded incident repaired by the same rotation: release commit `06dec8b9` reverted the submodule gitlink to v1.13.0; the PR-time guards (`prepare-openspec-reference.mjs` + `upstream-contract-regression.test.ts`) had no window to fire because no PR opened before this one. Evidence map: `references/openspec-1.14.1-report.md` (pin `v1.14.1`, `87c3595`).
Architecture decision (2026-08-15): `isPlanningComplete` states only planning-artifact completion. Apply `progress` remains implementation task truth even when actionable task entries omit blank descriptions or parse indented checkbox lines. `schemas --json` is a success-array or selected-Root-failure sum type; failure is never an empty successful Config catalog.
Architecture decision (2026-08-15): Agent delivery is a CLI-owned physical-artifact protocol. The v9 registry must project current/legacy project roots, user-global skill roots, command paths, migration/cleanup, and restart evidence; OpenSpecUI never hand-writes or deletes Agent artifacts. Archive retirement and `validate --archived` remain typed CLI evidence, never UI-side archive logic.
Architecture decision (2026-08-15): A current-page version bypass is not an admitted CLI capability boundary. Unsupported, unknown, and prerelease CLI versions select neither version-specific command capability nor Agent registry; retained Agent physical state and direct Agent Init share the admitted version-selected registry, while literal `tools: 'all'` remains CLI-owned.
Expand Down Expand Up @@ -485,7 +486,7 @@ proof exist.
- 6.11 acceptance uses direct same-origin Project Web with the pinned CLI and isolated `XDG_DATA_HOME`;
the experimental App iframe is excluded.

- `references/openspec` is the official upstream submodule; the live pin follows the newest line's evidence report (v14: `v1.14.0`, `94ca9c1e`). Historical pins: v1.13.2 (`db23097`), v1.13.1 (`634c557`), v1.13.0 (`9d4e5974`), v1.12.0 (`e062b957`), v1.11.0 (`a0ddb60d`), v1.9.0 (`2826b888`), v1.7.0 (`4e16790d`).
- `references/openspec` is the official upstream submodule; the live pin follows the newest line's evidence report (v14: `v1.14.1`, `87c3595`). Historical pins: v1.14.0 (`94ca9c1e`), v1.13.2 (`db23097`), v1.13.1 (`634c557`), v1.13.0 (`9d4e5974`), v1.12.0 (`e062b957`), v1.11.0 (`a0ddb60d`), v1.9.0 (`2826b888`), v1.7.0 (`4e16790d`).
- OpenSpecUI 7 targets only OpenSpec CLI 1.7.x. OpenSpec CLI 1.6.x and every other CLI line are unsupported and blocked by default; the page-runtime-only **Skip version check** escape hatch creates no compatibility promise. OpenSpecUI 6.1 remains the historical 1.6.x product line with its temporary 1.7 compatibility bridge.
- OpenSpec CLI remains the workflow source of truth. Prefer CLI JSON and exit status over parallel parsers or inferred workflow state.
- OpenSpec 1.6 Doctor References carry Store identity, root, and diagnostics, but no embedded Spec index. Build Referenced Spec Catalog entries by enumerating each direct Doctor-declared Reference through typed `list --specs --store --json`; never treat an absent `references[*].specs` field as an empty Store.
Expand Down Expand Up @@ -564,7 +565,7 @@ proof exist.
- 6.14 asynchronous Compose ownership law (2026-07-21): A dirty Compose draft belongs to the Root generation that captured the edit, even when preparation for Root A is still pending while Root B becomes current. B preparation may settle before A; a late A completion must not overwrite B's target, clear the draft, or relabel the draft as B. Same-generation `observedAt` refresh preserves the existing editor/dialog instance. Prove this through the real mounted Compose route and typed preparation boundary; do not bypass a disabled fieldset or call `preparePayload`/terminal mocks manually. Mutation-resistance must remove only the generation/reconciliation transition that retires the stale A completion and show the same test fail.
- Independent-observable evidence law (2026-07-19): HTTP and WebSocket readiness timestamps are local observations, not a cross-transport happens-before contract. Tests must not assert `ws.observedAt >= http.observedAt` or use arbitrary sleeps/retries to manufacture ordering; compare each channel's typed payload/readiness and record causal ordering only where the protocol provides an explicit token or sequence.
- Pinned browser-fixture law (2026-07-19): Readiness evidence must execute the direct pinned OpenSpec CLI executable with an explicitly isolated `XDG_DATA_HOME`; `npx` runner resolution is network-dependent and can produce a false cold-start timeout. Remove proxy variables from bounded local probes. Classify that timeout as fixture/network evidence, not a server startup or transport defect, and do not add a production workaround for it.
- Pinned CLI clean-build law (updated 2026-10-02): `references/openspec` pins source at the newest line's tag (v14: v1.14.0) while upstream ignores generated `dist`; a local `dist` is non-authoritative evidence. Any clean CI lane that directly executes `references/openspec/bin/openspec.js` must initialize the gitlink, verify the exact pinned SHA recorded in the newest `references/openspec-<version>-report.md` (v14: `94ca9c1eb15d1b49c06c988419b75c3d95f8b2b5`), install the nested lockfile without outer-workspace coupling or lifecycle scripts, explicitly build, and assert `dist/cli/index.js` before running pinned integration fixtures. Do not add this preparation to Browser shards that never execute the pinned CLI.
- Pinned CLI clean-build law (updated 2026-10-06): `references/openspec` pins source at the newest line's tag (v14: v1.14.1) while upstream ignores generated `dist`; a local `dist` is non-authoritative evidence. Any clean CI lane that directly executes `references/openspec/bin/openspec.js` must initialize the gitlink, verify the exact pinned SHA recorded in the newest `references/openspec-<version>-report.md` (v14: `87c3595ace6a2e22957f39ebe5b74c2f2316e0cb`), install the nested lockfile without outer-workspace coupling or lifecycle scripts, explicitly build, and assert `dist/cli/index.js` before running pinned integration fixtures. Do not add this preparation to Browser shards that never execute the pinned CLI.
- Dashboard projection law (2026-07-16): Dashboard Spec, Change, task, and workflow metrics come only from the CLI-selected Planning root. The page names that path, root source, optional Store id, and direct Reference diagnostic counts without inferring Reference health or completeness. Its `Code Git Snapshot` remains Launch code-repository scoped; a distinct Planning repository is shown independently and never substitutes for Code activity. Formal workflow completion may be labeled `workflow-complete`, but only CLI validate/archive outcomes may claim archive readiness.
- Change list law (2026-07-16): Active Changes come only from the current writable Planning root; Launch-only and Reference content never enter the list. Workflow state consumes the full formal `TrackedTaskPhase`, not a derived completion boolean: `no-tasks` renders explicitly, only `complete` may contribute to `Workflow Complete`, and neither status claims archive readiness.
- Change detail law (2026-07-16): Reactive Status, artifact Instructions, and Apply Instructions use typed CLI contracts with the Root Context-derived explicit Store selector. Live `ChangeStatus.provenance` preserves `planningHome`, `changeRoot`, artifact/resolved/existing paths, next steps, action context, and root source; static provenance is explicitly unavailable. Change detail shows those paths plus direct Reference diagnostics without inferred health/completeness. `Update` remains a first-class action. Archive is never authorized from `status.isComplete`; it opens the CLI dialog, runs strict validation, stops on failure, and preserves validate/archive diagnostics without synthesized retry.
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ await ctx.cliExecutor.archiveStream(changeId, options, (event) => {

## Important Reference Files

**At the start of each session, read `references/openspec-1.14.0-report.md` for the current OpenSpec protocol and OpenSpecUI adaptation boundary. Use `references/openspec-1.13.2-report.md`, `references/openspec-1.13.1-report.md`, `references/openspec-1.13.0-report.md`, `references/openspec-1.12.0-report.md`, `references/openspec-1.9.0-report.md`, and `references/openspec-0.16.0-report.md` only as historical domain-model context.**
**At the start of each session, read `references/openspec-1.14.1-report.md` for the current OpenSpec protocol and OpenSpecUI adaptation boundary. Use `references/openspec-1.14.0-report.md`, `references/openspec-1.13.2-report.md`, `references/openspec-1.13.1-report.md`, `references/openspec-1.13.0-report.md`, `references/openspec-1.12.0-report.md`, `references/openspec-1.9.0-report.md`, and `references/openspec-0.16.0-report.md` only as historical domain-model context.**

This file contains:

Expand Down
2 changes: 2 additions & 0 deletions openspec/changes/update-openspec-cli-1141/.openspec.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
schema: opsx-collab-pr-loop
created: 2026-10-06
Loading
Loading