Scope
Execute the complete Nuke.* → Fallout.* rename across every axis in a single atomic PR. The Fallout brand cannot carry forward the NUKE name in any active surface — references to upstream NUKE remain only as historical attribution.
#34 (csproj filename rename) is rolled into this issue — splitting them would create an intermediate state where namespaces and assembly names disagree, complicating InternalsVisibleTo, ProjectReference paths, and the dogfooded build.
Plan and locked mapping: docs/rebrand-plan.md. Strict 1:1 prefix swap, no consolidation (locked by the bridge-package design in #35/#47).
What changes
| Axis |
Before |
After |
| Namespace declarations |
namespace Nuke.X.Y |
namespace Fallout.X.Y |
using directives |
using Nuke.Common; |
using Fallout.Common; |
Fully-qualified type references in code, xmldoc cref, attribute strings |
Nuke.Common.X |
Fallout.Common.X |
Folder names under src/ and tests/ |
src/Nuke.Common/ |
src/Fallout.Common/ |
.csproj filenames |
Nuke.Common.csproj |
Fallout.Common.csproj |
| Assembly names (default = csproj name) |
Nuke.Common.dll |
Fallout.Common.dll |
| Package IDs |
Nuke.Common |
Fallout.Common |
ProjectReference paths in every csproj |
..\Nuke.Common\Nuke.Common.csproj |
..\Fallout.Common\Fallout.Common.csproj |
InternalsVisibleTo attributes in AssemblyInfo.cs |
Nuke.Common |
Fallout.Common |
_build.csproj framework refs |
..\src\Nuke.Common\Nuke.Common.csproj |
..\src\Fallout.Common\Fallout.Common.csproj |
Solution file <Project> entries in fallout.slnx |
src/Nuke.X/Nuke.X.csproj |
src/Fallout.X/Fallout.X.csproj |
| Verify snapshots embedding FQTNs |
Nuke.Common.X |
Fallout.Common.X |
| Source-generator emitted code |
Nuke.Common.* |
Fallout.Common.* |
GlobalTool templates (templates/Build.cs) |
references Nuke.Common package |
references Fallout.Common package |
What's preserved (carved out)
Carried forward from #52's intentional-keep list — anything referencing upstream NUKE as a historical project stays:
Constants.UpstreamNukeRepository / UpstreamNukeRepositoryGit — deliberate legacy-recognition constants
Telemetry.Properties.IsCommonType legacy-NUKE assembly identification (NUKE 10.x assemblies built against the upstream RepositoryUrl keep being recognized)
tests/Nuke.Build.Tests/GitRepositoryTest.cs + tests/Nuke.Common.Tests/GitHubTasksTest.cs — fixtures that deliberately parse nuke-build/nuke URLs
src/Nuke.Utilities/EnvironmentInfo.SpecialFolder.cs:34 — link to historical upstream PR #825
- README / CONTRIBUTING / CLAUDE.md attribution paragraphs
- CHANGELOG.md historical entries
build/_build.csproj line 33 — commented-out NukeExternalFiles test code
Note: the test fixture filenames tests/Nuke.Build.Tests/... and tests/Nuke.Common.Tests/... themselves do rename (to tests/Fallout.Build.Tests/... etc.). The carve-out is only their contents.
Approach
- Inventory pass — exhaustively enumerate namespaces, project refs, assembly attributes, Verify snapshots. Catches surprises before any rewrite.
- Folder + csproj moves via
git mv so history is preserved.
- Scripted prefix rewrite with anchored regex over
.cs, .csproj, .targets, .props, .json, .slnx — anchored so we don't accidentally rewrite e.g. nuke-build/nuke URL fragments in fixtures.
- Manual restoration of carve-outs listed above.
- Regenerate tool wrappers (
./build.ps1 GenerateTools) and Verify snapshots.
- Build + test + dogfood —
./build.ps1 itself must run unchanged.
Done when
Downstream unblocks
Scope
Execute the complete
Nuke.* → Fallout.*rename across every axis in a single atomic PR. The Fallout brand cannot carry forward the NUKE name in any active surface — references to upstream NUKE remain only as historical attribution.#34 (csproj filename rename) is rolled into this issue — splitting them would create an intermediate state where namespaces and assembly names disagree, complicating
InternalsVisibleTo,ProjectReferencepaths, and the dogfooded build.Plan and locked mapping:
docs/rebrand-plan.md. Strict 1:1 prefix swap, no consolidation (locked by the bridge-package design in #35/#47).What changes
namespace Nuke.X.Ynamespace Fallout.X.Yusingdirectivesusing Nuke.Common;using Fallout.Common;cref, attribute stringsNuke.Common.XFallout.Common.Xsrc/andtests/src/Nuke.Common/src/Fallout.Common/.csprojfilenamesNuke.Common.csprojFallout.Common.csprojNuke.Common.dllFallout.Common.dllNuke.CommonFallout.CommonProjectReferencepaths in every csproj..\Nuke.Common\Nuke.Common.csproj..\Fallout.Common\Fallout.Common.csprojInternalsVisibleToattributes inAssemblyInfo.csNuke.CommonFallout.Common_build.csprojframework refs..\src\Nuke.Common\Nuke.Common.csproj..\src\Fallout.Common\Fallout.Common.csproj<Project>entries infallout.slnxsrc/Nuke.X/Nuke.X.csprojsrc/Fallout.X/Fallout.X.csprojNuke.Common.XFallout.Common.XNuke.Common.*Fallout.Common.*templates/Build.cs)Nuke.CommonpackageFallout.CommonpackageWhat's preserved (carved out)
Carried forward from #52's intentional-keep list — anything referencing upstream NUKE as a historical project stays:
Constants.UpstreamNukeRepository/UpstreamNukeRepositoryGit— deliberate legacy-recognition constantsTelemetry.Properties.IsCommonTypelegacy-NUKE assembly identification (NUKE 10.x assemblies built against the upstreamRepositoryUrlkeep being recognized)tests/Nuke.Build.Tests/GitRepositoryTest.cs+tests/Nuke.Common.Tests/GitHubTasksTest.cs— fixtures that deliberately parsenuke-build/nukeURLssrc/Nuke.Utilities/EnvironmentInfo.SpecialFolder.cs:34— link to historical upstream PR #825build/_build.csprojline 33 — commented-outNukeExternalFilestest codeApproach
git mvso history is preserved..cs,.csproj,.targets,.props,.json,.slnx— anchored so we don't accidentally rewrite e.g.nuke-build/nukeURL fragments in fixtures../build.ps1 GenerateTools) and Verify snapshots../build.ps1itself must run unchanged.Done when
grep -r '^namespace Nuke\.' src/ build/ tests/returns zero hitsgrep -rn 'Nuke\.\(Common\|Build\|Components\|GlobalTool\|MSBuildTasks\|SourceGenerators\|CodeGeneration\|Utilities\)' src/ build/ tests/returns only the carve-outs listed abovegit log --followstill resolves their pre-rename historyfallout.slnxreferences all updated pathsdotnet build fallout.slnxsucceeds with 0 errorsdotnet test fallout.slnx --no-build— all suites green./build.ps1runs end-to-end (dogfood test)Downstream unblocks