You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cargo.lock pins tauri at 2.10.2. 2.11.5 has been published since
2026-07-01. No Dependabot pull request has ever offered it — not #478 in July,
which was unrestricted enough to cross notify 6→8 and zip 2→4, and not #489
or #491 under the current config.
This is not a backlog item. It is a hole in the reporting, it is permanent, and
the two configuration changes that landed today (#484, #490) do not touch it.
I am not asking for an upgrade — I have no benefit case for 2.11.5 and did
not go looking for one. I am reporting that the mechanism we just built cannot
see the framework this app runs on.
Why
Two independent rules multiply.
Dependabot's cargo resolver runs exactly one command. From dependabot-core/cargo/.../version_resolver.rb: cargo update -p <dep> -vv
against a manifest whose requirement has been loosened to >= <locked>. One -p, no --precise.
tauri 2.11.5 raises its floor on four siblings that release in lockstep with
it, and all four moves are within the same semver line:
2.10.2 requires
2.11.5 requires
locked at
tauri-runtime
^2.10.0
^2.11.3
2.10.0
tauri-runtime-wry
^2.10.0
^2.11.4
2.10.0
tauri-utils
^2.8.2
^2.9.3
2.8.2
tauri-macros
^2.5.4
^2.6.3
2.5.4
Cargo cannot hold two 2.x copies of one crate, so those four have to be replaced
in place — and cargo update may not touch a package it was not named. So it
declines, and says so:
Unchanged tauri v2.10.2 (available: v2.11.5)
Reproduced against master's lockfile, naming different sets:
2.6.3, works — its cascade only adds copies on a different line
And the four unblockers are transitive.allowed_updates is unset, so the
default dependency-type: direct applies (job.rb#allowed_update?), and
Dependabot will never propose them on their own either.
One rule means it can only ever name tauri. The other means it can never name
the four crates that would let tauri move. There is no allow: or groups:
entry that resolves this, because the constraint is in how the resolver is
invoked, not in what it is allowed to consider.
How wide the hole is
Narrower than it first looks, and worth stating precisely so this is not read as
a general indictment.
The obvious hypothesis — that every bare-caret requirement like tauri = { version = "2" } is invisible — is false.serde, regex and
three tauri-plugin-* crates are all declared exactly that way and were all
updated lockfile-only in #489.
The class is lockstep crate families: it bites only where a crate raises its
floor on siblings that version in step with it. Running the resolver emulation
over all 24 direct dependencies, seven are already current and tauri is the
only one that is both behind and unproposable.
That is the uncomfortable part. One dependency out of 24, and it is the one
everything else sits on.
What this does to today's work
#472, #484 and #490 built a mechanism whose whole promise is that drift becomes
visible — a scheduled pull request, a bounded ignore list, a written record of
what is held and why. A dependency that can sit two minors behind and appear in
none of it is a hole in that promise, and nobody would notice it from the
outside: the bot looks like it is working, because for the other 23 it is.
The same shape as the Node 20 deprecation earlier today. That warning was printed
in every release build for months and nobody read it, because nothing ever asked
anyone to decide about it. This is worse in one respect — there is no warning to
miss.
#490 is not the cause.#478 predates it and also omits tauri; exclude-patterns is npm-only and the ignore entries name only windows and webview2-com. (Confirmed while checking: tauri 2.11.5 still requires windows ^0.61 and webview2-com ^0.38, so those two entries stay correct
against the newer core.)
What I think should happen
Not an upgrade — a way to be told. The options I can see, worst to best:
Nothing. Remember to check by hand. This is the option that already failed
once today.
A comment next to tauri in Cargo.toml saying the bot cannot see this
line. Cheap, and about as effective as any comment nobody has a reason to open.
A check at release time.build.yml runs when someone is watching and is
already the place where release-shaped facts surface. A step that compares the
locked tauri against the index and fails loudly would turn an invisible state
into a red build at the one moment a human is present.
I would do 3, and I am happy to open it — but it is your call whether a release
should be blockable by an upstream version number, so I would rather ask than
ship it.
If tauri 2.11.5 is ever wanted, it is mechanically clean: cargo update -p tauri -p tauri-runtime -p tauri-runtime-wry -p tauri-utils -p tauri-macros
resolves in one step (32 packages) and cargo test gives 125/125, identical to master. That is a compile-and-unit-test result on macOS only — it says nothing
about runtime behaviour, and the Windows-gated code was not built.
Not established
Dependabot's own job logs. There is no public API for them; everything above is
reproduction of its documented resolver plus reading dependabot-core, not the
bot's record of what it decided.
Cargo.lockpinstauriat 2.10.2. 2.11.5 has been published since2026-07-01. No Dependabot pull request has ever offered it — not #478 in July,
which was unrestricted enough to cross
notify6→8 andzip2→4, and not #489or #491 under the current config.
This is not a backlog item. It is a hole in the reporting, it is permanent, and
the two configuration changes that landed today (#484, #490) do not touch it.
I am not asking for an upgrade — I have no benefit case for 2.11.5 and did
not go looking for one. I am reporting that the mechanism we just built cannot
see the framework this app runs on.
Why
Two independent rules multiply.
Dependabot's cargo resolver runs exactly one command. From
dependabot-core/cargo/.../version_resolver.rb:cargo update -p <dep> -vvagainst a manifest whose requirement has been loosened to
>= <locked>. One-p, no--precise.tauri2.11.5 raises its floor on four siblings that release in lockstep withit, and all four moves are within the same semver line:
tauri-runtime^2.10.0^2.11.3tauri-runtime-wry^2.10.0^2.11.4tauri-utils^2.8.2^2.9.3tauri-macros^2.5.4^2.6.3Cargo cannot hold two 2.x copies of one crate, so those four have to be replaced
in place — and
cargo updatemay not touch a package it was not named. So itdeclines, and says so:
Reproduced against
master's lockfile, naming different sets:-p tauri-p tauri -p tauri-runtime-p tauri -p tauri-runtime -p tauri-runtime-wry -p tauri-utils -p tauri-macros-p tauri-build(control)And the four unblockers are transitive.
allowed_updatesis unset, so thedefault
dependency-type: directapplies (job.rb#allowed_update?), andDependabot will never propose them on their own either.
One rule means it can only ever name
tauri. The other means it can never namethe four crates that would let
taurimove. There is noallow:orgroups:entry that resolves this, because the constraint is in how the resolver is
invoked, not in what it is allowed to consider.
How wide the hole is
Narrower than it first looks, and worth stating precisely so this is not read as
a general indictment.
The obvious hypothesis — that every bare-caret requirement like
tauri = { version = "2" }is invisible — is false.serde,regexandthree
tauri-plugin-*crates are all declared exactly that way and were allupdated lockfile-only in #489.
The class is lockstep crate families: it bites only where a crate raises its
floor on siblings that version in step with it. Running the resolver emulation
over all 24 direct dependencies, seven are already current and
tauriis theonly one that is both behind and unproposable.
That is the uncomfortable part. One dependency out of 24, and it is the one
everything else sits on.
What this does to today's work
#472, #484 and #490 built a mechanism whose whole promise is that drift becomes
visible — a scheduled pull request, a bounded
ignorelist, a written record ofwhat is held and why. A dependency that can sit two minors behind and appear in
none of it is a hole in that promise, and nobody would notice it from the
outside: the bot looks like it is working, because for the other 23 it is.
The same shape as the Node 20 deprecation earlier today. That warning was printed
in every release build for months and nobody read it, because nothing ever asked
anyone to decide about it. This is worse in one respect — there is no warning to
miss.
#490 is not the cause. #478 predates it and also omits
tauri;exclude-patternsis npm-only and theignoreentries name onlywindowsandwebview2-com. (Confirmed while checking: tauri 2.11.5 still requireswindows ^0.61andwebview2-com ^0.38, so those two entries stay correctagainst the newer core.)
What I think should happen
Not an upgrade — a way to be told. The options I can see, worst to best:
once today.
tauriinCargo.tomlsaying the bot cannot see thisline. Cheap, and about as effective as any comment nobody has a reason to open.
build.ymlruns when someone is watching and isalready the place where release-shaped facts surface. A step that compares the
locked
tauriagainst the index and fails loudly would turn an invisible stateinto a red build at the one moment a human is present.
I would do 3, and I am happy to open it — but it is your call whether a release
should be blockable by an upstream version number, so I would rather ask than
ship it.
If
tauri2.11.5 is ever wanted, it is mechanically clean:cargo update -p tauri -p tauri-runtime -p tauri-runtime-wry -p tauri-utils -p tauri-macrosresolves in one step (32 packages) and
cargo testgives 125/125, identical tomaster. That is a compile-and-unit-test result on macOS only — it says nothingabout runtime behaviour, and the Windows-gated code was not built.
Not established
reproduction of its documented resolver plus reading
dependabot-core, not thebot's record of what it decided.
chronoappears in chore(deps): bump the cargo group in /src-tauri with 17 updates #478's table. Consistent with moving as a byproduct ofanother bump rather than being proposed on its own, but not proven.