OpenSpecUI 12.0.0: better validation presentation, wider agent support
Validation findings ship as a machine-readable report, so CI stops parsing logs written for people; pre-archive merge-conflict advisories get their own INFO level instead of sitting mixed with failures; agent delivery adds SourceCraft Code Assistant. The compatibility window moves to the OpenSpec CLI 1.12 line, which blocks 1.10 and 1.11 by default. Upgrading is one command.
Esta publicación está escrita en inglés. Léela en chino →
$ npm view openspecui version
12.0.0
OpenSpecUI 12.0.0 is out (2026-09-04). This release adapts to the OpenSpec CLI 1.12 line: validation results gain a machine-readable report, agent delivery adds SourceCraft Code Assistant, and the compatibility window moves onto the 1.12 line.
Validation findings go straight into CI
Wiring validation results into CI used to mean parsing log text written for people. The 1.12 line gives validate a second report form:
openspec validate --changes --report findings --json
The request names its scope: one of --changes, --specs, --all, or --archived, and never a single change name. A request without a scope is refused with a structured diagnostic, error code invalid_validation_report_request, carrying the CLI's own fix string.
The report lists only the items with findings; each carries a level (ERROR/WARNING/INFO), a path, and a message. Full-run totals and exit codes stay in summary, and returnedItems versus totalItems keeps the filtered view and the run size from blurring together.
The report is a capability-gated contract; only 1.12-line sessions get it. An out-of-window session receives a typed refusal, and no argv is composed at all. Nothing degrades silently. It is filtered evidence. The validation truth stays with the full validate report, which keeps its own transport.
On screen, findings project into the Change Detail evidence panel, each attributed to the change it belongs to, with the panel layers unified on a shared header contract (1aa9ce43, 13bb0e15).
Example: real output from the 1.12.0 CLI (excerpt)
{
"report": {
"kind": "validation-findings",
"version": "1.0",
"scope": "changes",
"returnedItems": 1,
"totalItems": 1
},
"itemFindings": [
{
"id": "demo-tasks",
"type": "change",
"valid": false,
"issues": [
{
"level": "ERROR",
"path": "file",
"message": "Change must have at least one delta. ..."
}
],
"durationMs": 17
}
],
"summary": { "totals": { "items": 1, "passed": 0, "failed": 1 } }
}
Conflict advisories stop mixing with failures
A merge-conflict check runs before archive and names the deltas archive would refuse. Its advisories used to sit mixed in with genuine failures, with no level of their own; the two now render on their own at INFO level:
Archive would refuse this delta: ...
Could not check archive merge conflicts: ...
The level is new. The verdict is not. INFO never changes whether a change is valid. The choice has a practical reason: a blocked merge target can be a typo, or a requirement another change introduced and has not archived yet, and counting it as failure up front would overreport.
Agent delivery adds SourceCraft Code Assistant
Projects using SourceCraft Code Assistant now receive agent delivery too. Commands land at .codeassistant/commands/opsx-<id>.md, with a frontmatter that carries only a description; skill references are natural language, kept under .codeassistant. No IDE restart. No legacy directory to migrate.
The generator staleness baseline rotates to 1.12.0.
Where the delivery lands
.codeassistant/
└── commands/
└── opsx-<id>.md
Migration (breaking: the compatibility window)
The window narrows to >=1.12.0 <1.13.0. Blocked by default: 1.10.x and 1.11.x (the v11 window), older lines, prereleases, and >=1.13.0. Whether 1.13 is admitted is a separately verified decision once it ships: widen the 12.x window, or cut a new major.
The lowest-friction path is a one-line CLI upgrade:
npm install -g @fission-ai/openspec@1.12
If you genuinely have an incompatible CLI executable at hand, the mismatch dialog offers Skip version check. The bypass lives only in the current page runtime and clears on refresh or reopen. It is not a compatibility promise.
Breaking-change count: 11.1.0 to 12.0.0 has 0 commits carrying the ! marker; the only migration action is the CLI upgrade.
Other changes
The new contracts ship with version-pinned executable fixtures:
openspec-cli-112proves the new contracts hold, and the retainedopenspec-cli-111proves what happens when an older CLI is blocked (d782c98e)The findings argv assembly moved behind the capability gate during review rounds, and the workflow fixtures finished porting (677cbe13)
The worktree endpoint fixture pins a hermetic, self-contained CLI runner, and Windows lock-release retries are bounded (0baa17a0, 2c602a53)
The compatibility gate, the Agent registry, and the validate contracts rotated over (9e0b0383, release entry d272b1f)
24 commits from 11.1.0 to 12.0.0: by the strict conventional prefix count, feat 3, fix 5, docs 6, test 2, chore 4; the 4 without a prefix are all merge commits.
Acknowledgements
Every protocol step of the upstream OpenSpec CLI (@fission-ai/openspec) 1.12 line sets the bounds of this compatibility window.
Links
Changelog: GitHub Release openspecui@12.0.0
Upgrade: see the Migration section above (one-line CLI upgrade)
Discussion: GitHub Issues
Chinese version: /zh/blog/2026-09-06-openspecui-12-0-0/
