feat: rotate to OpenSpec CLI 1.13.1 — nested-change projection, task-reading parity, in-window patch rotation - #287
Merged
Merged
Conversation
… report, change artifacts
…to the 1.13.1 patch plan
… 1.13.1 (Slice 1)
…uctural namespace set (N2), collision red cases (N3), decode evidence (N5)
… semantics, P5 output-shape correction, honest verdict record
…le semantics (Slice 3)
…ies and hygiene warnings (Slice 2) - contract: nested entries + typed warnings (code open-string) on the change list - kernel: entries/value stay actionable-only; namespaces derived once, structurally - consumers: Changes/Dashboard/Search/Store content subtract the namespace set; change.listWithMeta/subscribe transports filter through the same projection fact - web: direct-plane hygiene warning region on the Changes page - boundary fixture: v13 version-identity args follow the rotated 1.13.1 pin
…the release changeset (Slice 4)
…ics-decode contracts with executable fixtures (Slice 4)
…kpoints (CP4 green)
…ister its typecheck lane The stale local PINNED_BINS key made PINNED_BINS[version] undefined and crashed writeConfig on undefined.trim() under test:ci. The file sat in no typecheck lane (main tsconfig excludes **/*.test.ts), so the Record<PinnedOpenspecV13Version,...> guard was invisible; it is now in tsconfig.workflow-contract-tests.json.
… fix, environmental notes)
… and complete the implementation record
…e cold-start version pin to 1.13.1 CI Round 1 triage: the search wiring forced the opsx-change-list CLI Work on every collection (getCurrent), putting a cold CLI computation on the first emission path — Windows timing collapsed the subscriber choreography. Search now peeks the projection (ready/current data only, never requesting the Work) so it adds no CLI computation and degrades to full local indexing. The cold-start integration assertions hardcoded the 1.13.0 version (sixth rotation point, only reachable in CI's broader file set).
… mocks CI round 2 triage: the continuity/navigation suites mock the whole @/lib/use-opsx module and lacked the new useOpsxChangeListHygieneWarningsSubscription export the route now imports. Full web unit project verified locally (192 files, 1210 tests).
This was referenced Sep 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rotate the OpenSpecUI 13 line to the OpenSpec CLI 1.13.1 patch release inside the unchanged
>=1.13.0 <1.14.0window (no new command/flag/capability upstream — compat gate, Agent registry series, and staleness baseline do not move), and project the two 1.13.1 contract additions:list --jsonper-entrynested+ top-level hygienewarnings, both absent-when-empty): the kernelopsx-change-listprojection keepsentries/valueactionable-only and derives a single structuralnamespacesset (entry names bearingnested; warnings are display evidence, message text never parsed). Every change-row builder subtracts it at its own id source — Changes projection, Dashboard inputs (Kanban inherits), search documents, Store content decode, and thechange.listWithMeta/change.subscribetransports. CLI-list loss degrades to today's local-row behavior; row visibility never becomes CLI-gated. The Changes page renders the warnings as a direct-plane amber region (verbatim upstream message, unknown-code fallback).toggleMarkdownTaskmirror the CLI 1.13.1 pattern verbatim (all CommonMark + ordered markers, indented sub-tasks, single-token markers incl. padded[ x]=done, whitespace-only boxes, link-continuation guard, CRLF tolerance, canonical[x]/[ ]write-back) so Kanban phases, CLI task counts, and divergence evidence stay aligned. CLI progress authority is untouched.Plus: pin rotation across five points (npm alias + lockfile, fixture identity constants, reference
EXPECTED_COMMIT, twoPINNED_OPENSPEC_COMMITguards, one localPINNED_BINSkey caught bytest:ciand registered into a typecheck lane per the typed-test-evidence law), executable pinned-fixture evidence (nested/warnings, task-count parity, validate ERROR finding), generic-diagnostics decode regression for the new error codes,references/openspec-1.13.1-report.md, governance records, and the release changeset.OpenSpec change:
openspec/changes/update-openspec-cli-1131/(validated clean; checkpoints carry per-slice red/green evidence). Reviews: Round-A (substitute, 6.5 REVISE — 3 blockers folded), Codex Round-B (6.5 REVISE — 4 conditions resolved: structural namespace set, degradation semantics, per-consumer interfaces/tests, P5 output-shape correction), Codex Round-C (7.9/10 — Round-B conditions confirmed closed at implementation level; sole blocker B1'' was a stale status line in the change log, fixed; codex pre-stated 8.5/10 post-fix).Local gates (CI-equivalent)
pnpm format:checkpnpm lint:cipnpm typecheckpnpm test:cipnpm test:browser:ciFailure triage (test:ci)
packages/core/src/opsx-kernel-schemas-root.fixtures.test.ts— real, fixed in this PR: a localPINNED_BINSmap kept the'1.13.0'key, soPINNED_BINS['1.13.1']wasundefinedandwriteConfigcrashed onundefined.trim(). The file sat in no typecheck lane (main tsconfig excludes**/*.test.ts), hiding theRecord<PinnedOpenspecV13Version,...>guard — now registered intsconfig.workflow-contract-tests.json; test re-run green.packages/core/src/reactive-fs/path-realpath.test.ts— environmental, not this change: deterministic under this shell'sTMPDIR=/var/...prefix (macOSrealpathcanonicalizes to/private/var); passes withTMPDIR=$(echo $TMPDIR | sed 's|^/var/|/private/var/|');git diff main..HEAD -- packages/core/src/reactive-fs/is empty; Linux CI has no such prefix. Accepted by Codex Round-C (N3'') with this evidence.Also environmental: the first
test:browser:cirun failed only because Playwrightchromium_headless_shell-1208was missing locally; installed viapnpm exec playwright install chromium, re-run green.Boundary
Final end-to-end browser walkthrough and release acceptance remain Owner-only (2026-07-20 law): suggested cases — a repository with a namespace folder under
openspec/changes/shows the amber warning region on the Changes page with no row/no detail route (Changes/Dashboard/Kanban/search/Store content), and a+/1.-marker tasks file toggles and counts consistently with the CLI.Release:
.changeset/openspec-1131-patch-rotation.md(fixed-group patch). Manager flow after merge confirmation:pnpm changeversion→ checks → merge → release automation.