Repository navigation
fix(deps): make dependabot.yml enforce the three holds that only prose was holding - #3537
Conversation
Directory.Packages.props says, in capitals, THE ASPIRE FAMILY IS HELD AT 13.4.6 ON PURPOSE - do not let a dependency sweep move it. Nothing made that true. A sweep proposed 13.4.6 -> 13.5.3 (#3519) and the LICENCE GATE caught it, one job before the build - the right outcome by the wrong instrument, and only because that gate exists at all. 13.5.0 is where Aspire's JsonPatch.Net dependency crosses from MIT to OSMFEULA. The exposure is not our image: memex/aspire/Memex.Aspire.Hosting is PUBLISHED as MeshWeaver.Aspire.Hosting.Memex, so its nuspec would hand the maintenance-fee obligation to everyone who installs it and calls AddMemex(). Scoped to >= 13.5.0, not to minors, so 13.4.x patches still flow. The block carries its own exit condition - the nuspec check for the first release that drops JsonPatch.Net (microsoft/aspire#19498, merged, unreleased) - so it is deleted rather than inherited. A rule written only in prose is a rule the next sweep does not read.
There was a problem hiding this comment.
🟢 Approval recommended
The change is a narrowly scoped Dependabot configuration update that implements an already-documented version hold without affecting runtime behavior.
Pull request overview
This PR updates the repository’s Dependabot configuration to mechanically enforce the existing decision (documented in Directory.Packages.props) to hold the Aspire package family below 13.5.0 due to the transitive license change in JsonPatch.Net.
Changes:
- Add a NuGet
ignorerule forAspire.*at versions>=13.5.0so Dependabot won’t repeatedly propose the problematic bump. - Document the rationale and explicit “exit condition” for removing the ignore once Aspire releases without the
JsonPatch.Netdependency.
File summaries
| File | Description |
|---|---|
.github/dependabot.yml |
Adds a NuGet ignore rule to prevent Aspire updates to >=13.5.0, aligning Dependabot behavior with the existing pinned-version policy and license constraints. |
Review details
- Files reviewed: 1/1 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Test Results (shard 0)251 tests 251 ✅ 2m 16s ⏱️ Results for commit ed9e0aa. ♻️ This comment has been updated with latest results. |
Test Results (shard 1)492 tests 492 ✅ 43s ⏱️ Results for commit ed9e0aa. ♻️ This comment has been updated with latest results. |
Test Results (shard 3)1 034 tests 1 034 ✅ 1m 6s ⏱️ Results for commit ed9e0aa. ♻️ This comment has been updated with latest results. |
Test Results (shard 4)1 600 tests 1 406 ✅ 2m 4s ⏱️ Results for commit ed9e0aa. ♻️ This comment has been updated with latest results. |
Test Results (shard 5) 5 files 5 suites 1m 49s ⏱️ Results for commit ed9e0aa. ♻️ This comment has been updated with latest results. |
Two more dependency decisions that lived only in prose, found by measuring the four red Dependabot PRs in core rather than by re-reading the comments. SkiaSharp is ONE decision across THREE packages and Dependabot was splitting it into PRs that are red by construction: #3527 moved the managed library to 4.151.2 and every share-card / favicon test died in the SkiaApi static ctor ("native libSkiaSharp (119.0) is incompatible ... range [151.0, 152.0)"), #3528 moved the natives and was the mirror image, and NEITHER touched Svg.Skia, which floors SkiaSharp at 3.119.2 — so even both halves together would have been NU1605. The skia-stack group is listed FIRST because nuget-minor-patch declares no patterns and therefore matches everything. ImageSharp 4.x is not a licence judgement call: the package enforces its own licence in MSBuild, and #3526's Release build failed before any test ran with "No Six Labors license found ... obtain a license from sixlabors.com/pricing". 3.1.x stays Apache-2.0 and still gets security patches, so the floor is on the major only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Test Results (shard 2)1 113 tests 1 113 ✅ 3m 35s ⏱️ Results for commit ed9e0aa. |
Test Results 16 files 16 suites 11m 36s ⏱️ Results for commit ed9e0aa. |
Enforces a decision this repository already made, in writing, and which nothing was holding.
Directory.Packages.propssays — in capitals:A dependency sweep moved it. #3519 proposes
Aspire.Hosting 13.4.6 → 13.5.3, and what caught it was the licence gate, one job before the build:That is the right outcome by the wrong instrument. The gate is a backstop for a licence nobody vetted; it happened to also catch a bump the repo had already reasoned its way out of, and it would have caught it just as well on the tenth re-proposal.
.github/dependabot.ymlhad noignore:block at all, so the sweep would keep offering it every Monday.The decision being enforced, in the words of the file that made it
13.5.0 is where Aspire's
JsonPatch.Netdependency crosses MIT → OSMFEULA (Open Source Maintenance Fee).🚨 The exposure is not our image. It is
memex/aspire/Memex.Aspire.Hosting, which isIsPackableand published asMeshWeaver.Aspire.Hosting.Memex— its nuspec carries these three as dependencies, so taking 13.5.x hands the fee obligation to everyone who installs our integration and callsbuilder.AddMemex(), people who never chose it.Measured on both pins, in that same comment:
Why it carries its own exit
The hold is temporary and upstream already fixed it:
microsoft/aspire#19493raised exactly this objection and#19498replacedJsonPatch.Netwith an internal RFC 6902 implementation overSystem.Text.Json.Nodes— merged 2026-08-25, not yet released (13.5.3 still pins 5.0.2).So the block states the condition for its own deletion rather than becoming folklore:
Scope
versions: [">=13.5.0"], not an update-type ignore. A minor-level ignore would also block13.4.7; this blocks exactly the versions that cross the licence boundary and lets ordinary 13.4.x patches keep flowing.What this does NOT do
CS8602: Dereference of a possibly null referenceinTwoSiloCacheUpdateFixture.cs:113andSharedOrleansFixture.cs:234, from an Orleans bump tightening nullability under-warnaserror.SixLabors.ImageSharp 4.xis a separate pay-to-use wall (#3526: "No Six Labors license found… obtain a license from sixlabors.com/pricing") and there is no recorded decision for it the way there is for Aspire. That one is a real question for the maintainer, not a rule to enforce, so it is deliberately left alone.Verification
yaml.safe_loadparses; the parsed config carries exactly one ignore entry, on the nuget ecosystem:[{'dependency-name': 'Aspire.*', 'versions': ['>=13.5.0']}].