Central package management + dependabot major/minor split (#2100 follow-up) - #2162
Conversation
…ow-up) Directory.Packages.props now owns every package version; csprojs keep bare PackageReferences. A dependency bump is one line and every consumer moves atomically - the multi-project misalignment dependabot shipped in PR #2100 (NU1605 downgrade errors from a partial bump) cannot recur. tools/CompactionRepro keeps its deliberate DuckDB 1.5.3 via VersionOverride. Lock files regenerate as CPM format v2. dependabot.yml: the nuget group takes only minor+patch updates, so a major lands as its own PR instead of hiding in a routine batch (Studio's convention). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Reviewed. This repo has no Verified clean:
One low-confidence, non-blocking observation: in the three deprecated No correctness, security, or performance concerns found otherwise. |
What
Directory.Packages.props(new): all 22 package versions live here; every csproj'sPackageReferencedrops itsVersion=attribute.tools/CompactionReprokeeps its deliberate DuckDB.NET 1.5.3 pin viaVersionOverride(repro tool, original-version behavior is the point)..github/dependabot.yml: the nuget group becomesnuget-patch-and-minor(update-types: minor, patch) so majors arrive as individual PRs — Studio's convention, breaking changes never buried in a routine batch.packages.lock.jsonfiles regenerate in CPM's v2 format.Why
PR #2100 arrived broken in the exact way per-csproj pinning invites: dependabot bumped two projects, left three others on the old version (NU1605 downgrade, warning-as-error), and stranded every transitive lock file (NU1004 in locked-mode restore). Under CPM the bump is one line in one file and every consumer moves together — the misalignment class is structurally gone, not just less likely.
Review-suggestion dispositions from #2100 (robot round 1):
.gitattributestightening — already satisfied; the repo forces* text=auto eol=crlf, and dependabot's server-side writer bypasses attributes regardless, so CPM shrinking its blast radius to one file is the real fix.deprecated/**exclusion — deliberately NOT taken: those projects are in the solution, so their lock files must stay consistent when a shared dependency bumps; under CPM they follow the central line like everything else.No changelog entry: build-infrastructure only, nothing user-facing ships differently.
Testing
Version=attrs may survive; 17 csprojs with refs, 21 total).dotnet restore --locked-modepasses post-conversion (the CI gate, run locally).ILLink.TasksSDK-artifact trap from Bump ModelContextProtocol and ModelContextProtocol.AspNetCore #2100 round 2 (local 10.0.300 vs CI 10.0.302) was re-checked and the one affected lock entry restored to dev's pin.