Repository navigation
Description
Problem
The dotnet-tool package ID changed from Fallout.GlobalTool to Fallout.GlobalTools in f0208100. The old ID was left published, listed, and not deprecated, so consumers pinning it cannot reach 10.4 and get no signal that a successor exists.
Published state on nuget.org:
| Package ID | Versions | Range | Status |
|---|---|---|---|
Fallout.GlobalTool |
52 | → 10.3.49 | listed, not deprecated |
Fallout.Cli |
18 | 10.3.39–10.3.47, 11.0.x | 10.3.4x unlisted |
Fallout.GlobalTools |
1 | 10.4.0-rc.4 only | listed |
A real consumer manifest (Chrison-dev/Krautwatch):
"fallout.globaltool": { "version": "10.3.49", "rollForward": true }That pin is already at its ID's ceiling. 10.4.0-rc.4 exists only under fallout.globaltool s. rollForward resolves within a single package ID, so it cannot cross to a different one. dotnet tool update and dotnet tool restore can never reach 10.4 from this manifest.
The failure is silent and misdiagnoses. nuget.org correctly reports 10.3.49 as the latest for Fallout.GlobalTool, so the natural reading is "10.4 is not published yet" rather than "it was renamed". That is the wrong conclusion, and it is the one a consumer reaches.
Why it shipped unflagged
f0208100 assessed the rename as Fallout.Cli → Fallout.GlobalTools and concluded:
"Fallout.Cli was never pushed to nuget.org, so this is a pre-publication rename — non-breaking."
Fallout.Cli had in fact been published (10.3.39–10.3.47, 11.0.x). More importantly, the ID that 10.3.x consumers actually pinned was Fallout.GlobalTool, which the assessment never considered. The break was measured against a package nobody was using.
Why the canary did not catch it
Fallout.Canary consumes the framework packages via PackageReference and runs dotnet run --project build/_build.csproj. It has no .config/dotnet-tools.json and never runs dotnet tool install or dotnet tool restore, so the tool package identity is outside its coverage. Its nuget.config already maps fallout.globaltools to a source, but no scenario exercises it.
Outcome
An existing consumer on any retired tool ID learns about the rename from the tooling itself, and fallout-migrate moves their manifest to a manifest that restores.
Acceptance criteria
-
Fallout.GlobalToolis deprecated on nuget.org withFallout.GlobalToolsas the alternate package -
fallout-migraterewritesdotnet-tools.jsontool IDs (nuke.globaltool,fallout.globaltool,fallout.cli) tofallout.globaltools - The rewrite re-pins the version to one that exists under the new ID — renaming the key alone produces a manifest that fails
dotnet tool restore - Docs name one install ID consistently;
docs/introduction.mdcurrently saysFallout.GlobalToolon line 21 andFallout.GlobalToolson line 48 - This repo's own
.config/dotnet-tools.jsonstops pinningfallout.cli10.3.45, which is an unlisted version of a retired ID -
Fallout.Canaryhas a scenario that restores the tool from a manifest, so a future tool-ID change fails loudly
Notes
The nuget.org deprecation is the highest-leverage item: it reaches every existing consumer without them reading docs or running the migrator. The other items only help people who do one of those things. It is a publishing action, so it cannot ride a PR.
fallout.globaltools has no stable release — only 10.4.0-rc.4. Until a stable one ships, the migrator can only re-pin to a prerelease.
Rule #1 in AGENTS.md requires a CHANGELOG.md entry for a breaking change. There is no CHANGELOG.md in this repo, so that rule is currently unfollowable and needs a separate decision.
Activity
Add a tool-manifest scenario covering the published tool package id
Migrate dotnet-tools.json off the retired Fallout tool ids
Name one tool package id across the docs and dogfood it
ChrisonSimtian commentedon Aug 4, 2026
solved elsewhere,
Fallout.GlobalToolis the package (for now)ChrisonSimtian commentedon Aug 4, 2026
Status against the acceptance criteria — four of six done, two left.
Done
Tool id deprecated on nuget.org. Outcome inverted from what this issue proposed:
Fallout.GlobalTool(singular) is the final shipping id, andFallout.GlobalTools(plural) is the one unlisted and deprecated, withFallout.GlobalToolas its alternate and the message "Package got renamed". Verified via the registration API.fallout.cliis deprecated too.Docs name one id.
docs/introduction.mdsaysFallout.GlobalToolon both lines 21 and 48; the README carries the "uninstall the plural id" note for anyone who installed10.4.0-rc.4.This repo stops pinning
fallout.cli10.3.45. #622 repoints.config/dotnet-tools.jsonatFallout.GlobalTool10.4.0-rc.5. Verified withdotnet tool restore.Canary covers the tool'"'"'s install path. Fallout-build/Fallout.Canary#7 (pending merge). The
tool-manifestscenario now tests the upgrade hop rather than a float: the committed manifest pins the previous line'"'"'s last GA (10.3.49), the run restores it, upgrades to the newest published version, and fails if the manifest didn'"'"'t actually move off the baseline. That covers both halves of this issue — that an existing pin still resolves, and that it can reach the current line.Worth recording why the original scenario missed it: it floated to the newest published version, and a float has no starting point to be stranded from. It could never have caught a rename. The design note is a dated amendment in the canary'"'"'s
docs/DESIGN.md.That scenario had also been red every night since 2026-07-29 — it floated the plural id, which stopped resolving when the id was unlisted. Correct check, wrong id. Green now.
Still open
fallout-migraterewritingdotnet-tools.jsontool ids (nuke.globaltool,fallout.globaltool,fallout.cli) to the shipping id.dotnet tool restore.Both are now lower-stakes than when this was filed, since the id reverted to
Fallout.GlobalTooland 10.3.x consumers are no longer stranded:dotnet tool updatereaches 10.4 on the id they already have. The migrator work matters for NUKE-era (nuke.globaltool) andfallout.climanifests.The note at the bottom of this issue about
CHANGELOG.mdmaking rule #1 unfollowable is resolved separately in #622 — the file is gone and the rule now points at the PR description plus the label-generated release notes.