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
{{ message }}
Repository navigation
nuget.org deprecation metadata: point 61 retired packages at their replacements #43
Sixty-one published ktsu.* packages carry deprecation metadata that is wrong, missing, or reaches
only the newest version. Retired packages should point consumers at their replacement, and one of
them currently points at a dead end.
This touches no repository. It is metadata on nuget.org, applied through the gallery's deprecation
API. Naming work is tracked separately in #36.
Blocked on nuget.org
Every call returns 403. Test-NuGetDeprecationAccess.ps1 shows the key authenticates and reaches
the gallery, so this is the gallery refusing this specific operation rather than an edge block. IsManageDeprecationApiEnabled is off for the account. A request to enable it is with nuget.org
support, sent through the signed-in contact form at https://www.nuget.org/policies/Contact so the
form proves account ownership.
Push scope is never consulted on this path, so widening the key will not help.
Two traps when diagnosing this:
Do not read the 403 body. You do not have permission to view this directory or page. is IIS's
stock page. NuGetGallery returns its refusals through HttpStatusCodeWithBodyResult, which does
not set TrySkipIisCustomErrors, so IIS overwrites genuine gallery messages here. Body text
cannot tell you who refused you. Use Test-NuGetDeprecationAccess.ps1 instead, which probes verifykey and the real endpoint and compares the two.
Deprecation state is not in the flat-container API. Read it from api.nuget.org/v3/registration5-gz-semver2/<lowercase-id>/index.json.
Tooling
Set-NuGetDeprecation.ps1 drives PUT https://www.nuget.org/api/v2/package/{id}/deprecations
across every version of a package. It previews by default and needs -Execute to send. ktsu-deprecations.json holds the manifest, 61 packages in four groups, verified against nuget.org
on 20 August 2026. Full docs in the accompanying README.md.
Two rules the script enforces, both worth keeping:
Listing state is never touched. listedVerb is always Unchanged.
Any package whose alternate is unpublished is skipped. A dead hint is worse than no hint.
Run order
Once access is granted, run the groups in this order.
reapply-all-versions, 9 packages that are already deprecated on their latest version only.
Re-applying across all versions is what makes the hint reach pinned consumers.
essentials-consolidation, 39 packages from the seven archived repos plus ktsu.PhysicalQuantity and ktsu.AppData, each with an unambiguous published successor. This is
also what deprecates ktsu.AppData in the correct direction, so it pairs with step 1.
The fourth group, needs-a-decision, is disabled and tracked in #42.
Tasks
nuget.org enables the deprecation API for the account
Re-run Test-NuGetDeprecationAccess.ps1 and confirm a clean result before sending anything live
Give the scripts a home. They currently sit in C:\dev\ktsu-dev\scripts, tracked by no
repository, so a stray delete loses them. Sdk/scripts/ is the natural place, since it
already carries the org-wide PowerShell tooling.
What needs to be done: Get nuget.org to enable the deprecation management API for the account (currently 403, IsManageDeprecationApiEnabled off), then run the three ready groups (appdatastorage-repair, reapply-all-versions, essentials-consolidation) across 61 packages.
Suggested next steps / acceptance criteria:
File/follow up on the nuget.org support request through the signed-in contact form
Once granted, re-verify with Test-NuGetDeprecationAccess.ps1 before sending anything live
Give the scripts and manifest a permanent home in Sdk/scripts/ instead of an untracked local machine path
Blockers / dependencies: Externally blocked on nuget.org support enabling API access — nothing else in this chain can proceed until that happens. Encompasses/blocks Sdk#41 and Sdk#42
Sixty-one published
ktsu.*packages carry deprecation metadata that is wrong, missing, or reachesonly the newest version. Retired packages should point consumers at their replacement, and one of
them currently points at a dead end.
This touches no repository. It is metadata on nuget.org, applied through the gallery's deprecation
API. Naming work is tracked separately in #36.
Blocked on nuget.org
Every call returns 403.
Test-NuGetDeprecationAccess.ps1shows the key authenticates and reachesthe gallery, so this is the gallery refusing this specific operation rather than an edge block.
IsManageDeprecationApiEnabledis off for the account. A request to enable it is with nuget.orgsupport, sent through the signed-in contact form at https://www.nuget.org/policies/Contact so the
form proves account ownership.
Push scope is never consulted on this path, so widening the key will not help.
Two traps when diagnosing this:
You do not have permission to view this directory or page.is IIS'sstock page. NuGetGallery returns its refusals through
HttpStatusCodeWithBodyResult, which doesnot set
TrySkipIisCustomErrors, so IIS overwrites genuine gallery messages here. Body textcannot tell you who refused you. Use
Test-NuGetDeprecationAccess.ps1instead, which probesverifykeyand the real endpoint and compares the two.api.nuget.org/v3/registration5-gz-semver2/<lowercase-id>/index.json.Tooling
Set-NuGetDeprecation.ps1drivesPUT https://www.nuget.org/api/v2/package/{id}/deprecationsacross every version of a package. It previews by default and needs
-Executeto send.ktsu-deprecations.jsonholds the manifest, 61 packages in four groups, verified against nuget.orgon 20 August 2026. Full docs in the accompanying
README.md.Two rules the script enforces, both worth keeping:
listedVerbis alwaysUnchanged.Run order
Once access is granted, run the groups in this order.
appdatastorage-repair, 1 package,undeprecate. Urgent, and tracked in ktsu.AppDataStorage: 155 published versions deprecate to a package that stopped at 1.0.7-pre.2 #41. 155 versions ofthe live
ktsu.AppDataStoragepoint atktsu.AppData, which stopped at1.0.7-pre.2.reapply-all-versions, 9 packages that are already deprecated on their latest version only.Re-applying across all versions is what makes the hint reach pinned consumers.
essentials-consolidation, 39 packages from the seven archived repos plusktsu.PhysicalQuantityandktsu.AppData, each with an unambiguous published successor. This isalso what deprecates
ktsu.AppDatain the correct direction, so it pairs with step 1.The fourth group,
needs-a-decision, is disabled and tracked in #42.Tasks
Test-NuGetDeprecationAccess.ps1and confirm a clean result before sending anything liveappdatastorage-repair(ktsu.AppDataStorage: 155 published versions deprecate to a package that stopped at 1.0.7-pre.2 #41)reapply-all-versionsessentials-consolidationC:\dev\ktsu-dev\scripts, tracked by norepository, so a stray delete loses them.
Sdk/scripts/is the natural place, since italready carries the org-wide PowerShell tooling.