diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs
index df15df355..af099f603 100644
--- a/AssemblyInfo.cs
+++ b/AssemblyInfo.cs
@@ -18,6 +18,17 @@
[assembly: InternalsVisibleTo("Fallout.Utilities.IO.Globbing")]
[assembly: InternalsVisibleTo("Fallout.Utilities.Specs")]
+// Application-layer tool families — some tool attributes integrate with the (currently
+// internal) value-injection plumbing. Interim bridge until value-injection is a public
+// Application API; tracked with the tool-namespace-alignment follow-up.
+[assembly: InternalsVisibleTo("Fallout.Application.Tools.Signing")]
+[assembly: InternalsVisibleTo("Fallout.Application.Tools.Versioning")]
+[assembly: InternalsVisibleTo("Fallout.Application.Tools.Shell")]
+[assembly: InternalsVisibleTo("Fallout.Application.Tools.DotNet")]
+[assembly: InternalsVisibleTo("Fallout.Application.Tools.Coverage")]
+[assembly: InternalsVisibleTo("Fallout.Application.Tools.Containers")]
+[assembly: InternalsVisibleTo("Fallout.Application.Tools.VersionControl")]
+
// External extensions — kept as Nuke.* until those projects rebrand independently.
[assembly: InternalsVisibleTo("Nuke.VisualStudio")]
[assembly: InternalsVisibleTo("ReSharper.Nuke")]
diff --git a/build/Build.CodeGeneration.cs b/build/Build.CodeGeneration.cs
index f8ab28165..109417e77 100644
--- a/build/Build.CodeGeneration.cs
+++ b/build/Build.CodeGeneration.cs
@@ -1,6 +1,7 @@
using System;
using Fallout.Common;
using Fallout.Common.IO;
+using Fallout.Common.Git;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities.Collections;
using static Fallout.CodeGeneration.CodeGenerator;
diff --git a/build/Build.Stargazers.cs b/build/Build.Stargazers.cs
index 72d5449ba..47a428d56 100644
--- a/build/Build.Stargazers.cs
+++ b/build/Build.Stargazers.cs
@@ -2,6 +2,7 @@
using System.Threading.Tasks;
using Fallout.Common;
using Fallout.Common.IO;
+using Fallout.Common.Git;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
diff --git a/build/_build.csproj b/build/_build.csproj
index cee68e3d4..89c4f410b 100644
--- a/build/_build.csproj
+++ b/build/_build.csproj
@@ -67,6 +67,9 @@
+
+
+
diff --git a/fallout.slnx b/fallout.slnx
index d6058e85d..75b2cf2e3 100644
--- a/fallout.slnx
+++ b/fallout.slnx
@@ -30,6 +30,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Build/VCS/GitHubUrlExtensions.cs b/src/Fallout.Build/VCS/GitHubUrlExtensions.cs
new file mode 100644
index 000000000..adfd752e8
--- /dev/null
+++ b/src/Fallout.Build/VCS/GitHubUrlExtensions.cs
@@ -0,0 +1,119 @@
+using System.IO;
+using Fallout.Common.Utilities;
+using static Fallout.Common.IO.PathConstruction;
+
+namespace Fallout.Common.Git;
+
+public enum GitHubItemType
+{
+ Automatic,
+ File,
+ Directory
+}
+
+///
+/// Pure URL/identity helpers over a for GitHub-hosted repositories.
+/// These are Git-domain string helpers (no GitHub API access) and live next to
+/// ; the Octokit-backed client lives in the GitHub tool.
+///
+public static class GitHubUrlExtensions
+{
+ public static bool IsGitHubRepository(this GitRepository repository)
+ {
+ return repository?.Endpoint?.EqualsOrdinalIgnoreCase("github.com") ?? false;
+ }
+
+ public static string GetGitHubOwner(this GitRepository repository)
+ {
+ Assert.True(repository.IsGitHubRepository());
+ return repository.Identifier.Split('/')[0];
+ }
+
+ public static string GetGitHubName(this GitRepository repository)
+ {
+ Assert.True(repository.IsGitHubRepository());
+ return repository.Identifier.Split('/')[1];
+ }
+
+ public static string GetGitHubCompareCommitsUrl(this GitRepository repository, string startCommitSha, string endCommitSha)
+ {
+ Assert.True(repository.IsGitHubRepository());
+ return $"https://github.com/{repository.Identifier}/compare/{endCommitSha}^...{startCommitSha}";
+ }
+
+ public static string GetGitHubCompareTagToHeadUrl(this GitRepository repository, string tag)
+ {
+ Assert.True(repository.IsGitHubRepository());
+ return $"https://github.com/{repository.Identifier}/compare/{tag}...HEAD";
+ }
+
+ public static string GetGitHubCompareTagsUrl(this GitRepository repository, string startTag, string endTag)
+ {
+ Assert.True(repository.IsGitHubRepository());
+ return $"https://github.com/{repository.Identifier}/compare/{endTag}...{startTag}";
+ }
+
+ public static string GetGitHubCommitUrl(this GitRepository repository, string commitSha)
+ {
+ Assert.True(repository.IsGitHubRepository());
+ return $"https://github.com/{repository.Identifier}/commit/{commitSha}";
+ }
+
+ /// Url in the form of https://raw.githubusercontent.com/{identifier}/{branch}/{file}.
+ public static string GetGitHubDownloadUrl(this GitRepository repository, string file, string branch = null)
+ {
+ Assert.True(repository.IsGitHubRepository());
+
+ branch ??= repository.Branch.NotNull("repository.Branch != null");
+ var relativePath = GetRepositoryRelativePath(file, repository);
+ return $"https://raw.githubusercontent.com/{repository.Identifier}/{branch}/{relativePath}";
+ }
+
+ ///
+ /// Url in the form of https://github.com/{identifier}/tree/{branch}/directory or
+ /// https://github.com/{identifier}/blob/{branch}/file depending on the item type.
+ ///
+ public static string GetGitHubBrowseUrl(
+ this GitRepository repository,
+ string path = null,
+ string branch = null,
+ GitHubItemType itemType = GitHubItemType.Automatic)
+ {
+ Assert.True(repository.IsGitHubRepository());
+
+ branch ??= repository.Branch.NotNull();
+ var relativePath = GetRepositoryRelativePath(path, repository);
+ var method = GetMethod(relativePath, itemType, repository);
+ Assert.True(path == null || method != null, "Could not determine item type");
+
+ return $"https://github.com/{repository.Identifier}/{method}/{branch}/{relativePath}".TrimEnd("/");
+ }
+
+ private static string GetMethod(string relativePath, GitHubItemType itemType, GitRepository repository)
+ {
+ var absolutePath = repository.LocalDirectory != null && relativePath != null
+ ? NormalizePath(Path.Combine(repository.LocalDirectory, relativePath))
+ : null;
+
+ if (itemType == GitHubItemType.Directory || Directory.Exists(absolutePath) || relativePath == null)
+ return "tree";
+
+ if (itemType == GitHubItemType.File || File.Exists(absolutePath))
+ return "blob";
+
+ return null;
+ }
+
+ private static string GetRepositoryRelativePath(string path, GitRepository repository)
+ {
+ if (path == null)
+ return null;
+
+ if (!Path.IsPathRooted(path))
+ return path;
+
+ var localDirectory = repository.LocalDirectory.NotNull();
+ Assert.True(IsDescendantPath(localDirectory, path), $"Path {path.SingleQuote()} must be descendant of {localDirectory:s}");
+ return GetRelativePath(localDirectory, path).Replace(oldChar: '\\', newChar: '/');
+ }
+}
diff --git a/src/Fallout.Cli/Fallout.Cli.csproj b/src/Fallout.Cli/Fallout.Cli.csproj
index 996a07f13..876045491 100644
--- a/src/Fallout.Cli/Fallout.Cli.csproj
+++ b/src/Fallout.Cli/Fallout.Cli.csproj
@@ -14,6 +14,10 @@
+
+
+
+
diff --git a/src/Fallout.Common/CI/TeamCity/TeamCity.cs b/src/Fallout.Common/CI/TeamCity/TeamCity.cs
index b12931127..fb1cb34d6 100644
--- a/src/Fallout.Common/CI/TeamCity/TeamCity.cs
+++ b/src/Fallout.Common/CI/TeamCity/TeamCity.cs
@@ -5,7 +5,6 @@
using System.Linq;
using System.Text;
using Fallout.Common.IO;
-using Fallout.Common.Tools.DotCover;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using Serilog;
@@ -140,8 +139,8 @@ public void ImportData(
{
Log.Warning("Configuration parameter 'teamcity.dotCover.home' is set to the bundled version." +
"Adding the {AttributeName} will automatically set " +
- $"it to '{nameof(DotCoverTasks)}.{nameof(DotCoverTasks.DotCoverPath)}'",
- nameof(TeamCitySetDotCoverHomePathAttribute));
+ "it to 'DotCoverTasks.DotCoverPath'",
+ "TeamCitySetDotCoverHomePathAttribute");
}
Write("importData",
diff --git a/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs b/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs
index c354b0293..1bbf03b96 100644
--- a/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs
+++ b/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs
@@ -5,7 +5,6 @@
using NuGet.Versioning;
using Fallout.Common.Git;
using Fallout.Common.IO;
-using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
using Serilog;
diff --git a/src/Fallout.Common/Fallout.Common.csproj b/src/Fallout.Common/Fallout.Common.csproj
index b0c922b14..5382bc5e1 100644
--- a/src/Fallout.Common/Fallout.Common.csproj
+++ b/src/Fallout.Common/Fallout.Common.csproj
@@ -22,14 +22,6 @@
-
-
-
-
-
-
-
-
diff --git a/src/Fallout.Components/Fallout.Components.csproj b/src/Fallout.Components/Fallout.Components.csproj
index 7b70d2480..09b58e4b8 100644
--- a/src/Fallout.Components/Fallout.Components.csproj
+++ b/src/Fallout.Components/Fallout.Components.csproj
@@ -6,6 +6,11 @@
+
+
+
+
+
diff --git a/src/Fallout.Components/ICreateGitHubRelease.cs b/src/Fallout.Components/ICreateGitHubRelease.cs
index f730d0854..dd240bd25 100644
--- a/src/Fallout.Components/ICreateGitHubRelease.cs
+++ b/src/Fallout.Components/ICreateGitHubRelease.cs
@@ -6,6 +6,7 @@
using Fallout.Common;
using Fallout.Common.ChangeLog;
using Fallout.Common.CI.GitHubActions;
+using Fallout.Common.Git;
using Fallout.Common.IO;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
diff --git a/src/Tools/Fallout.Application.Tools.Cloud/Fallout.Application.Tools.Cloud.csproj b/src/Tools/Fallout.Application.Tools.Cloud/Fallout.Application.Tools.Cloud.csproj
new file mode 100644
index 000000000..0d92526a2
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Cloud/Fallout.Application.Tools.Cloud.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Cloud/deploy tool wrappers — Octopus, Netlify, Static Web Apps. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/Netlify/Netlify.Generated.cs b/src/Tools/Fallout.Application.Tools.Cloud/Netlify/Netlify.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Netlify/Netlify.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Cloud/Netlify/Netlify.Generated.cs
diff --git a/src/Fallout.Common/Tools/Netlify/Netlify.json b/src/Tools/Fallout.Application.Tools.Cloud/Netlify/Netlify.json
similarity index 100%
rename from src/Fallout.Common/Tools/Netlify/Netlify.json
rename to src/Tools/Fallout.Application.Tools.Cloud/Netlify/Netlify.json
diff --git a/src/Fallout.Common/Tools/Netlify/NetlifyTasks.cs b/src/Tools/Fallout.Application.Tools.Cloud/Netlify/NetlifyTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Netlify/NetlifyTasks.cs
rename to src/Tools/Fallout.Application.Tools.Cloud/Netlify/NetlifyTasks.cs
diff --git a/src/Fallout.Common/Tools/Octopus/Octopus.Generated.cs b/src/Tools/Fallout.Application.Tools.Cloud/Octopus/Octopus.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Octopus/Octopus.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Cloud/Octopus/Octopus.Generated.cs
diff --git a/src/Fallout.Common/Tools/Octopus/Octopus.json b/src/Tools/Fallout.Application.Tools.Cloud/Octopus/Octopus.json
similarity index 100%
rename from src/Fallout.Common/Tools/Octopus/Octopus.json
rename to src/Tools/Fallout.Application.Tools.Cloud/Octopus/Octopus.json
diff --git a/src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.Generated.cs b/src/Tools/Fallout.Application.Tools.Cloud/StaticWebApps/StaticWebApps.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Cloud/StaticWebApps/StaticWebApps.Generated.cs
diff --git a/src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.json b/src/Tools/Fallout.Application.Tools.Cloud/StaticWebApps/StaticWebApps.json
similarity index 100%
rename from src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.json
rename to src/Tools/Fallout.Application.Tools.Cloud/StaticWebApps/StaticWebApps.json
diff --git a/src/Fallout.Common/Tools/Docker/Docker.Generated.cs b/src/Tools/Fallout.Application.Tools.Containers/Docker/Docker.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Docker/Docker.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Containers/Docker/Docker.Generated.cs
diff --git a/src/Fallout.Common/Tools/Docker/Docker.json b/src/Tools/Fallout.Application.Tools.Containers/Docker/Docker.json
similarity index 100%
rename from src/Fallout.Common/Tools/Docker/Docker.json
rename to src/Tools/Fallout.Application.Tools.Containers/Docker/Docker.json
diff --git a/src/Fallout.Common/Tools/Docker/DockerTargetDefinitionExtensions.cs b/src/Tools/Fallout.Application.Tools.Containers/Docker/DockerTargetDefinitionExtensions.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Docker/DockerTargetDefinitionExtensions.cs
rename to src/Tools/Fallout.Application.Tools.Containers/Docker/DockerTargetDefinitionExtensions.cs
diff --git a/src/Fallout.Common/Tools/Docker/DockerTasks.cs b/src/Tools/Fallout.Application.Tools.Containers/Docker/DockerTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Docker/DockerTasks.cs
rename to src/Tools/Fallout.Application.Tools.Containers/Docker/DockerTasks.cs
diff --git a/src/Tools/Fallout.Application.Tools.Containers/Fallout.Application.Tools.Containers.csproj b/src/Tools/Fallout.Application.Tools.Containers/Fallout.Application.Tools.Containers.csproj
new file mode 100644
index 000000000..286bc6526
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Containers/Fallout.Application.Tools.Containers.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net10.0
+ Container/orchestration tool wrappers for Fallout — Docker, Helm, Kubernetes, Pulumi. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/Helm/Helm.Generated.cs b/src/Tools/Fallout.Application.Tools.Containers/Helm/Helm.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Helm/Helm.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Containers/Helm/Helm.Generated.cs
diff --git a/src/Fallout.Common/Tools/Helm/Helm.json b/src/Tools/Fallout.Application.Tools.Containers/Helm/Helm.json
similarity index 100%
rename from src/Fallout.Common/Tools/Helm/Helm.json
rename to src/Tools/Fallout.Application.Tools.Containers/Helm/Helm.json
diff --git a/src/Fallout.Common/Tools/Kubernetes/Kubernetes.Generated.cs b/src/Tools/Fallout.Application.Tools.Containers/Kubernetes/Kubernetes.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Kubernetes/Kubernetes.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Containers/Kubernetes/Kubernetes.Generated.cs
diff --git a/src/Fallout.Common/Tools/Kubernetes/Kubernetes.json b/src/Tools/Fallout.Application.Tools.Containers/Kubernetes/Kubernetes.json
similarity index 100%
rename from src/Fallout.Common/Tools/Kubernetes/Kubernetes.json
rename to src/Tools/Fallout.Application.Tools.Containers/Kubernetes/Kubernetes.json
diff --git a/src/Fallout.Common/Tools/Pulumi/Pulumi.Generated.cs b/src/Tools/Fallout.Application.Tools.Containers/Pulumi/Pulumi.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Pulumi/Pulumi.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Containers/Pulumi/Pulumi.Generated.cs
diff --git a/src/Fallout.Common/Tools/Pulumi/Pulumi.json b/src/Tools/Fallout.Application.Tools.Containers/Pulumi/Pulumi.json
similarity index 100%
rename from src/Fallout.Common/Tools/Pulumi/Pulumi.json
rename to src/Tools/Fallout.Application.Tools.Containers/Pulumi/Pulumi.json
diff --git a/src/Fallout.Common/Tools/Pulumi/PulumiTasks.cs b/src/Tools/Fallout.Application.Tools.Containers/Pulumi/PulumiTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Pulumi/PulumiTasks.cs
rename to src/Tools/Fallout.Application.Tools.Containers/Pulumi/PulumiTasks.cs
diff --git a/src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/CodeMetrics/CodeMetrics.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/CodeMetrics/CodeMetrics.Generated.cs
diff --git a/src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.json b/src/Tools/Fallout.Application.Tools.Coverage/CodeMetrics/CodeMetrics.json
similarity index 100%
rename from src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.json
rename to src/Tools/Fallout.Application.Tools.Coverage/CodeMetrics/CodeMetrics.json
diff --git a/src/Fallout.Common/Tools/Codecov/Codecov.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/Codecov/Codecov.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Codecov/Codecov.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/Codecov/Codecov.Generated.cs
diff --git a/src/Fallout.Common/Tools/Codecov/Codecov.json b/src/Tools/Fallout.Application.Tools.Coverage/Codecov/Codecov.json
similarity index 100%
rename from src/Fallout.Common/Tools/Codecov/Codecov.json
rename to src/Tools/Fallout.Application.Tools.Coverage/Codecov/Codecov.json
diff --git a/src/Fallout.Common/Tools/Codecov/CodecovTasks.cs b/src/Tools/Fallout.Application.Tools.Coverage/Codecov/CodecovTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Codecov/CodecovTasks.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/Codecov/CodecovTasks.cs
diff --git a/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/CoverallsNet/CoverallsNet.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/CoverallsNet/CoverallsNet.Generated.cs
diff --git a/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.json b/src/Tools/Fallout.Application.Tools.Coverage/CoverallsNet/CoverallsNet.json
similarity index 100%
rename from src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.json
rename to src/Tools/Fallout.Application.Tools.Coverage/CoverallsNet/CoverallsNet.json
diff --git a/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/Coverlet/Coverlet.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/Coverlet/Coverlet.Generated.cs
diff --git a/src/Fallout.Common/Tools/Coverlet/Coverlet.json b/src/Tools/Fallout.Application.Tools.Coverage/Coverlet/Coverlet.json
similarity index 100%
rename from src/Fallout.Common/Tools/Coverlet/Coverlet.json
rename to src/Tools/Fallout.Application.Tools.Coverage/Coverlet/Coverlet.json
diff --git a/src/Fallout.Common/Tools/Coverlet/CoverletSettingsExtensions.cs b/src/Tools/Fallout.Application.Tools.Coverage/Coverlet/CoverletSettingsExtensions.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Coverlet/CoverletSettingsExtensions.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/Coverlet/CoverletSettingsExtensions.cs
diff --git a/src/Fallout.Common/Tools/DotCover/DotCover.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/DotCover/DotCover.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotCover/DotCover.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/DotCover/DotCover.Generated.cs
diff --git a/src/Fallout.Common/Tools/DotCover/DotCover.json b/src/Tools/Fallout.Application.Tools.Coverage/DotCover/DotCover.json
similarity index 100%
rename from src/Fallout.Common/Tools/DotCover/DotCover.json
rename to src/Tools/Fallout.Application.Tools.Coverage/DotCover/DotCover.json
diff --git a/src/Fallout.Common/Tools/DotCover/DotCoverTasks.cs b/src/Tools/Fallout.Application.Tools.Coverage/DotCover/DotCoverTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotCover/DotCoverTasks.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/DotCover/DotCoverTasks.cs
diff --git a/src/Fallout.Common/Tools/DotCover/TeamCitySetDotCoverHomePathAttribute.cs b/src/Tools/Fallout.Application.Tools.Coverage/DotCover/TeamCitySetDotCoverHomePathAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotCover/TeamCitySetDotCoverHomePathAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/DotCover/TeamCitySetDotCoverHomePathAttribute.cs
diff --git a/src/Tools/Fallout.Application.Tools.Coverage/Fallout.Application.Tools.Coverage.csproj b/src/Tools/Fallout.Application.Tools.Coverage/Fallout.Application.Tools.Coverage.csproj
new file mode 100644
index 000000000..10e76e3dc
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Coverage/Fallout.Application.Tools.Coverage.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net10.0
+ Code-coverage/quality tool wrappers for Fallout — Coverlet, OpenCover, dotCover, ReportGenerator, Codecov, Coveralls.net, CodeMetrics, SonarScanner. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/OpenCover/OpenCover.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/OpenCover/OpenCover.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/OpenCover/OpenCover.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/OpenCover/OpenCover.Generated.cs
diff --git a/src/Fallout.Common/Tools/OpenCover/OpenCover.json b/src/Tools/Fallout.Application.Tools.Coverage/OpenCover/OpenCover.json
similarity index 100%
rename from src/Fallout.Common/Tools/OpenCover/OpenCover.json
rename to src/Tools/Fallout.Application.Tools.Coverage/OpenCover/OpenCover.json
diff --git a/src/Fallout.Common/Tools/OpenCover/OpenCoverTasks.cs b/src/Tools/Fallout.Application.Tools.Coverage/OpenCover/OpenCoverTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/OpenCover/OpenCoverTasks.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/OpenCover/OpenCoverTasks.cs
diff --git a/src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/ReportGenerator/ReportGenerator.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/ReportGenerator/ReportGenerator.Generated.cs
diff --git a/src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.json b/src/Tools/Fallout.Application.Tools.Coverage/ReportGenerator/ReportGenerator.json
similarity index 100%
rename from src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.json
rename to src/Tools/Fallout.Application.Tools.Coverage/ReportGenerator/ReportGenerator.json
diff --git a/src/Fallout.Common/Tools/ReportGenerator/ReportGeneratorTasks.cs b/src/Tools/Fallout.Application.Tools.Coverage/ReportGenerator/ReportGeneratorTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/ReportGenerator/ReportGeneratorTasks.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/ReportGenerator/ReportGeneratorTasks.cs
diff --git a/src/Fallout.Common/Tools/SonarScanner/SonarScanner.Generated.cs b/src/Tools/Fallout.Application.Tools.Coverage/SonarScanner/SonarScanner.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/SonarScanner/SonarScanner.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Coverage/SonarScanner/SonarScanner.Generated.cs
diff --git a/src/Fallout.Common/Tools/SonarScanner/SonarScanner.json b/src/Tools/Fallout.Application.Tools.Coverage/SonarScanner/SonarScanner.json
similarity index 100%
rename from src/Fallout.Common/Tools/SonarScanner/SonarScanner.json
rename to src/Tools/Fallout.Application.Tools.Coverage/SonarScanner/SonarScanner.json
diff --git a/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs b/src/Tools/Fallout.Application.Tools.Documentation/DocFX/DocFX.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Documentation/DocFX/DocFX.Generated.cs
diff --git a/src/Fallout.Common/Tools/DocFX/DocFX.json b/src/Tools/Fallout.Application.Tools.Documentation/DocFX/DocFX.json
similarity index 100%
rename from src/Fallout.Common/Tools/DocFX/DocFX.json
rename to src/Tools/Fallout.Application.Tools.Documentation/DocFX/DocFX.json
diff --git a/src/Fallout.Common/Tools/DocFX/DocFXTasks.cs b/src/Tools/Fallout.Application.Tools.Documentation/DocFX/DocFXTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DocFX/DocFXTasks.cs
rename to src/Tools/Fallout.Application.Tools.Documentation/DocFX/DocFXTasks.cs
diff --git a/src/Tools/Fallout.Application.Tools.Documentation/Fallout.Application.Tools.Documentation.csproj b/src/Tools/Fallout.Application.Tools.Documentation/Fallout.Application.Tools.Documentation.csproj
new file mode 100644
index 000000000..d34a701ce
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Documentation/Fallout.Application.Tools.Documentation.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Documentation tool wrappers — DocFX. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/CorFlags/CorFlags.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/CorFlags/CorFlags.Generated.cs
diff --git a/src/Fallout.Common/Tools/CorFlags/CorFlags.json b/src/Tools/Fallout.Application.Tools.DotNet/CorFlags/CorFlags.json
similarity index 100%
rename from src/Fallout.Common/Tools/CorFlags/CorFlags.json
rename to src/Tools/Fallout.Application.Tools.DotNet/CorFlags/CorFlags.json
diff --git a/src/Fallout.Common/Tools/CorFlags/CorFlagsSettings.cs b/src/Tools/Fallout.Application.Tools.DotNet/CorFlags/CorFlagsSettings.cs
similarity index 100%
rename from src/Fallout.Common/Tools/CorFlags/CorFlagsSettings.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/CorFlags/CorFlagsSettings.cs
diff --git a/src/Fallout.Common/Tools/DotNet/DotNet.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNet.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotNet/DotNet.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNet.Generated.cs
diff --git a/src/Fallout.Common/Tools/DotNet/DotNet.json b/src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNet.json
similarity index 100%
rename from src/Fallout.Common/Tools/DotNet/DotNet.json
rename to src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNet.json
diff --git a/src/Fallout.Common/Tools/DotNet/DotNetRuntimeIdentifier.cs b/src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNetRuntimeIdentifier.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotNet/DotNetRuntimeIdentifier.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNetRuntimeIdentifier.cs
diff --git a/src/Fallout.Common/Tools/DotNet/DotNetTasks.cs b/src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNetTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotNet/DotNetTasks.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/DotNet/DotNetTasks.cs
diff --git a/src/Fallout.Common/CI/TeamCity/DotNetBuildSettingsExtensions.cs b/src/Tools/Fallout.Application.Tools.DotNet/DotNetBuildSettingsExtensions.cs
similarity index 100%
rename from src/Fallout.Common/CI/TeamCity/DotNetBuildSettingsExtensions.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/DotNetBuildSettingsExtensions.cs
diff --git a/src/Fallout.Common/CI/TeamCity/DotNetTestSettingsExtensions.cs b/src/Tools/Fallout.Application.Tools.DotNet/DotNetTestSettingsExtensions.cs
similarity index 100%
rename from src/Fallout.Common/CI/TeamCity/DotNetTestSettingsExtensions.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/DotNetTestSettingsExtensions.cs
diff --git a/src/Fallout.Common/Tools/EntityFramework/EntityFramework.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/EntityFramework/EntityFramework.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/EntityFramework/EntityFramework.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/EntityFramework/EntityFramework.Generated.cs
diff --git a/src/Fallout.Common/Tools/EntityFramework/EntityFramework.json b/src/Tools/Fallout.Application.Tools.DotNet/EntityFramework/EntityFramework.json
similarity index 100%
rename from src/Fallout.Common/Tools/EntityFramework/EntityFramework.json
rename to src/Tools/Fallout.Application.Tools.DotNet/EntityFramework/EntityFramework.json
diff --git a/src/Tools/Fallout.Application.Tools.DotNet/Fallout.Application.Tools.DotNet.csproj b/src/Tools/Fallout.Application.Tools.DotNet/Fallout.Application.Tools.DotNet.csproj
new file mode 100644
index 000000000..ea6e33f47
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.DotNet/Fallout.Application.Tools.DotNet.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ .NET SDK tool wrappers for Fallout — dotnet, MSBuild, NuGet, Paket, EntityFramework, NSwag, ILRepack, CorFlags, VSWhere, MauiCheck, WebConfigTransformRunner. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/ILRepack/ILRepack.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/ILRepack/ILRepack.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/ILRepack/ILRepack.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/ILRepack/ILRepack.Generated.cs
diff --git a/src/Fallout.Common/Tools/ILRepack/ILRepack.json b/src/Tools/Fallout.Application.Tools.DotNet/ILRepack/ILRepack.json
similarity index 100%
rename from src/Fallout.Common/Tools/ILRepack/ILRepack.json
rename to src/Tools/Fallout.Application.Tools.DotNet/ILRepack/ILRepack.json
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuild.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuild.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuild.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuild.Generated.cs
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuild.json b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuild.json
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuild.json
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuild.json
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuildPlatform.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildPlatform.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuildPlatform.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildPlatform.cs
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuildProject.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildProject.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuildProject.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildProject.cs
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuildSettingsExtensions.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildSettingsExtensions.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuildSettingsExtensions.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildSettingsExtensions.cs
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuildTasks.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuildTasks.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildTasks.cs
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuildToolPathResolver.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildToolPathResolver.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuildToolPathResolver.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildToolPathResolver.cs
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuildVersion.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildVersion.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSBuild/MSBuildVersion.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuild/MSBuildVersion.cs
diff --git a/src/Fallout.Common/CI/TeamCity/MSBuildSettingsExtensions.cs b/src/Tools/Fallout.Application.Tools.DotNet/MSBuildSettingsExtensions.cs
similarity index 100%
rename from src/Fallout.Common/CI/TeamCity/MSBuildSettingsExtensions.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MSBuildSettingsExtensions.cs
diff --git a/src/Fallout.Common/Tools/MauiCheck/MauiCheck.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/MauiCheck/MauiCheck.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MauiCheck/MauiCheck.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/MauiCheck/MauiCheck.Generated.cs
diff --git a/src/Fallout.Common/Tools/MauiCheck/MauiCheck.json b/src/Tools/Fallout.Application.Tools.DotNet/MauiCheck/MauiCheck.json
similarity index 100%
rename from src/Fallout.Common/Tools/MauiCheck/MauiCheck.json
rename to src/Tools/Fallout.Application.Tools.DotNet/MauiCheck/MauiCheck.json
diff --git a/src/Fallout.Common/Tools/NSwag/NSwag.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/NSwag/NSwag.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NSwag/NSwag.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/NSwag/NSwag.Generated.cs
diff --git a/src/Fallout.Common/Tools/NSwag/NSwag.json b/src/Tools/Fallout.Application.Tools.DotNet/NSwag/NSwag.json
similarity index 100%
rename from src/Fallout.Common/Tools/NSwag/NSwag.json
rename to src/Tools/Fallout.Application.Tools.DotNet/NSwag/NSwag.json
diff --git a/src/Fallout.Common/Tools/NuGet/NuGet.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/NuGet/NuGet.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NuGet/NuGet.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/NuGet/NuGet.Generated.cs
diff --git a/src/Fallout.Common/Tools/NuGet/NuGet.json b/src/Tools/Fallout.Application.Tools.DotNet/NuGet/NuGet.json
similarity index 100%
rename from src/Fallout.Common/Tools/NuGet/NuGet.json
rename to src/Tools/Fallout.Application.Tools.DotNet/NuGet/NuGet.json
diff --git a/src/Fallout.Common/Tools/Paket/Paket.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/Paket/Paket.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Paket/Paket.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/Paket/Paket.Generated.cs
diff --git a/src/Fallout.Common/Tools/Paket/Paket.json b/src/Tools/Fallout.Application.Tools.DotNet/Paket/Paket.json
similarity index 100%
rename from src/Fallout.Common/Tools/Paket/Paket.json
rename to src/Tools/Fallout.Application.Tools.DotNet/Paket/Paket.json
diff --git a/src/Fallout.Common/Tools/VSWhere/VSWhere.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/VSWhere/VSWhere.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/VSWhere/VSWhere.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/VSWhere/VSWhere.Generated.cs
diff --git a/src/Fallout.Common/Tools/VSWhere/VSWhere.json b/src/Tools/Fallout.Application.Tools.DotNet/VSWhere/VSWhere.json
similarity index 100%
rename from src/Fallout.Common/Tools/VSWhere/VSWhere.json
rename to src/Tools/Fallout.Application.Tools.DotNet/VSWhere/VSWhere.json
diff --git a/src/Fallout.Common/Tools/VSWhere/VSWhereTasks.cs b/src/Tools/Fallout.Application.Tools.DotNet/VSWhere/VSWhereTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/VSWhere/VSWhereTasks.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/VSWhere/VSWhereTasks.cs
diff --git a/src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs b/src/Tools/Fallout.Application.Tools.DotNet/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs
rename to src/Tools/Fallout.Application.Tools.DotNet/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs
diff --git a/src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.json b/src/Tools/Fallout.Application.Tools.DotNet/WebConfigTransformRunner/WebConfigTransformRunner.json
similarity index 100%
rename from src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.json
rename to src/Tools/Fallout.Application.Tools.DotNet/WebConfigTransformRunner/WebConfigTransformRunner.json
diff --git a/src/Tools/Fallout.Application.Tools.Gaming/Fallout.Application.Tools.Gaming.csproj b/src/Tools/Fallout.Application.Tools.Gaming/Fallout.Application.Tools.Gaming.csproj
new file mode 100644
index 000000000..ab091d9ba
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Gaming/Fallout.Application.Tools.Gaming.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Game-engine tool wrappers — Unity. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/Unity/Logging/BlockMatcher.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/BlockMatcher.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Logging/BlockMatcher.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/BlockMatcher.cs
diff --git a/src/Fallout.Common/Tools/Unity/Logging/FileWatcher.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/FileWatcher.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Logging/FileWatcher.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/FileWatcher.cs
diff --git a/src/Fallout.Common/Tools/Unity/Logging/LineMatcher.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/LineMatcher.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Logging/LineMatcher.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/LineMatcher.cs
diff --git a/src/Fallout.Common/Tools/Unity/Logging/LogParser.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/LogParser.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Logging/LogParser.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/LogParser.cs
diff --git a/src/Fallout.Common/Tools/Unity/Logging/MatchType.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/MatchType.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Logging/MatchType.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/MatchType.cs
diff --git a/src/Fallout.Common/Tools/Unity/Logging/MatchedBlock.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/MatchedBlock.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Logging/MatchedBlock.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/MatchedBlock.cs
diff --git a/src/Fallout.Common/Tools/Unity/Logging/UnityLogLevel.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/UnityLogLevel.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Logging/UnityLogLevel.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Logging/UnityLogLevel.cs
diff --git a/src/Fallout.Common/Tools/Unity/Unity.Generated.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Unity.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Unity.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Unity.Generated.cs
diff --git a/src/Fallout.Common/Tools/Unity/Unity.json b/src/Tools/Fallout.Application.Tools.Gaming/Unity/Unity.json
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/Unity.json
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/Unity.json
diff --git a/src/Fallout.Common/Tools/Unity/UnityTasks.cs b/src/Tools/Fallout.Application.Tools.Gaming/Unity/UnityTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Unity/UnityTasks.cs
rename to src/Tools/Fallout.Application.Tools.Gaming/Unity/UnityTasks.cs
diff --git a/src/Tools/Fallout.Application.Tools.JavaScript/Fallout.Application.Tools.JavaScript.csproj b/src/Tools/Fallout.Application.Tools.JavaScript/Fallout.Application.Tools.JavaScript.csproj
new file mode 100644
index 000000000..ca57436db
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.JavaScript/Fallout.Application.Tools.JavaScript.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ JavaScript/Node tool wrappers — Npm. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/Npm/Npm.Generated.cs b/src/Tools/Fallout.Application.Tools.JavaScript/Npm/Npm.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Npm/Npm.Generated.cs
rename to src/Tools/Fallout.Application.Tools.JavaScript/Npm/Npm.Generated.cs
diff --git a/src/Fallout.Common/Tools/Npm/Npm.json b/src/Tools/Fallout.Application.Tools.JavaScript/Npm/Npm.json
similarity index 100%
rename from src/Fallout.Common/Tools/Npm/Npm.json
rename to src/Tools/Fallout.Application.Tools.JavaScript/Npm/Npm.json
diff --git a/src/Fallout.Common/Tools/Npm/NpmTasks.cs b/src/Tools/Fallout.Application.Tools.JavaScript/Npm/NpmTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Npm/NpmTasks.cs
rename to src/Tools/Fallout.Application.Tools.JavaScript/Npm/NpmTasks.cs
diff --git a/src/Fallout.Common/Tools/Discord/Discord.Generated.cs b/src/Tools/Fallout.Application.Tools.Notifications/Discord/Discord.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Discord/Discord.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Discord/Discord.Generated.cs
diff --git a/src/Fallout.Common/Tools/Discord/Discord.json b/src/Tools/Fallout.Application.Tools.Notifications/Discord/Discord.json
similarity index 100%
rename from src/Fallout.Common/Tools/Discord/Discord.json
rename to src/Tools/Fallout.Application.Tools.Notifications/Discord/Discord.json
diff --git a/src/Fallout.Common/Tools/Discord/DiscordTasks.cs b/src/Tools/Fallout.Application.Tools.Notifications/Discord/DiscordTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Discord/DiscordTasks.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Discord/DiscordTasks.cs
diff --git a/src/Tools/Fallout.Application.Tools.Notifications/Fallout.Application.Tools.Notifications.csproj b/src/Tools/Fallout.Application.Tools.Notifications/Fallout.Application.Tools.Notifications.csproj
new file mode 100644
index 000000000..7cc7c49d4
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Notifications/Fallout.Application.Tools.Notifications.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Notification tool wrappers for Fallout — Slack, Discord, Teams, Twitter, Mastodon. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/Mastodon/Mastodon.Generated.cs b/src/Tools/Fallout.Application.Tools.Notifications/Mastodon/Mastodon.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Mastodon/Mastodon.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Mastodon/Mastodon.Generated.cs
diff --git a/src/Fallout.Common/Tools/Mastodon/Mastodon.json b/src/Tools/Fallout.Application.Tools.Notifications/Mastodon/Mastodon.json
similarity index 100%
rename from src/Fallout.Common/Tools/Mastodon/Mastodon.json
rename to src/Tools/Fallout.Application.Tools.Notifications/Mastodon/Mastodon.json
diff --git a/src/Fallout.Common/Tools/Mastodon/MastodonTasks.cs b/src/Tools/Fallout.Application.Tools.Notifications/Mastodon/MastodonTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Mastodon/MastodonTasks.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Mastodon/MastodonTasks.cs
diff --git a/src/Fallout.Common/Tools/Slack/Slack.Generated.cs b/src/Tools/Fallout.Application.Tools.Notifications/Slack/Slack.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Slack/Slack.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Slack/Slack.Generated.cs
diff --git a/src/Fallout.Common/Tools/Slack/Slack.json b/src/Tools/Fallout.Application.Tools.Notifications/Slack/Slack.json
similarity index 100%
rename from src/Fallout.Common/Tools/Slack/Slack.json
rename to src/Tools/Fallout.Application.Tools.Notifications/Slack/Slack.json
diff --git a/src/Fallout.Common/Tools/Slack/SlackTasks.cs b/src/Tools/Fallout.Application.Tools.Notifications/Slack/SlackTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Slack/SlackTasks.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Slack/SlackTasks.cs
diff --git a/src/Fallout.Common/Tools/Teams/Teams.Extensions.cs b/src/Tools/Fallout.Application.Tools.Notifications/Teams/Teams.Extensions.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Teams/Teams.Extensions.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Teams/Teams.Extensions.cs
diff --git a/src/Fallout.Common/Tools/Teams/Teams.Generated.cs b/src/Tools/Fallout.Application.Tools.Notifications/Teams/Teams.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Teams/Teams.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Teams/Teams.Generated.cs
diff --git a/src/Fallout.Common/Tools/Teams/Teams.json b/src/Tools/Fallout.Application.Tools.Notifications/Teams/Teams.json
similarity index 100%
rename from src/Fallout.Common/Tools/Teams/Teams.json
rename to src/Tools/Fallout.Application.Tools.Notifications/Teams/Teams.json
diff --git a/src/Fallout.Common/Tools/Teams/TeamsTasks.cs b/src/Tools/Fallout.Application.Tools.Notifications/Teams/TeamsTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Teams/TeamsTasks.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Teams/TeamsTasks.cs
diff --git a/src/Fallout.Common/Tools/Twitter/TwitterTasks.cs b/src/Tools/Fallout.Application.Tools.Notifications/Twitter/TwitterTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Twitter/TwitterTasks.cs
rename to src/Tools/Fallout.Application.Tools.Notifications/Twitter/TwitterTasks.cs
diff --git a/src/Fallout.Common/Tools/Boots/Boots.Generated.cs b/src/Tools/Fallout.Application.Tools.Packaging/Boots/Boots.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Boots/Boots.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Packaging/Boots/Boots.Generated.cs
diff --git a/src/Fallout.Common/Tools/Boots/Boots.json b/src/Tools/Fallout.Application.Tools.Packaging/Boots/Boots.json
similarity index 100%
rename from src/Fallout.Common/Tools/Boots/Boots.json
rename to src/Tools/Fallout.Application.Tools.Packaging/Boots/Boots.json
diff --git a/src/Fallout.Common/Tools/Chocolatey/Chocolatey.Generated.cs b/src/Tools/Fallout.Application.Tools.Packaging/Chocolatey/Chocolatey.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Chocolatey/Chocolatey.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Packaging/Chocolatey/Chocolatey.Generated.cs
diff --git a/src/Fallout.Common/Tools/Chocolatey/Chocolatey.json b/src/Tools/Fallout.Application.Tools.Packaging/Chocolatey/Chocolatey.json
similarity index 100%
rename from src/Fallout.Common/Tools/Chocolatey/Chocolatey.json
rename to src/Tools/Fallout.Application.Tools.Packaging/Chocolatey/Chocolatey.json
diff --git a/src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.Generated.cs b/src/Tools/Fallout.Application.Tools.Packaging/DotnetPackaging/DotnetPackaging.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Packaging/DotnetPackaging/DotnetPackaging.Generated.cs
diff --git a/src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.json b/src/Tools/Fallout.Application.Tools.Packaging/DotnetPackaging/DotnetPackaging.json
similarity index 100%
rename from src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.json
rename to src/Tools/Fallout.Application.Tools.Packaging/DotnetPackaging/DotnetPackaging.json
diff --git a/src/Tools/Fallout.Application.Tools.Packaging/Fallout.Application.Tools.Packaging.csproj b/src/Tools/Fallout.Application.Tools.Packaging/Fallout.Application.Tools.Packaging.csproj
new file mode 100644
index 000000000..4565bc96e
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Packaging/Fallout.Application.Tools.Packaging.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Packaging/installer tool wrappers — Chocolatey, Squirrel, Inno Setup, NSIS, Boots, dotnet-packaging. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/InnoSetup/InnoSetup.Generated.cs b/src/Tools/Fallout.Application.Tools.Packaging/InnoSetup/InnoSetup.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/InnoSetup/InnoSetup.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Packaging/InnoSetup/InnoSetup.Generated.cs
diff --git a/src/Fallout.Common/Tools/InnoSetup/InnoSetup.json b/src/Tools/Fallout.Application.Tools.Packaging/InnoSetup/InnoSetup.json
similarity index 100%
rename from src/Fallout.Common/Tools/InnoSetup/InnoSetup.json
rename to src/Tools/Fallout.Application.Tools.Packaging/InnoSetup/InnoSetup.json
diff --git a/src/Fallout.Common/Tools/InnoSetup/InnoSetupSettings.cs b/src/Tools/Fallout.Application.Tools.Packaging/InnoSetup/InnoSetupSettings.cs
similarity index 100%
rename from src/Fallout.Common/Tools/InnoSetup/InnoSetupSettings.cs
rename to src/Tools/Fallout.Application.Tools.Packaging/InnoSetup/InnoSetupSettings.cs
diff --git a/src/Fallout.Common/Tools/MakeNsis/MakeNSIS.Generated.cs b/src/Tools/Fallout.Application.Tools.Packaging/MakeNsis/MakeNSIS.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MakeNsis/MakeNSIS.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Packaging/MakeNsis/MakeNSIS.Generated.cs
diff --git a/src/Fallout.Common/Tools/MakeNsis/MakeNSIS.json b/src/Tools/Fallout.Application.Tools.Packaging/MakeNsis/MakeNSIS.json
similarity index 100%
rename from src/Fallout.Common/Tools/MakeNsis/MakeNSIS.json
rename to src/Tools/Fallout.Application.Tools.Packaging/MakeNsis/MakeNSIS.json
diff --git a/src/Fallout.Common/Tools/Squirrel/Squirrel.Generated.cs b/src/Tools/Fallout.Application.Tools.Packaging/Squirrel/Squirrel.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Squirrel/Squirrel.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Packaging/Squirrel/Squirrel.Generated.cs
diff --git a/src/Fallout.Common/Tools/Squirrel/Squirrel.json b/src/Tools/Fallout.Application.Tools.Packaging/Squirrel/Squirrel.json
similarity index 100%
rename from src/Fallout.Common/Tools/Squirrel/Squirrel.json
rename to src/Tools/Fallout.Application.Tools.Packaging/Squirrel/Squirrel.json
diff --git a/src/Tools/Fallout.Application.Tools.Shell/Fallout.Application.Tools.Shell.csproj b/src/Tools/Fallout.Application.Tools.Shell/Fallout.Application.Tools.Shell.csproj
new file mode 100644
index 000000000..39dae52b1
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Shell/Fallout.Application.Tools.Shell.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Shell tool wrappers — PowerShell, pwsh. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/PowerShell/PowerShell.Generated.cs b/src/Tools/Fallout.Application.Tools.Shell/PowerShell/PowerShell.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/PowerShell/PowerShell.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Shell/PowerShell/PowerShell.Generated.cs
diff --git a/src/Fallout.Common/Tools/PowerShell/PowerShell.json b/src/Tools/Fallout.Application.Tools.Shell/PowerShell/PowerShell.json
similarity index 100%
rename from src/Fallout.Common/Tools/PowerShell/PowerShell.json
rename to src/Tools/Fallout.Application.Tools.Shell/PowerShell/PowerShell.json
diff --git a/src/Fallout.Common/Tools/PowerShell/PowerShellTasks.cs b/src/Tools/Fallout.Application.Tools.Shell/PowerShell/PowerShellTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/PowerShell/PowerShellTasks.cs
rename to src/Tools/Fallout.Application.Tools.Shell/PowerShell/PowerShellTasks.cs
diff --git a/src/Fallout.Common/Tools/Pwsh/Pwsh.Generated.cs b/src/Tools/Fallout.Application.Tools.Shell/Pwsh/Pwsh.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Pwsh/Pwsh.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Shell/Pwsh/Pwsh.Generated.cs
diff --git a/src/Fallout.Common/Tools/Pwsh/Pwsh.json b/src/Tools/Fallout.Application.Tools.Shell/Pwsh/Pwsh.json
similarity index 100%
rename from src/Fallout.Common/Tools/Pwsh/Pwsh.json
rename to src/Tools/Fallout.Application.Tools.Shell/Pwsh/Pwsh.json
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVault.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVault.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVault.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVault.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttribute.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultAttribute.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttributeBase.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultAttributeBase.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttributeBase.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultAttributeBase.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultCertificate.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultCertificate.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultCertificate.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultCertificate.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultCertificateAttribute.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultCertificateAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultCertificateAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultCertificateAttribute.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultKey.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultKey.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultKey.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultKey.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultKeyAttribute.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultKeyAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultKeyAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultKeyAttribute.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultSecretAttribute.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultSecretAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultSecretAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultSecretAttribute.cs
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultTasks.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultTasks.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureKeyVault/AzureKeyVaultTasks.cs
diff --git a/src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.Generated.cs b/src/Tools/Fallout.Application.Tools.Signing/AzureSignTool/AzureSignTool.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Signing/AzureSignTool/AzureSignTool.Generated.cs
diff --git a/src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.json b/src/Tools/Fallout.Application.Tools.Signing/AzureSignTool/AzureSignTool.json
similarity index 100%
rename from src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.json
rename to src/Tools/Fallout.Application.Tools.Signing/AzureSignTool/AzureSignTool.json
diff --git a/src/Tools/Fallout.Application.Tools.Signing/Fallout.Application.Tools.Signing.csproj b/src/Tools/Fallout.Application.Tools.Signing/Fallout.Application.Tools.Signing.csproj
new file mode 100644
index 000000000..904f36a17
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Signing/Fallout.Application.Tools.Signing.csproj
@@ -0,0 +1,19 @@
+
+
+
+ net10.0
+ Code-signing tool wrappers — Azure Key Vault, AzureSignTool, SignClient, SignPath, SignTool, NuGetKeyVaultSignTool. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs b/src/Tools/Fallout.Application.Tools.Signing/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Signing/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs
diff --git a/src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.json b/src/Tools/Fallout.Application.Tools.Signing/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.json
similarity index 100%
rename from src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.json
rename to src/Tools/Fallout.Application.Tools.Signing/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.json
diff --git a/src/Fallout.Common/Tools/SignClient/SignClient.Generated.cs b/src/Tools/Fallout.Application.Tools.Signing/SignClient/SignClient.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/SignClient/SignClient.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Signing/SignClient/SignClient.Generated.cs
diff --git a/src/Fallout.Common/Tools/SignClient/SignClient.json b/src/Tools/Fallout.Application.Tools.Signing/SignClient/SignClient.json
similarity index 100%
rename from src/Fallout.Common/Tools/SignClient/SignClient.json
rename to src/Tools/Fallout.Application.Tools.Signing/SignClient/SignClient.json
diff --git a/src/Fallout.Common/Tools/SignPath/SignPathTasks.cs b/src/Tools/Fallout.Application.Tools.Signing/SignPath/SignPathTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/SignPath/SignPathTasks.cs
rename to src/Tools/Fallout.Application.Tools.Signing/SignPath/SignPathTasks.cs
diff --git a/src/Fallout.Common/Tools/SignTool/SignTool.Generated.cs b/src/Tools/Fallout.Application.Tools.Signing/SignTool/SignTool.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/SignTool/SignTool.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Signing/SignTool/SignTool.Generated.cs
diff --git a/src/Fallout.Common/Tools/SignTool/SignTool.json b/src/Tools/Fallout.Application.Tools.Signing/SignTool/SignTool.json
similarity index 100%
rename from src/Fallout.Common/Tools/SignTool/SignTool.json
rename to src/Tools/Fallout.Application.Tools.Signing/SignTool/SignTool.json
diff --git a/src/Fallout.Common/Tools/SignTool/SignToolTasks.cs b/src/Tools/Fallout.Application.Tools.Signing/SignTool/SignToolTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/SignTool/SignToolTasks.cs
rename to src/Tools/Fallout.Application.Tools.Signing/SignTool/SignToolTasks.cs
diff --git a/src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/BenchmarkDotNet/BenchmarkDotNet.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/BenchmarkDotNet/BenchmarkDotNet.Generated.cs
diff --git a/src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.json b/src/Tools/Fallout.Application.Tools.Testing/BenchmarkDotNet/BenchmarkDotNet.json
similarity index 100%
rename from src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.json
rename to src/Tools/Fallout.Application.Tools.Testing/BenchmarkDotNet/BenchmarkDotNet.json
diff --git a/src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/DotMemoryUnit/DotMemoryUnit.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/DotMemoryUnit/DotMemoryUnit.Generated.cs
diff --git a/src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.json b/src/Tools/Fallout.Application.Tools.Testing/DotMemoryUnit/DotMemoryUnit.json
similarity index 100%
rename from src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.json
rename to src/Tools/Fallout.Application.Tools.Testing/DotMemoryUnit/DotMemoryUnit.json
diff --git a/src/Tools/Fallout.Application.Tools.Testing/Fallout.Application.Tools.Testing.csproj b/src/Tools/Fallout.Application.Tools.Testing/Fallout.Application.Tools.Testing.csproj
new file mode 100644
index 000000000..c4c2cb9d2
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Testing/Fallout.Application.Tools.Testing.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Test-runner tool wrappers — xUnit, NUnit, MSpec, Fixie, VSTest, SpecFlow, TestCloud, BenchmarkDotNet, dotMemory Unit. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/Fixie/Fixie.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/Fixie/Fixie.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Fixie/Fixie.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/Fixie/Fixie.Generated.cs
diff --git a/src/Fallout.Common/Tools/Fixie/Fixie.json b/src/Tools/Fallout.Application.Tools.Testing/Fixie/Fixie.json
similarity index 100%
rename from src/Fallout.Common/Tools/Fixie/Fixie.json
rename to src/Tools/Fallout.Application.Tools.Testing/Fixie/Fixie.json
diff --git a/src/Fallout.Common/Tools/MSpec/MSpec.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/MSpec/MSpec.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSpec/MSpec.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/MSpec/MSpec.Generated.cs
diff --git a/src/Fallout.Common/Tools/MSpec/MSpec.json b/src/Tools/Fallout.Application.Tools.Testing/MSpec/MSpec.json
similarity index 100%
rename from src/Fallout.Common/Tools/MSpec/MSpec.json
rename to src/Tools/Fallout.Application.Tools.Testing/MSpec/MSpec.json
diff --git a/src/Fallout.Common/Tools/MSpec/MSpecTasks.cs b/src/Tools/Fallout.Application.Tools.Testing/MSpec/MSpecTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MSpec/MSpecTasks.cs
rename to src/Tools/Fallout.Application.Tools.Testing/MSpec/MSpecTasks.cs
diff --git a/src/Fallout.Common/Tools/NUnit/NUnit.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/NUnit/NUnit.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NUnit/NUnit.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/NUnit/NUnit.Generated.cs
diff --git a/src/Fallout.Common/Tools/NUnit/NUnit.json b/src/Tools/Fallout.Application.Tools.Testing/NUnit/NUnit.json
similarity index 100%
rename from src/Fallout.Common/Tools/NUnit/NUnit.json
rename to src/Tools/Fallout.Application.Tools.Testing/NUnit/NUnit.json
diff --git a/src/Fallout.Common/Tools/NUnit/NUnitTasks.cs b/src/Tools/Fallout.Application.Tools.Testing/NUnit/NUnitTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NUnit/NUnitTasks.cs
rename to src/Tools/Fallout.Application.Tools.Testing/NUnit/NUnitTasks.cs
diff --git a/src/Fallout.Common/Tools/SpecFlow/SpecFlow.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/SpecFlow/SpecFlow.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/SpecFlow/SpecFlow.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/SpecFlow/SpecFlow.Generated.cs
diff --git a/src/Fallout.Common/Tools/SpecFlow/SpecFlow.json b/src/Tools/Fallout.Application.Tools.Testing/SpecFlow/SpecFlow.json
similarity index 100%
rename from src/Fallout.Common/Tools/SpecFlow/SpecFlow.json
rename to src/Tools/Fallout.Application.Tools.Testing/SpecFlow/SpecFlow.json
diff --git a/src/Fallout.Common/Tools/TestCloud/TestCloud.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/TestCloud/TestCloud.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/TestCloud/TestCloud.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/TestCloud/TestCloud.Generated.cs
diff --git a/src/Fallout.Common/Tools/TestCloud/TestCloud.json b/src/Tools/Fallout.Application.Tools.Testing/TestCloud/TestCloud.json
similarity index 100%
rename from src/Fallout.Common/Tools/TestCloud/TestCloud.json
rename to src/Tools/Fallout.Application.Tools.Testing/TestCloud/TestCloud.json
diff --git a/src/Fallout.Common/Tools/VSTest/VSTest.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/VSTest/VSTest.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/VSTest/VSTest.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/VSTest/VSTest.Generated.cs
diff --git a/src/Fallout.Common/Tools/VSTest/VSTest.json b/src/Tools/Fallout.Application.Tools.Testing/VSTest/VSTest.json
similarity index 100%
rename from src/Fallout.Common/Tools/VSTest/VSTest.json
rename to src/Tools/Fallout.Application.Tools.Testing/VSTest/VSTest.json
diff --git a/src/Fallout.Common/Tools/Xunit/Xunit.Generated.cs b/src/Tools/Fallout.Application.Tools.Testing/Xunit/Xunit.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Xunit/Xunit.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Testing/Xunit/Xunit.Generated.cs
diff --git a/src/Fallout.Common/Tools/Xunit/Xunit.json b/src/Tools/Fallout.Application.Tools.Testing/Xunit/Xunit.json
similarity index 100%
rename from src/Fallout.Common/Tools/Xunit/Xunit.json
rename to src/Tools/Fallout.Application.Tools.Testing/Xunit/Xunit.json
diff --git a/src/Fallout.Common/Tools/Xunit/Xunit2SettingsExtensions.cs b/src/Tools/Fallout.Application.Tools.Testing/Xunit/Xunit2SettingsExtensions.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Xunit/Xunit2SettingsExtensions.cs
rename to src/Tools/Fallout.Application.Tools.Testing/Xunit/Xunit2SettingsExtensions.cs
diff --git a/src/Fallout.Common/Tools/Xunit/XunitTasks.cs b/src/Tools/Fallout.Application.Tools.Testing/Xunit/XunitTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Xunit/XunitTasks.cs
rename to src/Tools/Fallout.Application.Tools.Testing/Xunit/XunitTasks.cs
diff --git a/src/Tools/Fallout.Application.Tools.VersionControl/Fallout.Application.Tools.VersionControl.csproj b/src/Tools/Fallout.Application.Tools.VersionControl/Fallout.Application.Tools.VersionControl.csproj
new file mode 100644
index 000000000..70187ff81
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.VersionControl/Fallout.Application.Tools.VersionControl.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net10.0
+ Version-control tool wrappers for Fallout — Git, GitHub (gh/Octokit client), GitLink, GitReleaseManager. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/Git/Git.Generated.cs b/src/Tools/Fallout.Application.Tools.VersionControl/Git/Git.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Git/Git.Generated.cs
rename to src/Tools/Fallout.Application.Tools.VersionControl/Git/Git.Generated.cs
diff --git a/src/Fallout.Common/Tools/Git/Git.json b/src/Tools/Fallout.Application.Tools.VersionControl/Git/Git.json
similarity index 100%
rename from src/Fallout.Common/Tools/Git/Git.json
rename to src/Tools/Fallout.Application.Tools.VersionControl/Git/Git.json
diff --git a/src/Fallout.Common/Tools/Git/GitTasks.cs b/src/Tools/Fallout.Application.Tools.VersionControl/Git/GitTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/Git/GitTasks.cs
rename to src/Tools/Fallout.Application.Tools.VersionControl/Git/GitTasks.cs
diff --git a/src/Fallout.Common/Tools/GitHub/GitHubTasks.cs b/src/Tools/Fallout.Application.Tools.VersionControl/GitHub/GitHubTasks.cs
similarity index 52%
rename from src/Fallout.Common/Tools/GitHub/GitHubTasks.cs
rename to src/Tools/Fallout.Application.Tools.VersionControl/GitHub/GitHubTasks.cs
index 1d1abc282..1ed542172 100644
--- a/src/Fallout.Common/Tools/GitHub/GitHubTasks.cs
+++ b/src/Tools/Fallout.Application.Tools.VersionControl/GitHub/GitHubTasks.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Fallout.Common.Git;
@@ -10,13 +9,6 @@
namespace Fallout.Common.Tools.GitHub;
-public enum GitHubItemType
-{
- Automatic,
- File,
- Directory
-}
-
public static class GitHubTasks
{
public static GitHubClient GitHubClient = new(new ProductHeaderValue(nameof(FalloutBuild)));
@@ -125,103 +117,4 @@ await GitHubClient.Issue.Milestone.Update(
milestone.Number,
new MilestoneUpdate { State = ItemState.Closed });
}
-
- public static bool IsGitHubRepository(this GitRepository repository)
- {
- return repository?.Endpoint?.EqualsOrdinalIgnoreCase("github.com") ?? false;
- }
-
- public static string GetGitHubOwner(this GitRepository repository)
- {
- Assert.True(repository.IsGitHubRepository());
- return repository.Identifier.Split('/')[0];
- }
-
- public static string GetGitHubName(this GitRepository repository)
- {
- Assert.True(repository.IsGitHubRepository());
- return repository.Identifier.Split('/')[1];
- }
-
- public static string GetGitHubCompareCommitsUrl(this GitRepository repository, string startCommitSha, string endCommitSha)
- {
- Assert.True(repository.IsGitHubRepository());
- return $"https://github.com/{repository.Identifier}/compare/{endCommitSha}^...{startCommitSha}";
- }
-
- public static string GetGitHubCompareTagToHeadUrl(this GitRepository repository, string tag)
- {
- Assert.True(repository.IsGitHubRepository());
- return $"https://github.com/{repository.Identifier}/compare/{tag}...HEAD";
- }
-
- public static string GetGitHubCompareTagsUrl(this GitRepository repository, string startTag, string endTag)
- {
- Assert.True(repository.IsGitHubRepository());
- return $"https://github.com/{repository.Identifier}/compare/{endTag}...{startTag}";
- }
-
- public static string GetGitHubCommitUrl(this GitRepository repository, string commitSha)
- {
- Assert.True(repository.IsGitHubRepository());
- return $"https://github.com/{repository.Identifier}/commit/{commitSha}";
- }
-
- /// Url in the form of https://raw.githubusercontent.com/{identifier}/{branch}/{file}.
- public static string GetGitHubDownloadUrl(this GitRepository repository, string file, string branch = null)
- {
- Assert.True(repository.IsGitHubRepository());
-
- branch ??= repository.Branch.NotNull("repository.Branch != null");
- var relativePath = GetRepositoryRelativePath(file, repository);
- return $"https://raw.githubusercontent.com/{repository.Identifier}/{branch}/{relativePath}";
- }
-
- ///
- /// Url in the form of https://github.com/{identifier}/tree/{branch}/directory or
- /// https://github.com/{identifier}/blob/{branch}/file depending on the item type.
- ///
- public static string GetGitHubBrowseUrl(
- this GitRepository repository,
- string path = null,
- string branch = null,
- GitHubItemType itemType = GitHubItemType.Automatic)
- {
- Assert.True(repository.IsGitHubRepository());
-
- branch ??= repository.Branch.NotNull();
- var relativePath = GetRepositoryRelativePath(path, repository);
- var method = GetMethod(relativePath, itemType, repository);
- Assert.True(path == null || method != null, "Could not determine item type");
-
- return $"https://github.com/{repository.Identifier}/{method}/{branch}/{relativePath}".TrimEnd("/");
- }
-
- private static string GetMethod(string relativePath, GitHubItemType itemType, GitRepository repository)
- {
- var absolutePath = repository.LocalDirectory != null && relativePath != null
- ? NormalizePath(Path.Combine(repository.LocalDirectory, relativePath))
- : null;
-
- if (itemType == GitHubItemType.Directory || Directory.Exists(absolutePath) || relativePath == null)
- return "tree";
-
- if (itemType == GitHubItemType.File || File.Exists(absolutePath))
- return "blob";
-
- return null;
- }
-
- private static string GetRepositoryRelativePath(string path, GitRepository repository)
- {
- if (path == null)
- return null;
-
- if (!Path.IsPathRooted(path))
- return path;
-
- var localDirectory = repository.LocalDirectory.NotNull();
- Assert.True(IsDescendantPath(localDirectory, path), $"Path {path.SingleQuote()} must be descendant of {localDirectory:s}");
- return GetRelativePath(localDirectory, path).Replace(oldChar: '\\', newChar: '/');
- }
}
diff --git a/src/Fallout.Common/Tools/GitLink/GitLink.Generated.cs b/src/Tools/Fallout.Application.Tools.VersionControl/GitLink/GitLink.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/GitLink/GitLink.Generated.cs
rename to src/Tools/Fallout.Application.Tools.VersionControl/GitLink/GitLink.Generated.cs
diff --git a/src/Fallout.Common/Tools/GitLink/GitLink.json b/src/Tools/Fallout.Application.Tools.VersionControl/GitLink/GitLink.json
similarity index 100%
rename from src/Fallout.Common/Tools/GitLink/GitLink.json
rename to src/Tools/Fallout.Application.Tools.VersionControl/GitLink/GitLink.json
diff --git a/src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.Generated.cs b/src/Tools/Fallout.Application.Tools.VersionControl/GitReleaseManager/GitReleaseManager.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.Generated.cs
rename to src/Tools/Fallout.Application.Tools.VersionControl/GitReleaseManager/GitReleaseManager.Generated.cs
diff --git a/src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.json b/src/Tools/Fallout.Application.Tools.VersionControl/GitReleaseManager/GitReleaseManager.json
similarity index 100%
rename from src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.json
rename to src/Tools/Fallout.Application.Tools.VersionControl/GitReleaseManager/GitReleaseManager.json
diff --git a/src/Fallout.Common/Attributes/LatestGitHubReleaseAttribute.cs b/src/Tools/Fallout.Application.Tools.VersionControl/LatestGitHubReleaseAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Attributes/LatestGitHubReleaseAttribute.cs
rename to src/Tools/Fallout.Application.Tools.VersionControl/LatestGitHubReleaseAttribute.cs
diff --git a/src/Tools/Fallout.Application.Tools.Versioning/Fallout.Application.Tools.Versioning.csproj b/src/Tools/Fallout.Application.Tools.Versioning/Fallout.Application.Tools.Versioning.csproj
new file mode 100644
index 000000000..ae871ca32
--- /dev/null
+++ b/src/Tools/Fallout.Application.Tools.Versioning/Fallout.Application.Tools.Versioning.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net10.0
+ Versioning tool wrappers — GitVersion, MinVer, Nerdbank.GitVersioning, OctoVersion. Application layer (Fallout.Application.Tools.*).
+
+
+
+
+
+
+
+
diff --git a/src/Fallout.Common/Tools/GitVersion/GitVersion.Generated.cs b/src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersion.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/GitVersion/GitVersion.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersion.Generated.cs
diff --git a/src/Fallout.Common/Tools/GitVersion/GitVersion.json b/src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersion.json
similarity index 100%
rename from src/Fallout.Common/Tools/GitVersion/GitVersion.json
rename to src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersion.json
diff --git a/src/Fallout.Common/Tools/GitVersion/GitVersionAttribute.cs b/src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersionAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/GitVersion/GitVersionAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersionAttribute.cs
diff --git a/src/Fallout.Common/Tools/GitVersion/GitVersionTasks.cs b/src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersionTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/GitVersion/GitVersionTasks.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/GitVersion/GitVersionTasks.cs
diff --git a/src/Fallout.Common/Tools/GitVersion/NumberToStringJsonConverter.cs b/src/Tools/Fallout.Application.Tools.Versioning/GitVersion/NumberToStringJsonConverter.cs
similarity index 100%
rename from src/Fallout.Common/Tools/GitVersion/NumberToStringJsonConverter.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/GitVersion/NumberToStringJsonConverter.cs
diff --git a/src/Fallout.Common/Tools/MinVer/MinVer.Generated.cs b/src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVer.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MinVer/MinVer.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVer.Generated.cs
diff --git a/src/Fallout.Common/Tools/MinVer/MinVer.json b/src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVer.json
similarity index 100%
rename from src/Fallout.Common/Tools/MinVer/MinVer.json
rename to src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVer.json
diff --git a/src/Fallout.Common/Tools/MinVer/MinVerAttribute.cs b/src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVerAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MinVer/MinVerAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVerAttribute.cs
diff --git a/src/Fallout.Common/Tools/MinVer/MinVerTasks.cs b/src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVerTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/MinVer/MinVerTasks.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/MinVer/MinVerTasks.cs
diff --git a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs b/src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs
diff --git a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.json b/src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioning.json
similarity index 100%
rename from src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.json
rename to src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioning.json
diff --git a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs b/src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs
diff --git a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningTasks.cs b/src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioningTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningTasks.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/NerdbankGitVersioning/NerdbankGitVersioningTasks.cs
diff --git a/src/Fallout.Common/Tools/OctoVersion/OctoVersion.Generated.cs b/src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersion.Generated.cs
similarity index 100%
rename from src/Fallout.Common/Tools/OctoVersion/OctoVersion.Generated.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersion.Generated.cs
diff --git a/src/Fallout.Common/Tools/OctoVersion/OctoVersion.json b/src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersion.json
similarity index 100%
rename from src/Fallout.Common/Tools/OctoVersion/OctoVersion.json
rename to src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersion.json
diff --git a/src/Fallout.Common/Tools/OctoVersion/OctoVersionAttribute.cs b/src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersionAttribute.cs
similarity index 100%
rename from src/Fallout.Common/Tools/OctoVersion/OctoVersionAttribute.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersionAttribute.cs
diff --git a/src/Fallout.Common/Tools/OctoVersion/OctoVersionTasks.cs b/src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersionTasks.cs
similarity index 100%
rename from src/Fallout.Common/Tools/OctoVersion/OctoVersionTasks.cs
rename to src/Tools/Fallout.Application.Tools.Versioning/OctoVersion/OctoVersionTasks.cs
diff --git a/tests/Fallout.Architecture.Specs/Fallout.Architecture.Specs.csproj b/tests/Fallout.Architecture.Specs/Fallout.Architecture.Specs.csproj
index f554c9160..12ed70d79 100644
--- a/tests/Fallout.Architecture.Specs/Fallout.Architecture.Specs.csproj
+++ b/tests/Fallout.Architecture.Specs/Fallout.Architecture.Specs.csproj
@@ -49,6 +49,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Fallout.Architecture.Specs/FalloutArchitecture.cs b/tests/Fallout.Architecture.Specs/FalloutArchitecture.cs
index 773d7529a..999e4bcad 100644
--- a/tests/Fallout.Architecture.Specs/FalloutArchitecture.cs
+++ b/tests/Fallout.Architecture.Specs/FalloutArchitecture.cs
@@ -36,6 +36,24 @@ internal static class FalloutArchitecture
public const string Components = "Fallout.Components";
public const string Cli = "Fallout.Cli";
+ // Application-layer tool families (Fallout.Application.Tools.*). Governed for layering; their
+ // namespace alignment (still legacy Fallout.Common.Tools.*) is deferred, so they are deliberately
+ // NOT in RuntimeLibraries (the naming-rule subjects) yet.
+ public const string ToolsNotifications = "Fallout.Application.Tools.Notifications";
+ public const string ToolsJavaScript = "Fallout.Application.Tools.JavaScript";
+ public const string ToolsTesting = "Fallout.Application.Tools.Testing";
+ public const string ToolsSigning = "Fallout.Application.Tools.Signing";
+ public const string ToolsPackaging = "Fallout.Application.Tools.Packaging";
+ public const string ToolsVersioning = "Fallout.Application.Tools.Versioning";
+ public const string ToolsCloud = "Fallout.Application.Tools.Cloud";
+ public const string ToolsShell = "Fallout.Application.Tools.Shell";
+ public const string ToolsGaming = "Fallout.Application.Tools.Gaming";
+ public const string ToolsDocumentation = "Fallout.Application.Tools.Documentation";
+ public const string ToolsDotNet = "Fallout.Application.Tools.DotNet";
+ public const string ToolsCoverage = "Fallout.Application.Tools.Coverage";
+ public const string ToolsContainers = "Fallout.Application.Tools.Containers";
+ public const string ToolsVersionControl = "Fallout.Application.Tools.VersionControl";
+
// Transition shims.
public const string NukeCommon = "Nuke.Common";
public const string NukeBuild = "Nuke.Build";
diff --git a/tests/Fallout.Architecture.Specs/KnownViolations.cs b/tests/Fallout.Architecture.Specs/KnownViolations.cs
index fe3e39904..8fe54c112 100644
--- a/tests/Fallout.Architecture.Specs/KnownViolations.cs
+++ b/tests/Fallout.Architecture.Specs/KnownViolations.cs
@@ -101,6 +101,8 @@ internal static class KnownViolations
"Fallout.Common.Execution.VSCode",
"Fallout.Common.Execution.VisualStudio",
"Fallout.Common.FalloutBuild",
+ "Fallout.Common.Git.GitHubItemType",
+ "Fallout.Common.Git.GitHubUrlExtensions",
"Fallout.Common.Git.GitProtocol",
"Fallout.Common.Git.GitRepository",
"Fallout.Common.Git.GitRepositoryExtensions",
diff --git a/tests/Fallout.Architecture.Specs/LayeringSpecs.cs b/tests/Fallout.Architecture.Specs/LayeringSpecs.cs
index 9e1ccd4e8..ececf1b07 100644
--- a/tests/Fallout.Architecture.Specs/LayeringSpecs.cs
+++ b/tests/Fallout.Architecture.Specs/LayeringSpecs.cs
@@ -52,6 +52,34 @@ public void Tooling_contract_leaf_is_a_foundation(string leaf) =>
$"{leaf} is a pure Application-layer tooling-contract leaf and must reference no other Fallout/Nuke assembly",
KnownViolations.None);
+ [Theory]
+ [InlineData(Arch.ToolsNotifications)]
+ [InlineData(Arch.ToolsJavaScript)]
+ [InlineData(Arch.ToolsTesting)]
+ [InlineData(Arch.ToolsSigning)]
+ [InlineData(Arch.ToolsPackaging)]
+ [InlineData(Arch.ToolsVersioning)]
+ [InlineData(Arch.ToolsCloud)]
+ [InlineData(Arch.ToolsShell)]
+ [InlineData(Arch.ToolsGaming)]
+ [InlineData(Arch.ToolsDocumentation)]
+ [InlineData(Arch.ToolsDotNet)]
+ [InlineData(Arch.ToolsCoverage)]
+ [InlineData(Arch.ToolsContainers)]
+ [InlineData(Arch.ToolsVersionControl)]
+ public void Tool_family_does_not_depend_on_upper_layers(string family) =>
+ // Tool families legitimately reach UP into Fallout.Build today — their value-injection
+ // attributes derive from ValueInjectionAttributeBase, which still lives in Fallout.Build.
+ // That edge is interim debt of the half-onion state (value-injection moves to a lower layer
+ // with the deferred namespace/Infrastructure pass); until then we guard the edges that would
+ // actually break the model: a tool family must never depend on the Components layer (which
+ // depends on tools — that would be a cycle) or the Cli composition root.
+ Ratchet.Enforce(
+ Arch.TypesIn(family)
+ .Should().NotDependOnAny(Arch.TypesIn(Arch.Components, Arch.Cli)),
+ $"{family} is an Application-layer tool family and must not depend on the Components layer or the Cli composition root",
+ KnownViolations.None);
+
[Fact]
public void Tooling_does_not_depend_on_upper_layers() =>
Ratchet.Enforce(
diff --git a/tests/Fallout.Cli.Specs/Fallout.Cli.Specs.csproj b/tests/Fallout.Cli.Specs/Fallout.Cli.Specs.csproj
index 911b87173..ea2175e4b 100644
--- a/tests/Fallout.Cli.Specs/Fallout.Cli.Specs.csproj
+++ b/tests/Fallout.Cli.Specs/Fallout.Cli.Specs.csproj
@@ -7,6 +7,8 @@
+
+
diff --git a/tests/Fallout.Common.Specs/Fallout.Common.Specs.csproj b/tests/Fallout.Common.Specs/Fallout.Common.Specs.csproj
index 0df502072..22e2a97e8 100644
--- a/tests/Fallout.Common.Specs/Fallout.Common.Specs.csproj
+++ b/tests/Fallout.Common.Specs/Fallout.Common.Specs.csproj
@@ -6,6 +6,13 @@
+
+
+
+
+
+
+