OpenSpecUI 12.0.0:改进验证呈现,扩展 Agent 支持
validate 的发现有了机器可读的报告,CI 接验证结果不用再解析日志;归档前的冲突提醒升为 INFO 级,不再混进失败;Agent 交付接入 SourceCraft Code Assistant。兼容窗口切到 OpenSpec CLI 1.12 一条线,1.10/1.11 默认被挡,升级只需一行命令。
$ npm view openspecui version
12.0.0
OpenSpecUI 12.0.0 发布了(2026-09-04)。这一版适配 OpenSpec CLI 1.12 线:验证结果有了机器可读的报告,Agent 交付接入 SourceCraft Code Assistant,兼容窗口切到 1.12 一条线。
验证发现直接进 CI
以前想把验证结果接进 CI,只能解析给人看的日志文本。1.12 起 validate 多了一种报告形态:
openspec validate --changes --report findings --json
调用必须点名范围:--changes, --specs, --all, --archived 四选一,也不能带单个 change 名。缺了范围的调用会被拒,返回结构化诊断,错误码 invalid_validation_report_request,附 CLI 自己的修正提示。
报告里只列带发现的条目,每条带 level(ERROR/WARNING/INFO)、path 和消息;整轮的 totals 与 exit codes 照旧保留在 summary,returnedItems 与 totalItems 分开计数,筛过的视图和整轮规模不会混。
这份报告是能力门控的契约,只有 1.12 线的会话拿得到;窗口外的会话收到类型化的拒绝,argv 根本不会组装,不是静默降级。它也是过滤后的证据,不承担判定真值,完整的 validate 报告走自己的传输通道。
界面上,发现投影到 Change Detail 的证据面板,每条归因到所属 change,面板层级统一到共享的 header 契约(1aa9ce43、13bb0e15)。
示例:1.12.0 CLI 真实执行输出(节选)
{
"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 } }
}
冲突提醒不再混进失败
归档前有一道合并冲突检查,指出哪些 delta 到 archive 那一步会被拒。以前它的提醒和真正的验证失败挤在一起,没有自己的等级;现在这两条单独呈现为 INFO 级:
Archive would refuse this delta: ...
Could not check archive merge conflicts: ...
等级是新的,判定没动,INFO 不改变 valid 与否。定成 INFO 有实际理由:挡住合并的目标可能是笔误,也可能是另一个还没归档的 change 引入的需求,提前按失败算会误报。
Agent 交付接入 SourceCraft Code Assistant
用 SourceCraft Code Assistant 的项目现在也能收到 Agent 交付。命令落在 .codeassistant/commands/opsx-<id>.md,frontmatter 只有一个 description;skill 引用是自然语言,收在 .codeassistant 里。不用重启 IDE。也没有旧目录要迁移。
生成器基线轮转到 1.12.0。
落点:交付目录结构
.codeassistant/
└── commands/
└── opsx-<id>.md
迁移(破坏性:兼容窗口)
窗口收窄到 >=1.12.0 <1.13.0。1.10.x 与 1.11.x(v11 的窗口)、更老的线、预发布版,以及 >=1.13.0,默认都被挡。1.13 是否准入,等它发布后另行验证:要么放宽 12.x 窗口,要么出新的 major。
最低摩擦路径是一行 CLI 升级:
npm install -g @fission-ai/openspec@1.12
手头确有不兼容的 CLI 可执行文件时,mismatch 对话框提供 Skip version check。该旁路只在当前页面运行时内有效,刷新或重开即清,不构成兼容承诺。
破坏性口径:11.1.0 到 12.0.0 带提交级 ! 标记的提交为 0 个,需要动手迁移的只有 CLI 升级这一条。
其余变更
新契约配了版本锁定的可执行 fixtures:
openspec-cli-112验证新契约成立,保留的openspec-cli-111反向验证老 CLI 被挡(d782c98e)findings 的 argv 组装在评审轮收进能力门控,workflow fixtures 完成移植(677cbe13)
worktree 端点 fixture 锁定自包含的 CLI runner,Windows 锁释放重试有界(0baa17a0、2c602a53)
从 11.1.0 到 12.0.0 共 24 个提交:conventional 严格口径计 feat 3, fix 5, docs 6, test 2, chore 4;不带前缀的 4 个全是 merge 提交。
致谢
上游 OpenSpec CLI(@fission-ai/openspec)1.12 线的每一次协议演进,都决定着这个兼容窗口的范围。
链接
Changelog:GitHub Release openspecui@12.0.0
升级:见本文「迁移」节(一行 CLI 升级)
English version: /blog/2026-09-06-openspecui-12-0-0/
