夜雨聆风学习资料网

ARTICLE · 1063696

OpenClaw v2026.7.35(2026.09.21)新版本发布

OpenClaw v2026.7.35(2026.09.21)新版本发布

OpenClaw 前天发了 v2026.7.35。我点开 Release 页面本来想扫一眼就关掉——七月那条长期支持线一向没什么看头,上一篇写它的时候我还说,这条线是发给不想升级的人的。

结果 Fixes 底下只有一条。

一整版,只有一个提交

本机 /opt/workspace 下有 openclaw 的完整 clone,三个 tag 都在。

$ git rev-list --count v2026.7.34..v2026.7.35 1  $ git log --oneline v2026.7.34..v2026.7.35 0af2921e9a2 chore: prepare             extended-stable 2026.7.35             (#153901)

这个提交动了 222 个文件,听起来不少。把 package.json、npm-shrinkwrap.json、Info.plist 这些纯版本号的滤掉,剩下的是:

CHANGELOG.md                     |  10 ++ extensions/matrix/CHANGELOG.md   |   7 + .../plugin-registry-migration     .test.ts                     |  46 ++-- .../plugin-registry-migration     .ts                          | 176 ----- src/plugins/doctor-contract     -registry.test.ts            |  36 +++ src/plugins/doctor-contract     -registry.ts                 |  24 ++-

两个源文件,两个测试,两份 changelog。整版就这些。changelog 里那句话是这么写的:

preserve the complete bundled plugin inventory when Doctor creates or repairs registry state ... recovers from the partial registry written by 2026.7.34

partial registry written by 2026.7.34。上一版写了半张注册表。

体检工具把没点过名的插件全当成了无关项

我一开始猜是写盘写了一半,断电或者并发之类。翻了存储那边的代码没找着,读写都是整份覆盖。真正的地方在 7.34 的 plugin-registry-migration.ts,落盘那一步:

const current = {   ...candidateIndex,   refreshReason: "migration",   plugins:     listMigrationRelevantPluginRecords({       index: candidateIndex,       config,       installRecords,       ...     }), }; await writePersistedInstalledPluginIndex(   current, params);

candidateIndex 是完整的插件清单,就在上面一行刚算出来。写进磁盘的不是它,是被 listMigrationRelevantPluginRecords 挑过一遍的那份。

relevant 的判定条件往下翻能看到,三样:配置里写了的 channel、配置里写了的模型 provider、显式装过的插件记录。外加一层别名展开,比如 openai 认 openai-codex。

可是 OpenClaw 自带的插件,谁会在配置文件里专门点名浏览器?

我拿本机的真实配置代进去算了一遍。~/.openclaw/plugins/installs.json 里在册 93 个插件,openclaw.json 里 channels 三个、models.providers 三个、plugins.entries 十一个。

registry total      : 93 relevant (survive)  : 10   ['alibaba', 'anthropic', 'deepseek',    'feishu', 'memory-core', 'ollama',    'openai', 'openclaw-weixin',    'qwen', 'telegram'] dropped             : 83 changelog-named lost:   ['browser', 'canvas', 'device-pair',    'file-transfer', 'phone-control',    'talk-voice', 'bonjour']

本机配置代入 7.34 的入选条件,93 个在册插件剩下 10 个

changelog 点名的那七个——浏览器、画布、设备配对、传文件、手机控制、语音、局域网发现——一个不落,全在被丢掉的 83 个里。

写盘之后,后面的加载优先读这份持久化的注册表。重启,插件没了。

这活儿是 doctor 干的。那是 OpenClaw 用来查毛病、修状态的命令。

修法是让它别挑了

7.35 的改动在 doctor-contract-registry.ts,二十来行:

resolvePluginDoctorContracts(   params,   { completeInventory: true }, )  // 函数内部 ...(options.completeInventory   ? {       preferPersisted: false,       installRecords:         loadInstalledPluginIndex           InstallRecordsSync({ env }),     }   : {})

preferPersisted: false 是关键那行。发现状态迁移的时候不再信磁盘上那份注册表,回去读 install records 重算。既不会接着写坏的,也能从 7.34 已经写坏的那份里爬出来。

同一个提交里,plugin-registry-migration.ts 从 341 行缩到 165 行。listMigrationRelevantPluginRecords 连同配套的别名归一、channel 扫描、provider 扫描,整套删掉。

新增的测试就一条,名字起得很直白:

it("finds state migrations omitted     from a partial persisted     plugin inventory", () => {

四天,三个版本

tag 时间取自本机 git,三版的作者都是 Dallin Romney

7.33 在 09-17,75 个提交、126 个 PR 的合集。7.34 在 09-19,声称从 11198 个提交里挑出该进七月线的。7.35 在 09-20,从 1418 个提交里挑出 1 个。

顺带说两件 Release 页面上能看见、但容易划过去的事。

一是 7.33 和 7.34 压根没发 GitHub Release,所以 7.35 那一页把前两版的 changelog 都折进来了。你在 Releases 列表里翻七月线,会以为 33 和 34 不存在。

二是 7.35 的 npm 发布任务是失败的。页面上写了失败原因是 bounded registry readback expired before propagation completed,然后由 owner 人工核对签名、provenance、70 个插件的回读和 Docker digest,手动完成发布。一个 LTS 版本,最后一步是人按的。

要不要升

要。如果你停在 7.34,你的注册表大概率已经被写坏了,只是还没重启所以没露出来。

倒是想问一句:你上次跑 openclaw doctor,是主动跑的,还是出事之后才跑的?

相关学习资料