feat(persistence)!: inline vs-solutionpersistence; rename SolutionModel → Solution; namespace cleanup#257
Merged
Conversation
…el → Solution; namespace cleanup Closes #248. Codefix follow-up tracked in #253.⚠️ Breaking change The vendored Microsoft.VisualStudio.SolutionPersistence fork (vendor/ submodule, fork-of-fork-of-Microsoft) is gone. Sources inlined into a new Fallout.Persistence.Solution project under src/Persistence/, owned outright by Fallout. The facade was renamed and rehoused alongside it in src/Persistence/Fallout.Solution/, and the long-standing rebrand-era namespace mismatch (Fallout.Common.ProjectModel) is fixed to match the assembly name (Fallout.Solutions, plural per BCL convention to avoid Fallout.Solution.Solution awkwardness). Package IDs: - Fallout.SolutionModel → Fallout.Solution - Fallout.VisualStudio.SolutionPersistence → Fallout.Persistence.Solution Namespaces: - Fallout.Common.ProjectModel → Fallout.Solutions - Microsoft.VisualStudio.SolutionPersistence.{Model,Serializer,Utilities,...} → Fallout.Persistence.Solution.{Model,Serializer,Utilities,...} Transition shim: The Nuke.Common shim (src/Shims/Nuke.Common/ShimMarker.cs) now mirrors BOTH Fallout.Common.* → Nuke.Common.* AND Fallout.Solutions.* → Nuke.Common.ProjectModel.*, so NUKE-era consumer code using `using Nuke.Common.ProjectModel; [Solution] readonly Solution Solution;` keeps compiling. Onion layering: This PR establishes src/Persistence/ as the home for persistence-ring code. Future persistence-related projects go under the same directory. Visibility narrowing deferred: Parser types remain public for this PR. The IVT decorations in Fallout.Persistence.Solution.csproj are future-intent. Per-type narrowing requires cascading CS0050 analysis — separate PR. Tests: - All 12 test assemblies pass (453 passed, 7 skipped, 0 failed). - StronglyTypedSolutionGenerator verified snapshot regenerated. - RealWorldSmokeTests expectations temporarily reverted to expect Fallout.Common.ProjectModel paths (the namespace migration codefix in Fallout.Migrate.Analyzers hasn't been updated for v11 yet — see #253). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #248. Codefix follow-up tracked in #253.
This replaces the previous #254 which was auto-closed when its base branch (
feat/consumer-compat-tests-on-main) was deleted on the #256 merge. Same commit content, now correctly based on main (which already has #256's consumer sentinels).Affected surface
Fallout.SolutionModel(package, project, assembly)Fallout.Solutionatsrc/Persistence/Fallout.Solution/Fallout.VisualStudio.SolutionPersistence(package, project, assembly)Fallout.Persistence.Solutionatsrc/Persistence/Fallout.Persistence.Solution/Fallout.Common.ProjectModel.*namespaceFallout.Solutions.*(plural per BCL convention)Microsoft.VisualStudio.SolutionPersistence.{Model,Serializer,Utilities,...}namespaceFallout.Persistence.Solution.{Model,Serializer,Utilities,...}vendor/vs-solutionpersistence/submoduleBreaking-change detection result
The consumer-compat sentinels added in #256 caught this rename exactly:
Fallout.Consumer.Local— broke (usedFallout.Common.ProjectModel+ referencedsrc/Fallout.SolutionModel/). Resolved in this PR by updating the csproj path tosrc/Persistence/Fallout.Solution/and the using toFallout.Solutions. That update IS the documented consumer migration recipe.Nuke.Consumer— unaffected. The newFallout.Solutions.*→Nuke.Common.ProjectModel.*shim mapping inShimMarker.cstransparently covers the rename for NUKE-era consumers.Fallout.Consumer.NuGet— unaffected (pinned toFallout.* 11.0.8, predates the rename).So the blast radius is precisely what the shim's contract promised: only consumers using direct local Fallout source (no shim, no published packages) have to touch their code. Shim users and pinned-NuGet users see nothing.
Summary
vendor/submodule pointing atChrisonSimtian/vs-solutionpersistence) is gone. 92 source files inlined into a newFallout.Persistence.Solutionproject undersrc/Persistence/, owned outright by Fallout. No more submodule + fork-rebase coordination.src/Persistence/is now the layered home for persistence-ring code. Future persistence-related projects go here.src/Fallout.SolutionModel/→src/Persistence/Fallout.Solution/. The rebrand-era namespace mismatch (Fallout.Common.ProjectModel) is fixed to match the assembly name —Fallout.Solutions(plural to avoidFallout.Solution.Solutionawkwardness).src/Shims/Nuke.Common/ShimMarker.csnow declares two mappings: the existingFallout.Common.*→Nuke.Common.*plus a newFallout.Solutions.*→Nuke.Common.ProjectModel.*. NUKE-era consumer code usingusing Nuke.Common.ProjectModel; [Solution] readonly Solution Solution;keeps compiling.What's NOT in this PR
publicfor now. The[InternalsVisibleTo]decorations onFallout.Persistence.Solution.csprojare future-intent. Per-type narrowing needs cascading CS0050 analysis — separate PR.Fallout.Migrate.Analyzers'sNuke→Falloutrewriter still producesFallout.Common.ProjectModel.*(which is now a dead namespace). Test expectations temporarily reverted to match today's behavior. Tracked in Update Nuke→Fallout codefix to map Common.ProjectModel → Solutions for v11 #253.ChrisonSimtian/vs-solutionpersistenceis unreferenced. Archive (or transfer toFallout-buildonce that's live) — tracked in chore(ci): drop Qodana #11.Test plan
dotnet build fallout.slnx— green, 0 warnings, 0 errorsdotnet test fallout.slnx --no-build— all suites green