mise v2026.11.1(Published 2026-11-04T19:13:36Z,约北京时间 11 月 5 日 03:13)把 npm.provenance 默认改成 true。装带 Sigstore provenance 的 npm: 工具时,会把构建仓库写进 mise.lock;之后同版本必须来自同一仓库,否则直接失败。本机从 2026.11.0 linux-x64 (2026-11-03) 升到 2026.11.1 linux-x64 (2026-11-04) 后,在最小 Spring Boot 3.4.5 工程里用 java = "21" 加 npm:semver = "7.7.2" 跑通:锁文件升到 format 4 并钉住 github.com/npm/node-semver,把仓库改成假地址后装不上;HelloIT 里 /hello 仍返回 HELLO-BOOT。
官方 Release 标题写得很直:npm provenance verified by default, with repository pins in mise.lock。2026.11.0 的 task lock 文末提过同版本还有 opt-in 的 npm provenance;这一版改成默认开,并引入 lockfile format 4。和 2026.10.25 的 tasks CLI / watch --once、2026.10.24 容器 daemon、2026.10.19 默认 generate 锁文件 一样,先把二进制踩准再谈行为。
self-update 仍可能卡在最低发布年龄。这次直接装官方 linux-x64 包:
curl -fsSL -o mise.tar.gz \
https://github.com/jdx/mise/releases/download/v2026.11.1/mise-v2026.11.1-linux-x64.tar.gz
tar -xzf mise.tar.gz
install -m 755 mise/bin/mise ~/.local/bin/mise
mise --version
# 2026.11.1 linux-x64 (2026-11-04)
mise settings get npm.provenance
# true
演示工程仍是手写最小 Boot:pom.xml 父工程 spring-boot-starter-parent 3.4.5,DemoApplication 暴露 GET /hello 返回 HELLO-BOOT。测试类 HelloIT 用 RANDOM_PORT 起上下文,断言 /hello 是 HELLO-BOOT。场景是 Boot 工程用 mise 管 JDK,顺带用 npm: 后端装一条发布了 provenance 的 CLI(这里是 semver),看默认校验和仓库钉选怎么咬合。
根目录 mise.toml:
[tools]
java = "21"
"npm:semver" = "7.7.2"
[tasks.hello-it]
description = "Spring Boot HelloIT"
run = "mvn -q -Dtest=HelloIT test"
[tasks.semver-check]
description = "Run mise-managed semver CLI"
run = "semver 3.4.5"
mise trust 之后跑 mise install。第一次装会写出 lockfile_version = 4,并在 npm:semver 条目下钉住 provenance 仓库(官方说明:钉选由 mise install 写入,不是 mise lock):
lockfile_version = 4
[[tools."npm:semver"]]
version = "7.7.2"
aube = { path = ".mise/locks/npm-semver/7.7.2", digest = "sha256:…" }
backend = "npm:semver"
specifiers = ["7.7.2"]
[tools."npm:semver".provenance]
repository = "github.com/npm/node-semver"
同版本再装一遍,仓库对得上,退出码 0。mise run semver-check 打出 3.4.5。
把锁里的仓库改成假地址后再装,会失败并点出真实来源和钉选不一致:
# mise.lock 里改成:
# repository = "github.com/evil/not-semver"
$ mise uninstall npm:semver
$ mise install
# mise ✗ npm:semver@7.7.2 … failed:
# npm:semver@7.7.2 was built from github.com/npm/node-semver,
# but mise.lock pins its provenance to github.com/evil/not-semver
# 退出码 1
没发 provenance 的包仍按旧行为装。另起一个只声明 npm:cowsay = "1.6.0" 的目录,mise install 退出码 0,锁文件同样是 format 4,但条目下没有 provenance 段。官方也写了:已经钉过仓库的版本,如果上游不再发 provenance,后续安装会失败。
format 4 是 breaking。同机保留的 2026.11.0 二进制读这份锁会警告:
failed to read lockfile …/mise.lock (possible corruption):
0: unsupported lockfile version 4; this mise supports up to version 3
共享新锁文件的人需要一起升到 2026.11.1 或更新。旧 revision 的锁在升级前不会带 provenance 钉选;跑 mise lock --upgrade 才会抬到 4。
Boot 侧用 mise 管着的 Java 21 跑 IT:
$ mise run hello-it
[hello-it] $ mvn -q -Dtest=HelloIT test
# … Spring Boot 3.4.5 …
# Starting HelloIT using Java 21.0.13 …
# Tomcat started on port 42789 (http)
# /hello -> HELLO-BOOT
# 退出码 0
若网络拦 Sigstore trust roots,带 provenance 的包装会失败,可显式关掉:
[settings.npm]
provenance = false # 或 MISE_NPM_PROVENANCE=0
对 Spring Boot 日常最直接的咬合点:仓库已经用 mise 管 JDK,又用 npm: 后端装前端/脚本 CLI 时,升到 2026.11.1 后默认会校验 provenance 并在锁里钉构建仓库。CI 缓存、镜像源、或有人换包重发到别的仓库,都会在 mise install 这一步暴露。同版本还有 named env_sets、gitlab.com CI 的 npm provenance、vfox 下载进度等,本次主线只实测默认 provenance 与仓库钉选。
一起交流
分享你的思考,让讨论更进一步。