From 3e2d232307eda71ae22f2d10b8364693cc25f368 Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 19:54:54 +1200
Subject: [PATCH 01/46] docs: ADR-0006 + spike 0002 for onion layering &
namespace realignment
Records the decision to realign the wild NUKE-inherited structure to explicit
onion layers (Fallout.Domain / .Application / .Infrastructure / .Cli root),
namespace = project = layer, dissolving the Fallout.Common catch-all. Breaking,
on experimental, batched to 2027.0.0 with re-pointed Nuke.* shims; amends the
rebrand-plan's deferral of this work. Spike 0002 proves the mechanics on the
innermost (Domain) ring first.
Co-Authored-By: Claude Opus 4.8
---
...nion-layering-and-namespace-realignment.md | 76 +++++++++++++++++++
docs/adr/README.md | 1 +
docs/spikes/0002-onion-domain-ring.md | 52 +++++++++++++
3 files changed, 129 insertions(+)
create mode 100644 docs/adr/0006-onion-layering-and-namespace-realignment.md
create mode 100644 docs/spikes/0002-onion-domain-ring.md
diff --git a/docs/adr/0006-onion-layering-and-namespace-realignment.md b/docs/adr/0006-onion-layering-and-namespace-realignment.md
new file mode 100644
index 000000000..979bf0c1f
--- /dev/null
+++ b/docs/adr/0006-onion-layering-and-namespace-realignment.md
@@ -0,0 +1,76 @@
+# ADR-0006 — Onion layering + namespace realignment
+
+- **Status:** Proposed
+- **Date:** 2026-05-31
+- **Deciders:** Fallout maintainers
+- **Relates to:** ADR-[0004](0004-calendar-versioning-and-dual-pace-channels.md) (calendar versioning + channels — sets the breaking-change home), ADR-[0005](0005-ci-host-integration-ports-and-adapters.md) (the runtime-host ports the Application layer exposes), [docs/rebrand-plan.md](../rebrand-plan.md) (**amends** its deferral — see below)
+- **Spike:** [docs/spikes/0002-onion-domain-ring.md](../spikes/0002-onion-domain-ring.md)
+
+## Context
+
+The project + namespace structure is inherited verbatim from NUKE: the rebrand ([#32](https://github.com/ChrisonSimtian/Fallout/issues/32)) did a **strict 1:1 prefix swap** (`Nuke.X` → `Fallout.X`) that deliberately preserved the existing shape. Two pathologies result:
+
+1. **Namespace ≠ project.** Most projects declare types under `Fallout.Common.*` rather than their own name. The core user-facing API (`FalloutBuild`, `Target`, `[Parameter]`, and the ADR-0005 ports) lives in namespace `Fallout.Common` inside project `Fallout.Build`. `Fallout.Core` declares both `Fallout.Core.Planning` and `Fallout.Common.Execution`. Every `Fallout.Utilities.*` sub-project (except `.Text.Yaml`) declares `Fallout.Common.*`. `Fallout.Tooling` → `Fallout.Common.Tooling`. `Fallout.Solution` (singular) → `Fallout.Solutions` (plural). `Fallout.Tooling.Generator` → `Fallout.CodeGeneration`.
+
+2. **`Fallout.Common.*` is a horizontal catch-all** contributed by **five** projects (`Build`, `Common`, `Core`, `Utilities`, `SourceGenerators`). It masks a layering that already exists *physically* — the `ProjectReference` graph is clean and acyclic (`Core`/`Utilities` at the bottom → `Build` → `Common` → `Cli` at the root) — but the namespaces lie about it.
+
+### Why now, and why this amends the rebrand plan
+
+`docs/rebrand-plan.md` explicitly **defers** "realigning project ↔ namespace" to "a future major version after the shim packages have sunset," citing the type-forwarding bridge as the blocker. This ADR **amends that deferral** on two grounds:
+
+- **The bridge is re-pointable.** It is not raw `[TypeForwardedTo]`; it is the `TransitionShimGenerator` (`ShimAllPublicTypesUnder(from, to)`), a *prefix-remappable* subclass generator. We can restructure the `Fallout.*` namespaces freely and re-point the shim mappings; the `Nuke.*` surface stays frozen and consumers on it are unaffected.
+- **ADR-0004 gives a clean home.** Namespace realignment is breaking → it lands on `experimental` and is **batched to the `2027.0.0` yearly major**. The work happens in 2026; native `Fallout.*` consumers are carried by re-pointed shims + the `Fallout.Migrate` codefix. Old `Fallout.*` namespaces are deleted at the cut, not dragged.
+
+(The rebrand-plan is a transient maintainer-owned doc; this is a deliberate, recorded reversal of one of its deferrals, not a silent contradiction.)
+
+## Decision
+
+**Realign the runtime codebase to explicit onion layers, with `namespace = project = layer`.**
+
+| Layer | Holds | Today (selected) → target |
+|---|---|---|
+| **`Fallout.Domain.*`** (innermost; zero Fallout deps) | Target graph, planning algorithms, execution status, the read-only build model | `Fallout.Core` (`Fallout.Core.Planning` + `Fallout.Common.Execution`'s `ITargetModel`/`ExecutionStatus`) → `Fallout.Domain` |
+| **`Fallout.Application.*`** (orchestration + ports; depends only on Domain) | `FalloutBuild`, `Target`, `[Parameter]` & attributes, execution engine (`BuildManager`/`Executor`/`Planner`), middleware pipeline, value injection, `Host` base, the ports (`IBuildHost`, `IBuildReporter`, `IConfigurationGenerator`, `IBuildServer`) | `Fallout.Build` + the `Fallout.Common`/`Fallout.Common.Execution`/`Fallout.Common.CI` types it declares → `Fallout.Application` |
+| **`Fallout.Infrastructure.*`** (adapters; depends on Application/Domain) | CI host adapters, tool-execution framework + tool wrappers, IO/Net/compression/globbing/text, project/solution model, process execution | `Fallout.Common.CI.*` → `.Infrastructure.CI.*`; `Fallout.Common.Tools.*` + `Fallout.Tooling` → `.Infrastructure.Tools.*`; `Fallout.Utilities.*` → `.Infrastructure.IO`/`.Net`/`.Text.*`; `Fallout.ProjectModel`/`Fallout.Solution(s)` → `.Infrastructure.ProjectModel`/`.Solutions` |
+| **`Fallout.Cli`** (composition root) | Entry points, host integration | `Fallout.Cli`, `Fallout.MSBuildTasks`, `Fallout.Migrate` — unchanged |
+
+**Outside the runtime onion** (build-time tooling, kept as-is): `Fallout.SourceGenerators`, `Fallout.Tooling.Generator` (the `Fallout.CodeGeneration` codegen), `Fallout.Migrate.Analyzers`. The vendored `Fallout.Persistence.Solution` keeps its namespace (Microsoft code).
+
+**Rules:**
+1. **`namespace == project == layer`.** No project declares a namespace rooted outside its layer. `Fallout.Common` is **dissolved**.
+2. **Onion dependency rule, fitness-enforced.** Domain references no other Fallout assembly; Application references only Domain; Infrastructure references Application/Domain; only the Cli composition root references Infrastructure. One architecture-test per ring, added as each ring lands (extends the ADR-0005 boundary-test pattern).
+3. **Breaking → `experimental` → `2027.0.0`** (ADR-0004). Re-point the `TransitionShimGenerator` mappings so the `Nuke.*` surface is unchanged; update the `Fallout.Migrate` codefix to rewrite old `Fallout.*` → new `Fallout.*` for native consumers. Per ADR-0004 a breaking PR targets `experimental` only and carries `target/2027` + `breaking-change` + a `CHANGELOG.md` migration entry.
+4. **Ring-by-ring migration**, inner to outer — each ring is its own PR on `experimental`. The spike (0002) proves the mechanics on the Domain ring before the larger rings.
+
+## Judgment calls (flagged for review — defaults chosen, easily changed)
+
+- **Public API under `.Infrastructure`.** Tool wrappers and CI attributes are consumer-facing yet land under `Fallout.Infrastructure.*` (the hexagonal reading: adapters are infrastructure even when public). Consequence: consumer `using` directives grow (`using Fallout.Infrastructure.Tools.DotNet;`). **Mitigation:** ship a curated set of global usings in the `dotnet fallout` project template so day-to-day build authoring isn't verbose. *Accepted by maintainer; recorded so the ergonomics cost is visible.*
+- **`Fallout.Components`** (the `ICompile`/`IPack`/… mixins) sits on top of Application and is user-facing. Default: keep as `Fallout.Components` (an application-adjacent convenience layer that depends on Application). Alternative: fold into `Fallout.Application.Components`.
+- **Utilities as Infrastructure vs shared kernel.** IO/Net/compression are genuinely infrastructure. Pure-algorithmic helpers (collections, reflection, string) are more a shared kernel; default is to keep a minimal shared-kernel that Domain may depend on, rather than forcing it through Infrastructure (which would violate the inner ring). To be pinned during the Application/Infrastructure rings.
+
+## Consequences
+
+### Positive
+- The namespace finally tells the truth about the layer, and the onion dependency rule is enforced by construction (fitness tests), not convention.
+- `Fallout.Common` — the catch-all — is gone; no more "five projects, one namespace."
+- Sets the stage cleanly for the public plugin SDK (milestone #7): adapters live in a named Infrastructure layer behind the Application-owned ports.
+
+### Negative
+- **Large, breaking, multi-PR.** Touches nearly every file's `namespace`/`using`. Mitigated by ring-by-ring sequencing, re-pointed shims, the migrate codefix, and batching to one yearly major.
+- **Consumer churn** for native `Fallout.*` users (the `Nuke.*` shim users are insulated). The codefix + a CHANGELOG migration guide carry it.
+- **`Fallout.Migrate`** must learn the intra-Fallout rename map in addition to the Nuke→Fallout one.
+
+## Alternatives considered
+
+- **Concern-aligned names** (`Fallout.Core`/`Build`/`Tooling`/`Tools`/`CI`/`IO`), namespace=project but not layer-labelled. Lower consumer surprise (keeps short names), fits the repo's by-concern convention. **Not chosen** — maintainer wants explicit onion layer names so the architecture is legible from the namespace alone.
+- **Keep `Fallout.Common` as a thin facade** re-exporting the layered types. Less churn. **Not chosen** — keeps a name we want gone ("don't drag dead weight").
+- **Minimal — fix only the internal mismatches.** Smallest break. **Not chosen** — leaves the catch-all and doesn't achieve the onion goal.
+- **Defer to "after shim sunset" (status quo per rebrand-plan).** **Not chosen** — see "Why now"; the work is wanted this year.
+
+## References
+
+- Current-state map: see the structural survey summarized in the spike.
+- Shim machinery: `src/Fallout.SourceGenerators/TransitionShimGenerator.cs`, `src/Shims/Nuke.*`
+- Migrate codefix: `src/Fallout.Migrate`, `src/Fallout.Migrate.Analyzers`
+- Deferral being amended: `docs/rebrand-plan.md` §"What's deliberately deferred"
+- Spike: [docs/spikes/0002-onion-domain-ring.md](../spikes/0002-onion-domain-ring.md)
diff --git a/docs/adr/README.md b/docs/adr/README.md
index c38f1e8d8..42a79817d 100644
--- a/docs/adr/README.md
+++ b/docs/adr/README.md
@@ -38,3 +38,4 @@ If you change a decision, do NOT silently rewrite the old ADR — add a new one
| [0002](0002-v11-off-nuget-by-default.md) | v11 publishes to GitHub Packages by default; nuget.org opt-in | Accepted |
| [0003](0003-variables-and-substitution.md) | Variables and `${…}` substitution layer | Proposed |
| [0004](0004-calendar-versioning-and-dual-pace-channels.md) | Calendar versioning + dual-pace channels (edge/stable) + experimental APIs | Accepted |
+| [0006](0006-onion-layering-and-namespace-realignment.md) | Onion layering + namespace realignment | Proposed |
diff --git a/docs/spikes/0002-onion-domain-ring.md b/docs/spikes/0002-onion-domain-ring.md
new file mode 100644
index 000000000..09e3acfa9
--- /dev/null
+++ b/docs/spikes/0002-onion-domain-ring.md
@@ -0,0 +1,52 @@
+# Spike 0002 — Onion realignment: prove the Domain ring
+
+- **Status:** Planned
+- **Date:** 2026-05-31
+- **Decision record:** [ADR-0006](../adr/0006-onion-layering-and-namespace-realignment.md)
+- **Channel:** `experimental` (spike branch `spike/onion-structure`)
+- **Time-box:** one focused session
+
+> The full realignment (ADR-0006) is a large, breaking, ring-by-ring program. This spike does **only the innermost ring** — extract `Fallout.Domain` — to prove the three mechanics every later ring depends on, before committing to the larger ones. Throwaway-by-default.
+
+## Hypothesis
+
+> The pure-domain types can be lifted into a `Fallout.Domain` layer (`namespace = project = layer`) such that: (1) the Domain assembly references **no other Fallout assembly**, enforced by a fitness test; (2) the `TransitionShimGenerator` can be **re-pointed** so the `Nuke.*` surface is byte-for-byte unchanged; (3) the solution still builds and all tests pass — confirming the rename + shim-repoint + fitness loop that the Application and Infrastructure rings will reuse at larger scale.
+
+## Scope
+
+### In scope
+1. **Create `Fallout.Domain`** (project + namespace). Move into it the pure-domain types: `Fallout.Core.Planning.*` (graph/topo-sort/cycle detection) and the domain types currently under `Fallout.Common.Execution` in the `Fallout.Core` project (`ITargetModel`, `ExecutionStatus`). Result: `Fallout.Core` is renamed/absorbed; no domain type remains under `Fallout.Common.*`.
+2. **Re-point the shim.** Update the `ShimAllPublicTypesUnder` mappings so the moved types still surface at their original `Nuke.*` names (e.g. `Fallout.Domain.ITargetModel` → `Nuke.Common.Execution.ITargetModel`). Confirm the generated `Nuke.*` surface is unchanged.
+3. **Fitness test.** Assert `Fallout.Domain` references no other `Fallout.*` assembly (the innermost-ring invariant). Demonstrate it fails on an injected violation, then revert.
+4. **Update internal references.** `Fallout.Application`-to-be (currently `Fallout.Build`) and others that consumed the moved types via `Fallout.Common.Execution` now reference `Fallout.Domain`.
+
+### Out of scope
+- ❌ The Application and Infrastructure rings (later PRs).
+- ❌ Renaming `Fallout.Build` → `Fallout.Application`, dissolving `Fallout.Common`, moving tools/CI/utilities — none of it yet.
+- ❌ Updating the `Fallout.Migrate` codefix for native consumers (batched work; the spike only proves the shim path).
+- ❌ Consumer-template global usings (an Application/Infrastructure-ring concern).
+
+## Ordered steps
+
+1. Branch is `spike/onion-structure` off `experimental`. (Done.)
+2. Read the current `Fallout.Core` contents and every reference to its types across the solution (esp. `Fallout.Common.Execution` consumers in `Fallout.Build`).
+3. Create `Fallout.Domain` project; move the pure-domain files; set `namespace = Fallout.Domain[.Planning]`.
+4. Fix references (project refs + `using`s) across the solution.
+5. Re-point the `TransitionShimGenerator` mapping(s); rebuild the `Nuke.*` shim and confirm its public surface is unchanged (diff the generated types, or assert key `Nuke.Common.Execution.*` types still resolve).
+6. Add the Domain-ring fitness test; confirm green, then confirm it goes red on a deliberate `Fallout.*` reference, then revert.
+7. Validate: `./build.sh Compile` + `./build.sh Test` (or the per-project equivalents) green; dogfood workflows unchanged.
+
+## Success criteria
+- ✅ `Fallout.Domain` exists; no domain type remains under `Fallout.Common.*`.
+- ✅ Fitness test passes and demonstrably fails on a violation.
+- ✅ `Nuke.*` shim surface unchanged (consumers on the bridge unaffected).
+- ✅ Solution builds; tests green.
+- ✅ A written verdict: did the rename + shim-repoint + fitness loop hold? What surprised us? Is it safe to scale to the Application ring (the big one — the user-facing API rename)?
+
+## Risks / watch
+- **Shim re-point is the real unknown.** If `ShimAllPublicTypesUnder` can't express the many-old-layers → one-`Nuke.Common` mapping cleanly, that's the key finding — it gates every later ring. Record precisely what the generator supports.
+- **`Fallout.Core` already mixes `Fallout.Core.Planning` and `Fallout.Common.Execution`** — make sure only genuinely-pure types move; anything touching execution *orchestration* (not the model) belongs in the Application ring, not Domain.
+- **Hidden inward references.** A "domain" type that secretly reaches into utilities/IO would break the zero-deps invariant — the fitness test will catch it; treat any such case as a finding about what's really domain.
+
+## Exit
+Set **Status: Done**, append the verdict, and feed it back into ADR-0006 (confirm/adjust the layer mapping, then promote `Proposed` → `Accepted`) before starting the Application ring.
From 607bbf0c171d7900b2be838334c7689b88167e3b Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 20:31:45 +1200
Subject: [PATCH 02/46] =?UTF-8?q?docs:=20refine=20ADR-0006/spike-0002=20?=
=?UTF-8?q?=E2=80=94=20Components=20reasoning=20+=20defer=20shim=20strateg?=
=?UTF-8?q?y?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Sharpen why Fallout.Components stays an outer recipes layer: it depends on
the tool wrappers (ICompile calls DotNetBuild), so Components -> Infrastructure;
folding it into Application would invert the onion. Folding is possible only by
first porting tool execution behind an Application-owned port (a separate step).
- Defer the migration/shim strategy wholesale: don't re-point the shim ring-by-ring
toward a moving target. Redesign it as its own phase/ADR once the shape settles;
Nuke.* parity may lapse on experimental during the work. Spike 0002 simplified
to move + reference-fixup + fitness (no shim re-point).
Co-Authored-By: Claude Opus 4.8
---
...nion-layering-and-namespace-realignment.md | 16 +++++++----
docs/spikes/0002-onion-domain-ring.md | 27 +++++++++----------
2 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/docs/adr/0006-onion-layering-and-namespace-realignment.md b/docs/adr/0006-onion-layering-and-namespace-realignment.md
index 979bf0c1f..2bcfe014c 100644
--- a/docs/adr/0006-onion-layering-and-namespace-realignment.md
+++ b/docs/adr/0006-onion-layering-and-namespace-realignment.md
@@ -18,7 +18,7 @@ The project + namespace structure is inherited verbatim from NUKE: the rebrand (
`docs/rebrand-plan.md` explicitly **defers** "realigning project ↔ namespace" to "a future major version after the shim packages have sunset," citing the type-forwarding bridge as the blocker. This ADR **amends that deferral** on two grounds:
-- **The bridge is re-pointable.** It is not raw `[TypeForwardedTo]`; it is the `TransitionShimGenerator` (`ShimAllPublicTypesUnder(from, to)`), a *prefix-remappable* subclass generator. We can restructure the `Fallout.*` namespaces freely and re-point the shim mappings; the `Nuke.*` surface stays frozen and consumers on it are unaffected.
+- **The bridge is not a blocker.** The rebrand-plan deferred this work *because* it assumed a rigid `[TypeForwardedTo]` bridge. The actual machinery is the `TransitionShimGenerator` (`ShimAllPublicTypesUnder(from, to)`), a *prefix-remappable* subclass generator — so restructuring `Fallout.*` doesn't orphan the `Nuke.*` surface in principle. We nonetheless **defer the migration strategy wholesale** (see Decision §"Migration & shim strategy") rather than re-point ring-by-ring; the point here is only that the stated blocker doesn't bind.
- **ADR-0004 gives a clean home.** Namespace realignment is breaking → it lands on `experimental` and is **batched to the `2027.0.0` yearly major**. The work happens in 2026; native `Fallout.*` consumers are carried by re-pointed shims + the `Fallout.Migrate` codefix. Old `Fallout.*` namespaces are deleted at the cut, not dragged.
(The rebrand-plan is a transient maintainer-owned doc; this is a deliberate, recorded reversal of one of its deferrals, not a silent contradiction.)
@@ -39,13 +39,20 @@ The project + namespace structure is inherited verbatim from NUKE: the rebrand (
**Rules:**
1. **`namespace == project == layer`.** No project declares a namespace rooted outside its layer. `Fallout.Common` is **dissolved**.
2. **Onion dependency rule, fitness-enforced.** Domain references no other Fallout assembly; Application references only Domain; Infrastructure references Application/Domain; only the Cli composition root references Infrastructure. One architecture-test per ring, added as each ring lands (extends the ADR-0005 boundary-test pattern).
-3. **Breaking → `experimental` → `2027.0.0`** (ADR-0004). Re-point the `TransitionShimGenerator` mappings so the `Nuke.*` surface is unchanged; update the `Fallout.Migrate` codefix to rewrite old `Fallout.*` → new `Fallout.*` for native consumers. Per ADR-0004 a breaking PR targets `experimental` only and carries `target/2027` + `breaking-change` + a `CHANGELOG.md` migration entry.
+3. **Breaking → `experimental` → `2027.0.0`** (ADR-0004). A breaking PR targets `experimental` only and carries `target/2027` + `breaking-change` + a `CHANGELOG.md` migration entry.
4. **Ring-by-ring migration**, inner to outer — each ring is its own PR on `experimental`. The spike (0002) proves the mechanics on the Domain ring before the larger rings.
+5. **Migration/shim strategy is deferred wholesale** — see below.
+
+### Migration & shim strategy: deferred by design
+
+The `Nuke.*` transition shims (and any native-`Fallout.*` migration aid) are **explicitly out of scope for the rearchitecture rings.** Rationale: there's no point re-pointing the existing `TransitionShimGenerator` ring-by-ring toward a target that's still moving. Instead — once the final layered shape has settled — we design a **fresh migration/shim strategy that fits whatever we ended up with**, as its own phase and its own ADR. The existing bridge is re-pointable (it's a prefix-remappable subclass generator, not raw `[TypeForwardedTo]`), so this deferral costs us no future optionality; it's a sequencing choice, not a capability loss.
+
+Consequence during the work: on `experimental`, `Nuke.*` shim parity is **not maintained** while the rings land. That's acceptable — `experimental` is the unstable lane, and `2027.0.0` is the only deadline that matters; the new migration story is built before the cut. `Fallout.Migrate` likewise gets revisited then, not incrementally.
## Judgment calls (flagged for review — defaults chosen, easily changed)
- **Public API under `.Infrastructure`.** Tool wrappers and CI attributes are consumer-facing yet land under `Fallout.Infrastructure.*` (the hexagonal reading: adapters are infrastructure even when public). Consequence: consumer `using` directives grow (`using Fallout.Infrastructure.Tools.DotNet;`). **Mitigation:** ship a curated set of global usings in the `dotnet fallout` project template so day-to-day build authoring isn't verbose. *Accepted by maintainer; recorded so the ergonomics cost is visible.*
-- **`Fallout.Components`** (the `ICompile`/`IPack`/… mixins) sits on top of Application and is user-facing. Default: keep as `Fallout.Components` (an application-adjacent convenience layer that depends on Application). Alternative: fold into `Fallout.Application.Components`.
+- **`Fallout.Components`** (the `ICompile`/`IPack`/… mixins) is a **recipes layer that sits *outside* Infrastructure**, not inside Application. The mixins call tool wrappers directly (`ICompile.Compile` → `DotNetBuild(...)` from `Fallout.Common.Tools.DotNet`), so `Components → Infrastructure`. It therefore **cannot** be folded into `Application` without inverting the onion (the inner ring would transitively depend on Infrastructure — the exact thing the fitness tests forbid). Default: keep as `Fallout.Components`, an outer recipes layer depending on Application + Infrastructure, near the composition root. *Folding it into `Application` is possible only by first porting tool execution behind an Application-owned tool port (the ADR-0005 move applied to tooling) — a separate, larger future step, not bundled here.*
- **Utilities as Infrastructure vs shared kernel.** IO/Net/compression are genuinely infrastructure. Pure-algorithmic helpers (collections, reflection, string) are more a shared kernel; default is to keep a minimal shared-kernel that Domain may depend on, rather than forcing it through Infrastructure (which would violate the inner ring). To be pinned during the Application/Infrastructure rings.
## Consequences
@@ -57,8 +64,7 @@ The project + namespace structure is inherited verbatim from NUKE: the rebrand (
### Negative
- **Large, breaking, multi-PR.** Touches nearly every file's `namespace`/`using`. Mitigated by ring-by-ring sequencing, re-pointed shims, the migrate codefix, and batching to one yearly major.
-- **Consumer churn** for native `Fallout.*` users (the `Nuke.*` shim users are insulated). The codefix + a CHANGELOG migration guide carry it.
-- **`Fallout.Migrate`** must learn the intra-Fallout rename map in addition to the Nuke→Fallout one.
+- **Consumer churn** for native `Fallout.*` users, and a window on `experimental` where `Nuke.*` shim parity lapses. Both are carried by the deferred migration phase (a fresh strategy + CHANGELOG migration guide), built before the `2027.0.0` cut — not during the rings.
## Alternatives considered
diff --git a/docs/spikes/0002-onion-domain-ring.md b/docs/spikes/0002-onion-domain-ring.md
index 09e3acfa9..1d483278a 100644
--- a/docs/spikes/0002-onion-domain-ring.md
+++ b/docs/spikes/0002-onion-domain-ring.md
@@ -10,20 +10,19 @@
## Hypothesis
-> The pure-domain types can be lifted into a `Fallout.Domain` layer (`namespace = project = layer`) such that: (1) the Domain assembly references **no other Fallout assembly**, enforced by a fitness test; (2) the `TransitionShimGenerator` can be **re-pointed** so the `Nuke.*` surface is byte-for-byte unchanged; (3) the solution still builds and all tests pass — confirming the rename + shim-repoint + fitness loop that the Application and Infrastructure rings will reuse at larger scale.
+> The pure-domain types can be lifted into a `Fallout.Domain` layer (`namespace = project = layer`) such that: (1) the Domain assembly references **no other Fallout assembly**, enforced by a fitness test; (2) the solution still builds and all tests pass — confirming the move + reference-fixup + fitness loop that the Application and Infrastructure rings will reuse at larger scale.
## Scope
### In scope
1. **Create `Fallout.Domain`** (project + namespace). Move into it the pure-domain types: `Fallout.Core.Planning.*` (graph/topo-sort/cycle detection) and the domain types currently under `Fallout.Common.Execution` in the `Fallout.Core` project (`ITargetModel`, `ExecutionStatus`). Result: `Fallout.Core` is renamed/absorbed; no domain type remains under `Fallout.Common.*`.
-2. **Re-point the shim.** Update the `ShimAllPublicTypesUnder` mappings so the moved types still surface at their original `Nuke.*` names (e.g. `Fallout.Domain.ITargetModel` → `Nuke.Common.Execution.ITargetModel`). Confirm the generated `Nuke.*` surface is unchanged.
-3. **Fitness test.** Assert `Fallout.Domain` references no other `Fallout.*` assembly (the innermost-ring invariant). Demonstrate it fails on an injected violation, then revert.
-4. **Update internal references.** `Fallout.Application`-to-be (currently `Fallout.Build`) and others that consumed the moved types via `Fallout.Common.Execution` now reference `Fallout.Domain`.
+2. **Fitness test.** Assert `Fallout.Domain` references no other `Fallout.*` assembly (the innermost-ring invariant). Demonstrate it fails on an injected violation, then revert.
+3. **Update internal references.** `Fallout.Application`-to-be (currently `Fallout.Build`) and others that consumed the moved types via `Fallout.Common.Execution` now reference `Fallout.Domain`.
### Out of scope
- ❌ The Application and Infrastructure rings (later PRs).
- ❌ Renaming `Fallout.Build` → `Fallout.Application`, dissolving `Fallout.Common`, moving tools/CI/utilities — none of it yet.
-- ❌ Updating the `Fallout.Migrate` codefix for native consumers (batched work; the spike only proves the shim path).
+- ❌ **Shim / migration parity — deferred wholesale** (ADR-0006). We do *not* re-point the `TransitionShimGenerator` here; the `Nuke.*` surface is allowed to lapse on `experimental`. The migration strategy is redesigned as its own phase once the target shape settles.
- ❌ Consumer-template global usings (an Application/Infrastructure-ring concern).
## Ordered steps
@@ -31,22 +30,20 @@
1. Branch is `spike/onion-structure` off `experimental`. (Done.)
2. Read the current `Fallout.Core` contents and every reference to its types across the solution (esp. `Fallout.Common.Execution` consumers in `Fallout.Build`).
3. Create `Fallout.Domain` project; move the pure-domain files; set `namespace = Fallout.Domain[.Planning]`.
-4. Fix references (project refs + `using`s) across the solution.
-5. Re-point the `TransitionShimGenerator` mapping(s); rebuild the `Nuke.*` shim and confirm its public surface is unchanged (diff the generated types, or assert key `Nuke.Common.Execution.*` types still resolve).
-6. Add the Domain-ring fitness test; confirm green, then confirm it goes red on a deliberate `Fallout.*` reference, then revert.
-7. Validate: `./build.sh Compile` + `./build.sh Test` (or the per-project equivalents) green; dogfood workflows unchanged.
+4. Fix references (project refs + `using`s) across the solution. The `Nuke.*` shim build may break here — that's expected and allowed (shim parity deferred); if it blocks the solution build, temporarily exclude the affected shim project rather than re-pointing it.
+5. Add the Domain-ring fitness test; confirm green, then confirm it goes red on a deliberate `Fallout.*` reference, then revert.
+6. Validate: `./build.sh Compile` + `./build.sh Test` (or the per-project equivalents) green; dogfood workflows unchanged.
## Success criteria
- ✅ `Fallout.Domain` exists; no domain type remains under `Fallout.Common.*`.
- ✅ Fitness test passes and demonstrably fails on a violation.
-- ✅ `Nuke.*` shim surface unchanged (consumers on the bridge unaffected).
-- ✅ Solution builds; tests green.
-- ✅ A written verdict: did the rename + shim-repoint + fitness loop hold? What surprised us? Is it safe to scale to the Application ring (the big one — the user-facing API rename)?
+- ✅ Solution (excluding deferred shim parity) builds; tests green.
+- ✅ A written verdict: did the move + reference-fixup + fitness loop hold? What surprised us? Is it safe to scale to the Application ring (the big one — the user-facing API rename)?
## Risks / watch
-- **Shim re-point is the real unknown.** If `ShimAllPublicTypesUnder` can't express the many-old-layers → one-`Nuke.Common` mapping cleanly, that's the key finding — it gates every later ring. Record precisely what the generator supports.
-- **`Fallout.Core` already mixes `Fallout.Core.Planning` and `Fallout.Common.Execution`** — make sure only genuinely-pure types move; anything touching execution *orchestration* (not the model) belongs in the Application ring, not Domain.
-- **Hidden inward references.** A "domain" type that secretly reaches into utilities/IO would break the zero-deps invariant — the fitness test will catch it; treat any such case as a finding about what's really domain.
+- **What's *really* domain.** `Fallout.Core` already mixes `Fallout.Core.Planning` and `Fallout.Common.Execution` — move only genuinely-pure types; anything touching execution *orchestration* (not the model) belongs in the Application ring, not Domain.
+- **Hidden inward references.** A "domain" type that secretly reaches into utilities/IO would break the zero-deps invariant — the fitness test will catch it; treat any such case as a finding about what's really domain. This is now the spike's primary unknown (the shim question is deferred out).
+- **Shim fallout is expected, not a failure.** If moving types breaks the `Nuke.*` shim build, that's the deferred concern surfacing — note it and move on; do not rabbit-hole on re-pointing.
## Exit
Set **Status: Done**, append the verdict, and feed it back into ADR-0006 (confirm/adjust the layer mapping, then promote `Proposed` → `Accepted`) before starting the Application ring.
From 43e36ba5a8556d9e117e4dc0bb1854abc06a2c96 Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 21:05:50 +1200
Subject: [PATCH 03/46] =?UTF-8?q?docs:=20ADR-0006=20=E2=80=94=20tool=20wra?=
=?UTF-8?q?ppers=20are=20Application=20vocabulary,=20execution=20is=20the?=
=?UTF-8?q?=20port?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Reviewing DotNetBuild's shape showed the tool wrappers are ~pure command
builders (DotNetBuildSettings : ToolOptions is data; only ProcessTasks.StartProcess
touches the OS, statically). So the real infrastructure seam is process/tool
EXECUTION, not the wrappers, and there's no useful 'abstract build' port (ICompile
is irreducibly DotNet-specific).
Corrected layer map: tool vocabulary + Components live in Application; Infrastructure
is the I/O adapters behind ports; a process/tool-execution port is the seam. Resolves
Components into Application instead of an outer ring, and makes builds testable. Adds
an explicit ring-by-ring Sequence with the tooling/execution-port spike as step 3.
Co-Authored-By: Claude Opus 4.8
---
...onion-layering-and-namespace-realignment.md | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/docs/adr/0006-onion-layering-and-namespace-realignment.md b/docs/adr/0006-onion-layering-and-namespace-realignment.md
index 2bcfe014c..c0f01f7f4 100644
--- a/docs/adr/0006-onion-layering-and-namespace-realignment.md
+++ b/docs/adr/0006-onion-layering-and-namespace-realignment.md
@@ -30,8 +30,10 @@ The project + namespace structure is inherited verbatim from NUKE: the rebrand (
| Layer | Holds | Today (selected) → target |
|---|---|---|
| **`Fallout.Domain.*`** (innermost; zero Fallout deps) | Target graph, planning algorithms, execution status, the read-only build model | `Fallout.Core` (`Fallout.Core.Planning` + `Fallout.Common.Execution`'s `ITargetModel`/`ExecutionStatus`) → `Fallout.Domain` |
-| **`Fallout.Application.*`** (orchestration + ports; depends only on Domain) | `FalloutBuild`, `Target`, `[Parameter]` & attributes, execution engine (`BuildManager`/`Executor`/`Planner`), middleware pipeline, value injection, `Host` base, the ports (`IBuildHost`, `IBuildReporter`, `IConfigurationGenerator`, `IBuildServer`) | `Fallout.Build` + the `Fallout.Common`/`Fallout.Common.Execution`/`Fallout.Common.CI` types it declares → `Fallout.Application` |
-| **`Fallout.Infrastructure.*`** (adapters; depends on Application/Domain) | CI host adapters, tool-execution framework + tool wrappers, IO/Net/compression/globbing/text, project/solution model, process execution | `Fallout.Common.CI.*` → `.Infrastructure.CI.*`; `Fallout.Common.Tools.*` + `Fallout.Tooling` → `.Infrastructure.Tools.*`; `Fallout.Utilities.*` → `.Infrastructure.IO`/`.Net`/`.Text.*`; `Fallout.ProjectModel`/`Fallout.Solution(s)` → `.Infrastructure.ProjectModel`/`.Solutions` |
+| **`Fallout.Application.*`** (orchestration + ports + vocabulary; depends only on Domain) | `FalloutBuild`, `Target`, `[Parameter]` & attributes, execution engine (`BuildManager`/`Executor`/`Planner`), middleware pipeline, value injection, `Host` base; the ports (`IBuildHost`, `IBuildReporter`, `IConfigurationGenerator`, `IBuildServer`, **and a process/tool-execution port**); the **typed tool vocabulary** (`Options`/`ToolOptions` model + the generated wrappers like `DotNetTasks` & settings — pure command builders); and the **`Fallout.Components` recipes** | `Fallout.Build` + the `Fallout.Common*` it declares; `Fallout.Common.Tools.*` (wrappers) + the pure part of `Fallout.Tooling`; `Fallout.Components` → `Fallout.Application.*` |
+| **`Fallout.Infrastructure.*`** (I/O adapters behind the ports; depends on Application/Domain) | The adapters that actually touch the outside world: the **process/tool runner** (OS process spawn), filesystem, HTTP, tool-path/package resolvers, **CI host adapters**, config-file writers, project/solution readers | `Fallout.Common.CI.*` → `.Infrastructure.CI.*`; the executor part of `Fallout.Tooling` (`ProcessTasks`/`ToolExecutor`) + `Fallout.Utilities.IO`/`.Net`/`.Compression`/`.Globbing` → `.Infrastructure.*`; `Fallout.ProjectModel`/`Fallout.Solution(s)` → `.Infrastructure.ProjectModel`/`.Solutions` |
+
+**The tool layer splits along purity** (decided after reviewing `DotNetBuild`'s shape — see ADR-0005's ports pattern applied to the deepest I/O): the **command vocabulary** (`DotNetBuildSettings : ToolOptions` is pure data; `DotNetBuild` just constructs argv) is Application; the **one impure step** — `ProcessTasks.StartProcess` spawning a real OS process (today a *static* call) — becomes an injectable **process/tool-execution port** with the OS adapter in Infrastructure. This is what lets `Fallout.Components` (e.g. `ICompile` calling `DotNetBuild`) live in Application without the inner ring depending on a concrete — and it makes builds unit-testable by faking the runner. There is deliberately **no** generic "abstract build" port: `ICompile` is irreducibly DotNet-specific, so abstracting it would be anemic or a re-spelling of DotNet — the wrong abstraction. The seam is *execution*, not *build semantics*.
| **`Fallout.Cli`** (composition root) | Entry points, host integration | `Fallout.Cli`, `Fallout.MSBuildTasks`, `Fallout.Migrate` — unchanged |
**Outside the runtime onion** (build-time tooling, kept as-is): `Fallout.SourceGenerators`, `Fallout.Tooling.Generator` (the `Fallout.CodeGeneration` codegen), `Fallout.Migrate.Analyzers`. The vendored `Fallout.Persistence.Solution` keeps its namespace (Microsoft code).
@@ -49,10 +51,20 @@ The `Nuke.*` transition shims (and any native-`Fallout.*` migration aid) are **e
Consequence during the work: on `experimental`, `Nuke.*` shim parity is **not maintained** while the rings land. That's acceptable — `experimental` is the unstable lane, and `2027.0.0` is the only deadline that matters; the new migration story is built before the cut. `Fallout.Migrate` likewise gets revisited then, not incrementally.
+### Sequence (each step a PR on `experimental`, with its own ring fitness test)
+
+1. **Domain ring** — extract `Fallout.Domain` (spike [0002](../spikes/0002-onion-domain-ring.md)). Innermost, smallest; proves the move → reference-fixup → fitness loop.
+2. **Application ring** — rename `Fallout.Build` → `Fallout.Application` and dissolve the `Fallout.Common` core API into it (the user-facing `FalloutBuild`/`Target`/`[Parameter]` rename — the big one).
+3. **Tooling/execution-port spike** — extract the process/tool-execution port; split `Fallout.Tooling` into pure vocabulary (Application) + executor adapter (Infrastructure). Unlocks tool wrappers as Application vocabulary and is a standalone testability win. *(Can run in parallel with step 2; must precede step 4.)*
+4. **Tool vocabulary + `Components` → Application** — move the wrappers and the `Fallout.Components` recipes in, now that execution is behind the port.
+5. **Infrastructure ring** — CI host adapters, IO/Net/compression/globbing, path/package resolvers, project/solution readers → `Fallout.Infrastructure.*`.
+
+Migration/shim strategy is redesigned after step 5, before the cut (deferred, above).
+
## Judgment calls (flagged for review — defaults chosen, easily changed)
- **Public API under `.Infrastructure`.** Tool wrappers and CI attributes are consumer-facing yet land under `Fallout.Infrastructure.*` (the hexagonal reading: adapters are infrastructure even when public). Consequence: consumer `using` directives grow (`using Fallout.Infrastructure.Tools.DotNet;`). **Mitigation:** ship a curated set of global usings in the `dotnet fallout` project template so day-to-day build authoring isn't verbose. *Accepted by maintainer; recorded so the ergonomics cost is visible.*
-- **`Fallout.Components`** (the `ICompile`/`IPack`/… mixins) is a **recipes layer that sits *outside* Infrastructure**, not inside Application. The mixins call tool wrappers directly (`ICompile.Compile` → `DotNetBuild(...)` from `Fallout.Common.Tools.DotNet`), so `Components → Infrastructure`. It therefore **cannot** be folded into `Application` without inverting the onion (the inner ring would transitively depend on Infrastructure — the exact thing the fitness tests forbid). Default: keep as `Fallout.Components`, an outer recipes layer depending on Application + Infrastructure, near the composition root. *Folding it into `Application` is possible only by first porting tool execution behind an Application-owned tool port (the ADR-0005 move applied to tooling) — a separate, larger future step, not bundled here.*
+- **`Fallout.Components` → Application (RESOLVED, not an open default).** The mixins call tool wrappers (`ICompile.Compile` → `DotNetBuild`). Rather than exile `Components` to an outer ring, we **invert the dependency**: the tool wrappers become Application *vocabulary* and the one impure step (process spawn) moves behind the process/tool-execution port (see the layer table). `Components` then depends only on Application vocabulary + that port and lives in `Application` cleanly. **Prerequisite:** the tooling/execution-port spike (step 3 of the Sequence) lands before the wrappers + `Components` move.
- **Utilities as Infrastructure vs shared kernel.** IO/Net/compression are genuinely infrastructure. Pure-algorithmic helpers (collections, reflection, string) are more a shared kernel; default is to keep a minimal shared-kernel that Domain may depend on, rather than forcing it through Infrastructure (which would violate the inner ring). To be pinned during the Application/Infrastructure rings.
## Consequences
From f546910d9b9bef0530034526db86cb9b4b7ec266 Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 21:20:05 +1200
Subject: [PATCH 04/46] refactor(arch)!: extract Fallout.Domain ring (onion
realignment step 1)
ADR-0006 step 1. Rename Fallout.Core -> Fallout.Domain (project + test project)
and move its two mis-namespaced execution types (ITargetModel, ExecutionStatus)
out of the Fallout.Common.* catch-all into Fallout.Domain.Execution; Planning ->
Fallout.Domain.Planning. Consumers in Fallout.Build gain a using; the intra-repo
ExecutionStatus type-forwarder is re-pointed.
The innermost-ring fitness test now asserts Domain depends on NO outer ring,
including Fallout.Common (the realignment goal). Full solution builds and all
tests pass (incl. Nuke.* shim tests); the solution-generator Verify snapshot is
updated for the project rename.
BREAKING CHANGE: ITargetModel/ExecutionStatus move from Fallout.Common.Execution
to Fallout.Domain.Execution. On experimental; shim/migration parity deferred
(ADR-0006). Batched to 2027.0.0.
Co-Authored-By: Claude Opus 4.8
---
fallout.slnx | 4 +-
src/Fallout.Build/Execution/BuildExecutor.cs | 1 +
src/Fallout.Build/Execution/BuildManager.cs | 1 +
.../Execution/ExecutableTarget.cs | 3 +-
.../Execution/ExecutionPlanner.cs | 5 ++-
.../Execution/ExecutionStatus.cs | 4 +-
src/Fallout.Build/Fallout.Build.csproj | 2 +-
src/Fallout.Build/FalloutBuild.cs | 1 +
src/Fallout.Build/Host.cs | 1 +
.../Telemetry/Telemetry.Events.cs | 1 +
.../Execution/ExecutionStatus.cs | 2 +-
.../Execution/ITargetModel.cs | 2 +-
.../Fallout.Domain.csproj} | 0
.../Graph/StronglyConnectedComponent.cs | 2 +-
.../Graph/StronglyConnectedComponentFinder.cs | 2 +-
.../Graph/StronglyConnectedComponentList.cs | 2 +-
.../Planning/Graph/Vertex.cs | 2 +-
.../Planning/TopoSort.cs | 2 +-
.../README.md | 0
.../Fallout.Build.Tests/BuildExecutorTest.cs | 1 +
.../ArchitectureFitnessTests.cs | 37 +++++++++++--------
.../Fallout.Domain.Tests.csproj} | 2 +-
.../TopoSortTests.cs | 4 +-
...nGeneratorTest.Test#Solution.g.verified.cs | 4 +-
24 files changed, 49 insertions(+), 36 deletions(-)
rename src/{Fallout.Core => Fallout.Domain}/Execution/ExecutionStatus.cs (80%)
rename src/{Fallout.Core => Fallout.Domain}/Execution/ITargetModel.cs (97%)
rename src/{Fallout.Core/Fallout.Core.csproj => Fallout.Domain/Fallout.Domain.csproj} (100%)
rename src/{Fallout.Core => Fallout.Domain}/Planning/Graph/StronglyConnectedComponent.cs (94%)
rename src/{Fallout.Core => Fallout.Domain}/Planning/Graph/StronglyConnectedComponentFinder.cs (97%)
rename src/{Fallout.Core => Fallout.Domain}/Planning/Graph/StronglyConnectedComponentList.cs (96%)
rename src/{Fallout.Core => Fallout.Domain}/Planning/Graph/Vertex.cs (95%)
rename src/{Fallout.Core => Fallout.Domain}/Planning/TopoSort.cs (99%)
rename src/{Fallout.Core => Fallout.Domain}/README.md (100%)
rename tests/{Fallout.Core.Tests => Fallout.Domain.Tests}/ArchitectureFitnessTests.cs (54%)
rename tests/{Fallout.Core.Tests/Fallout.Core.Tests.csproj => Fallout.Domain.Tests/Fallout.Domain.Tests.csproj} (74%)
rename tests/{Fallout.Core.Tests => Fallout.Domain.Tests}/TopoSortTests.cs (97%)
diff --git a/fallout.slnx b/fallout.slnx
index 0f6ae9699..ad895155c 100644
--- a/fallout.slnx
+++ b/fallout.slnx
@@ -13,7 +13,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
diff --git a/src/Fallout.Build/Execution/BuildExecutor.cs b/src/Fallout.Build/Execution/BuildExecutor.cs
index 5f8869dae..b1cb733ee 100644
--- a/src/Fallout.Build/Execution/BuildExecutor.cs
+++ b/src/Fallout.Build/Execution/BuildExecutor.cs
@@ -5,6 +5,7 @@
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Domain.Execution;
using Serilog;
namespace Fallout.Common.Execution;
diff --git a/src/Fallout.Build/Execution/BuildManager.cs b/src/Fallout.Build/Execution/BuildManager.cs
index 5925fceca..f0d8daefc 100644
--- a/src/Fallout.Build/Execution/BuildManager.cs
+++ b/src/Fallout.Build/Execution/BuildManager.cs
@@ -8,6 +8,7 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Domain.Execution;
using Serilog;
#pragma warning disable CA2255
diff --git a/src/Fallout.Build/Execution/ExecutableTarget.cs b/src/Fallout.Build/Execution/ExecutableTarget.cs
index c4a9501c2..64bcde8c0 100644
--- a/src/Fallout.Build/Execution/ExecutableTarget.cs
+++ b/src/Fallout.Build/Execution/ExecutableTarget.cs
@@ -6,6 +6,7 @@
using System.Reflection;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Collections;
+using Fallout.Domain.Execution;
// ReSharper disable MissingBaseTypeHighlighting
namespace Fallout.Common.Execution;
@@ -62,7 +63,7 @@ public string OnlyWhen
set => SummaryInformation.AddPairWhenValueNotNull(nameof(OnlyWhen), value);
}
- // ITargetModel — read-only projection over the live dependency lists for Fallout.Core consumers.
+ // ITargetModel — read-only projection over the live dependency lists for Fallout.Domain consumers.
IReadOnlyCollection ITargetModel.ExecutionDependencyNames => ExecutionDependencies.Select(x => x.Name).ToList();
IReadOnlyCollection ITargetModel.OrderDependencyNames => OrderDependencies.Select(x => x.Name).ToList();
IReadOnlyCollection ITargetModel.TriggerNames => Triggers.Select(x => x.Name).ToList();
diff --git a/src/Fallout.Build/Execution/ExecutionPlanner.cs b/src/Fallout.Build/Execution/ExecutionPlanner.cs
index 67d3f6cd9..16450deca 100644
--- a/src/Fallout.Build/Execution/ExecutionPlanner.cs
+++ b/src/Fallout.Build/Execution/ExecutionPlanner.cs
@@ -3,7 +3,8 @@
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
-using Fallout.Core.Planning;
+using Fallout.Domain.Execution;
+using Fallout.Domain.Planning;
namespace Fallout.Common.Execution;
@@ -39,7 +40,7 @@ private static IReadOnlyCollection GetExecutionPlanInternal(
IReadOnlyCollection executableTargets,
ICollection invokedTargets)
{
- // Pure graph work — cycle detection and topological ordering — lives in Fallout.Core.
+ // Pure graph work — cycle detection and topological ordering — lives in Fallout.Domain.
// Everything below is orchestration: deciding to fail the build, and applying the domain
// scheduling rules (invoked / default / execution-dependency) over the ordered nodes.
var strict = ParameterService.GetNamedArgument("strict");
diff --git a/src/Fallout.Build/Execution/ExecutionStatus.cs b/src/Fallout.Build/Execution/ExecutionStatus.cs
index f98f50e1d..cecef623f 100644
--- a/src/Fallout.Build/Execution/ExecutionStatus.cs
+++ b/src/Fallout.Build/Execution/ExecutionStatus.cs
@@ -1,6 +1,6 @@
using System.Runtime.CompilerServices;
// Moved to Fallout.Core in v11 (issue #88). Forwarded so existing consumers that reference
-// Fallout.Build keep resolving Fallout.Common.Execution.ExecutionStatus without a recompile.
+// Fallout.Build keep resolving Fallout.Domain.Execution.ExecutionStatus without a recompile.
// The forwarder can be dropped in 12.0 once the plugin SDK is the canonical reference.
-[assembly: TypeForwardedTo(typeof(Fallout.Common.Execution.ExecutionStatus))]
+[assembly: TypeForwardedTo(typeof(Fallout.Domain.Execution.ExecutionStatus))]
diff --git a/src/Fallout.Build/Fallout.Build.csproj b/src/Fallout.Build/Fallout.Build.csproj
index ea2b968c3..530b59d60 100644
--- a/src/Fallout.Build/Fallout.Build.csproj
+++ b/src/Fallout.Build/Fallout.Build.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/src/Fallout.Build/FalloutBuild.cs b/src/Fallout.Build/FalloutBuild.cs
index af8573875..9f00da1f6 100644
--- a/src/Fallout.Build/FalloutBuild.cs
+++ b/src/Fallout.Build/FalloutBuild.cs
@@ -6,6 +6,7 @@
using Fallout.Build.Execution.Extensions;
using Fallout.Common.CI;
using Fallout.Common.Execution;
+using Fallout.Domain.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
diff --git a/src/Fallout.Build/Host.cs b/src/Fallout.Build/Host.cs
index b5e147813..413cb6bb9 100644
--- a/src/Fallout.Build/Host.cs
+++ b/src/Fallout.Build/Host.cs
@@ -3,6 +3,7 @@
using System.Globalization;
using System.Linq;
using Fallout.Common.Execution;
+using Fallout.Domain.Execution;
using Fallout.Common.Execution.Theming;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
diff --git a/src/Fallout.Build/Telemetry/Telemetry.Events.cs b/src/Fallout.Build/Telemetry/Telemetry.Events.cs
index abe85de67..ee01b590e 100644
--- a/src/Fallout.Build/Telemetry/Telemetry.Events.cs
+++ b/src/Fallout.Build/Telemetry/Telemetry.Events.cs
@@ -3,6 +3,7 @@
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Domain.Execution;
using Serilog;
namespace Fallout.Common.Execution;
diff --git a/src/Fallout.Core/Execution/ExecutionStatus.cs b/src/Fallout.Domain/Execution/ExecutionStatus.cs
similarity index 80%
rename from src/Fallout.Core/Execution/ExecutionStatus.cs
rename to src/Fallout.Domain/Execution/ExecutionStatus.cs
index d48c5a0e9..0de85014e 100644
--- a/src/Fallout.Core/Execution/ExecutionStatus.cs
+++ b/src/Fallout.Domain/Execution/ExecutionStatus.cs
@@ -1,4 +1,4 @@
-namespace Fallout.Common.Execution;
+namespace Fallout.Domain.Execution;
public enum ExecutionStatus
{
diff --git a/src/Fallout.Core/Execution/ITargetModel.cs b/src/Fallout.Domain/Execution/ITargetModel.cs
similarity index 97%
rename from src/Fallout.Core/Execution/ITargetModel.cs
rename to src/Fallout.Domain/Execution/ITargetModel.cs
index de86178a9..29685f6ae 100644
--- a/src/Fallout.Core/Execution/ITargetModel.cs
+++ b/src/Fallout.Domain/Execution/ITargetModel.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
-namespace Fallout.Common.Execution;
+namespace Fallout.Domain.Execution;
///
/// Read-only projection of a build target: its identity, status, and dependency shape.
diff --git a/src/Fallout.Core/Fallout.Core.csproj b/src/Fallout.Domain/Fallout.Domain.csproj
similarity index 100%
rename from src/Fallout.Core/Fallout.Core.csproj
rename to src/Fallout.Domain/Fallout.Domain.csproj
diff --git a/src/Fallout.Core/Planning/Graph/StronglyConnectedComponent.cs b/src/Fallout.Domain/Planning/Graph/StronglyConnectedComponent.cs
similarity index 94%
rename from src/Fallout.Core/Planning/Graph/StronglyConnectedComponent.cs
rename to src/Fallout.Domain/Planning/Graph/StronglyConnectedComponent.cs
index 81d171e0c..1c7322cf2 100644
--- a/src/Fallout.Core/Planning/Graph/StronglyConnectedComponent.cs
+++ b/src/Fallout.Domain/Planning/Graph/StronglyConnectedComponent.cs
@@ -1,7 +1,7 @@
using System.Collections;
using System.Collections.Generic;
-namespace Fallout.Core.Planning;
+namespace Fallout.Domain.Planning;
internal class StronglyConnectedComponent : IEnumerable>
{
diff --git a/src/Fallout.Core/Planning/Graph/StronglyConnectedComponentFinder.cs b/src/Fallout.Domain/Planning/Graph/StronglyConnectedComponentFinder.cs
similarity index 97%
rename from src/Fallout.Core/Planning/Graph/StronglyConnectedComponentFinder.cs
rename to src/Fallout.Domain/Planning/Graph/StronglyConnectedComponentFinder.cs
index 11489cf60..9a7d9a538 100644
--- a/src/Fallout.Core/Planning/Graph/StronglyConnectedComponentFinder.cs
+++ b/src/Fallout.Domain/Planning/Graph/StronglyConnectedComponentFinder.cs
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
-namespace Fallout.Core.Planning;
+namespace Fallout.Domain.Planning;
internal class StronglyConnectedComponentFinder
{
diff --git a/src/Fallout.Core/Planning/Graph/StronglyConnectedComponentList.cs b/src/Fallout.Domain/Planning/Graph/StronglyConnectedComponentList.cs
similarity index 96%
rename from src/Fallout.Core/Planning/Graph/StronglyConnectedComponentList.cs
rename to src/Fallout.Domain/Planning/Graph/StronglyConnectedComponentList.cs
index f2ea8f557..998f9458f 100644
--- a/src/Fallout.Core/Planning/Graph/StronglyConnectedComponentList.cs
+++ b/src/Fallout.Domain/Planning/Graph/StronglyConnectedComponentList.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Linq;
-namespace Fallout.Core.Planning;
+namespace Fallout.Domain.Planning;
internal class StronglyConnectedComponentList : IEnumerable>
{
diff --git a/src/Fallout.Core/Planning/Graph/Vertex.cs b/src/Fallout.Domain/Planning/Graph/Vertex.cs
similarity index 95%
rename from src/Fallout.Core/Planning/Graph/Vertex.cs
rename to src/Fallout.Domain/Planning/Graph/Vertex.cs
index 2819a4122..1347d2ed6 100644
--- a/src/Fallout.Core/Planning/Graph/Vertex.cs
+++ b/src/Fallout.Domain/Planning/Graph/Vertex.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Linq;
-namespace Fallout.Core.Planning;
+namespace Fallout.Domain.Planning;
internal class Vertex
{
diff --git a/src/Fallout.Core/Planning/TopoSort.cs b/src/Fallout.Domain/Planning/TopoSort.cs
similarity index 99%
rename from src/Fallout.Core/Planning/TopoSort.cs
rename to src/Fallout.Domain/Planning/TopoSort.cs
index eb0299f2f..d52abe3e2 100644
--- a/src/Fallout.Core/Planning/TopoSort.cs
+++ b/src/Fallout.Domain/Planning/TopoSort.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Linq;
-namespace Fallout.Core.Planning;
+namespace Fallout.Domain.Planning;
///
/// The outcome of a topological ordering: the ordered nodes, any dependency cycles that were
diff --git a/src/Fallout.Core/README.md b/src/Fallout.Domain/README.md
similarity index 100%
rename from src/Fallout.Core/README.md
rename to src/Fallout.Domain/README.md
diff --git a/tests/Fallout.Build.Tests/BuildExecutorTest.cs b/tests/Fallout.Build.Tests/BuildExecutorTest.cs
index 98728a01b..d4ed53e86 100644
--- a/tests/Fallout.Build.Tests/BuildExecutorTest.cs
+++ b/tests/Fallout.Build.Tests/BuildExecutorTest.cs
@@ -2,6 +2,7 @@
using System.Linq;
using FluentAssertions;
using Fallout.Common.Execution;
+using Fallout.Domain.Execution;
using Fallout.Common.Utilities.Collections;
using Xunit;
diff --git a/tests/Fallout.Core.Tests/ArchitectureFitnessTests.cs b/tests/Fallout.Domain.Tests/ArchitectureFitnessTests.cs
similarity index 54%
rename from tests/Fallout.Core.Tests/ArchitectureFitnessTests.cs
rename to tests/Fallout.Domain.Tests/ArchitectureFitnessTests.cs
index d4aed0960..3bf3c9ffc 100644
--- a/tests/Fallout.Core.Tests/ArchitectureFitnessTests.cs
+++ b/tests/Fallout.Domain.Tests/ArchitectureFitnessTests.cs
@@ -1,23 +1,23 @@
using System.Linq;
using System.Reflection;
using FluentAssertions;
-using Fallout.Core.Planning;
+using Fallout.Domain.Planning;
using NetArchTest.Rules;
using Xunit;
-namespace Fallout.Core.Tests;
+namespace Fallout.Domain.Tests;
///
-/// The acceptance criterion for issue #88: Fallout.Core is the pure reactor core. It depends on
-/// nothing in the repo and never touches I/O, processes, the console, or logging. The broader
-/// architecture-fitness suite lands in #95; these two tests guard the Core invariant specifically.
+/// Fallout.Domain is the innermost onion ring (ADR-0006; originally issue #88's "reactor core"):
+/// pure domain types and graph algorithms that touch no I/O and depend on nothing else in the repo.
+/// These tests guard that invariant — the dependency rule every outer ring builds on.
///
public class ArchitectureFitnessTests
{
- private static readonly Assembly CoreAssembly = typeof(TopoSort).Assembly;
+ private static readonly Assembly DomainAssembly = typeof(TopoSort).Assembly;
[Fact]
- public void Core_has_no_io_process_console_or_logging_dependency()
+ public void Domain_has_no_io_process_console_or_logging_dependency()
{
// Scope to our own Fallout.* types only. This excludes build-tool noise injected into the
// assembly that we don't author and can't keep pure: the generated `ThisAssembly`
@@ -25,7 +25,7 @@ public void Core_has_no_io_process_console_or_logging_dependency()
// (coverage instrumentation under `./build.ps1 Test`, which legitimately touches System.IO).
// Precise tokens (e.g. "System.Diagnostics.Process") rather than the broad "System.Diagnostics"
// namespace also avoid NetArchTest false-positives on generic types.
- var result = Types.InAssembly(CoreAssembly)
+ var result = Types.InAssembly(DomainAssembly)
.That().ResideInNamespaceStartingWith("Fallout")
.Should()
.NotHaveDependencyOnAny(
@@ -36,26 +36,31 @@ public void Core_has_no_io_process_console_or_logging_dependency()
.GetResult();
result.IsSuccessful.Should().BeTrue(
- because: "Fallout.Core must stay pure; offending types: " + FailingTypes(result));
+ because: "Fallout.Domain must stay pure; offending types: " + FailingTypes(result));
}
[Fact]
- public void Core_does_not_depend_on_higher_fallout_layers()
+ public void Domain_does_not_depend_on_any_outer_ring()
{
- var result = Types.InAssembly(CoreAssembly)
+ // ADR-0006 onion rule: the innermost ring references no outer ring — and crucially none of the
+ // dissolving `Fallout.Common.*` catch-all (the whole point of the realignment) nor the
+ // Application/Infrastructure rings to come.
+ var result = Types.InAssembly(DomainAssembly)
.That().ResideInNamespaceStartingWith("Fallout")
.Should()
.NotHaveDependencyOnAny(
+ "Fallout.Common",
+ "Fallout.Application",
+ "Fallout.Infrastructure",
"Fallout.Build",
- "Fallout.Common.Tooling",
- "Fallout.Common.Utilities",
- "Fallout.ProjectModel",
+ "Fallout.Components",
"Fallout.Tooling",
- "Fallout.Utilities")
+ "Fallout.Utilities",
+ "Fallout.ProjectModel")
.GetResult();
result.IsSuccessful.Should().BeTrue(
- because: "Fallout.Core sits at the bottom and must reference no other Fallout project; " +
+ because: "Fallout.Domain is the innermost ring and must reference no other Fallout project; " +
"offending types: " + FailingTypes(result));
}
diff --git a/tests/Fallout.Core.Tests/Fallout.Core.Tests.csproj b/tests/Fallout.Domain.Tests/Fallout.Domain.Tests.csproj
similarity index 74%
rename from tests/Fallout.Core.Tests/Fallout.Core.Tests.csproj
rename to tests/Fallout.Domain.Tests/Fallout.Domain.Tests.csproj
index fdb7ca21c..b700dfec4 100644
--- a/tests/Fallout.Core.Tests/Fallout.Core.Tests.csproj
+++ b/tests/Fallout.Domain.Tests/Fallout.Domain.Tests.csproj
@@ -5,7 +5,7 @@
-
+
diff --git a/tests/Fallout.Core.Tests/TopoSortTests.cs b/tests/Fallout.Domain.Tests/TopoSortTests.cs
similarity index 97%
rename from tests/Fallout.Core.Tests/TopoSortTests.cs
rename to tests/Fallout.Domain.Tests/TopoSortTests.cs
index bbc93cd96..b281d569c 100644
--- a/tests/Fallout.Core.Tests/TopoSortTests.cs
+++ b/tests/Fallout.Domain.Tests/TopoSortTests.cs
@@ -1,10 +1,10 @@
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
-using Fallout.Core.Planning;
+using Fallout.Domain.Planning;
using Xunit;
-namespace Fallout.Core.Tests;
+namespace Fallout.Domain.Tests;
public class TopoSortTests
{
diff --git a/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs b/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs
index 2dec22605..18855dfd8 100644
--- a/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs
+++ b/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs
@@ -20,8 +20,8 @@ internal class Solution(SolutionModel model, AbsolutePath path) : Fallout.Soluti
public Fallout.Solutions.Project Fallout_Components_Tests => this.GetProject("Fallout.Components.Tests");
public Fallout.Solutions.Project Fallout_Consumer_Local => this.GetProject("Fallout.Consumer.Local");
public Fallout.Solutions.Project Fallout_Consumer_NuGet => this.GetProject("Fallout.Consumer.NuGet");
- public Fallout.Solutions.Project Fallout_Core => this.GetProject("Fallout.Core");
- public Fallout.Solutions.Project Fallout_Core_Tests => this.GetProject("Fallout.Core.Tests");
+ public Fallout.Solutions.Project Fallout_Domain => this.GetProject("Fallout.Domain");
+ public Fallout.Solutions.Project Fallout_Domain_Tests => this.GetProject("Fallout.Domain.Tests");
public Fallout.Solutions.Project Fallout_Migrate => this.GetProject("Fallout.Migrate");
public Fallout.Solutions.Project Fallout_Migrate_Analyzers => this.GetProject("Fallout.Migrate.Analyzers");
public Fallout.Solutions.Project Fallout_Migrate_Analyzers_Tests => this.GetProject("Fallout.Migrate.Analyzers.Tests");
From 259c058d60625b866f96e24b9fe254346cfa0fcf Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 21:20:55 +1200
Subject: [PATCH 05/46] =?UTF-8?q?docs:=20spike=200002=20verdict=20?=
=?UTF-8?q?=E2=80=94=20Domain=20ring=20extracted,=20mechanics=20proven?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-Authored-By: Claude Opus 4.8
---
docs/spikes/0002-onion-domain-ring.md | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/docs/spikes/0002-onion-domain-ring.md b/docs/spikes/0002-onion-domain-ring.md
index 1d483278a..336dde2dc 100644
--- a/docs/spikes/0002-onion-domain-ring.md
+++ b/docs/spikes/0002-onion-domain-ring.md
@@ -1,6 +1,6 @@
# Spike 0002 — Onion realignment: prove the Domain ring
-- **Status:** Planned
+- **Status:** Done (2026-05-31) — see [Verdict](#verdict)
- **Date:** 2026-05-31
- **Decision record:** [ADR-0006](../adr/0006-onion-layering-and-namespace-realignment.md)
- **Channel:** `experimental` (spike branch `spike/onion-structure`)
@@ -47,3 +47,23 @@
## Exit
Set **Status: Done**, append the verdict, and feed it back into ADR-0006 (confirm/adjust the layer mapping, then promote `Proposed` → `Accepted`) before starting the Application ring.
+
+## Verdict
+
+**Hypothesis confirmed.** The move → reference-fixup → fitness loop holds. `Fallout.Domain` exists, no domain type remains under `Fallout.Common.*`, the solution builds, and the **full test suite passes** (every project, including the `Nuke.*` shim tests).
+
+**What landed (commit `refactor(arch)!: extract Fallout.Domain ring`):**
+- `Fallout.Core` → `Fallout.Domain` (project + test project, via `git mv`); refs in `Fallout.Build.csproj`, the test csproj, and `fallout.slnx` updated.
+- The two mis-namespaced execution types (`ITargetModel`, `ExecutionStatus`) moved out of `Fallout.Common.Execution` → `Fallout.Domain.Execution`; `Fallout.Core.Planning` → `Fallout.Domain.Planning`.
+- 8 consumers in `Fallout.Build`/tests gained `using Fallout.Domain.Execution;`; the intra-repo `ExecutionStatus` **type-forwarder re-pointed**.
+- Fitness test **strengthened**: Domain must depend on no outer ring *including `Fallout.Common`* (the realignment goal). Passes; proven red on an injected dependency, then reverted.
+
+**Findings that shape the bigger rings:**
+1. **Head start that won't repeat.** `Fallout.Core` was already pure with an existing fitness test (issue #88's seed). The Domain ring was therefore a *rename*, not a purity fight. The Application/Infrastructure rings start from the `Fallout.Common.*` tangle — expect real work, not just renames.
+2. **Shim breakage is SILENT, not fatal — good news for the deferred strategy.** Moving types out of `Fallout.Common.*` doesn't fail the shim build; the `TransitionShimGenerator` simply stops mirroring them into `Nuke.*` (it only maps the `Fallout.Common` prefix). The solution built and the shim tests passed. So the rings won't be *blocked* by shim breakage — the `Nuke.*` surface just quietly shrinks, to be rebuilt by the deferred migration phase. **Caveat:** this was 2 types (one an enum the generator skips anyway). The **Application ring** moves the user-facing API *en masse* — the silent surface reduction there will be large; still expected to be build-clean.
+3. **Blast radius beyond namespaces is real but mechanical.** Two non-obvious things needed updating: an **intra-repo type-forwarder** and a **Verify snapshot** (the solution-generator emits project names, so renaming projects churns it). The Application/Infrastructure rings will hit *many* more consumers and likely more snapshots — same loop, larger N.
+4. **Splitting a shared namespace costs double-usings.** Because `Fallout.Common.Execution` keeps its orchestration types (staying → future `Fallout.Application.Execution`) while the model types left, consumers need *both* usings transiently. The Application ring (whole-namespace move) should be more uniform but far larger — **worth a bulk using-rewrite tool** (or lean on the `Fallout.Migrate` codefix machinery).
+
+**Safe to scale to the Application ring** — the mechanics are proven. That ring is the big one (the user-facing `FalloutBuild`/`Target`/`[Parameter]` rename); recommend it as its own PR, with a bulk using-rewriter prepared first.
+
+*Residual nit:* `src/Fallout.Domain/README.md` may still contain `Fallout.Core` prose — cosmetic, sweep during the Application ring.
From 498d150bdfe3e8afea2ec3214c53227bb29f1d9d Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 21:44:57 +1200
Subject: [PATCH 06/46] docs: correct realignment target to the (unreleased)
2026 major; add CHANGELOG
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The 2026 major has not cut (no calendar GA tag; CHANGELOG [Unreleased] — 2026.0
still accumulates breaking changes), so breaking realignment work rides the 2026
cut and ships this year — not 2027 as ADR-0006 previously stated. Rings that miss
the 2026 cut roll to 2027. Adds the Domain-ring CHANGELOG entry.
Co-Authored-By: Claude Opus 4.8
---
CHANGELOG.md | 3 +++
docs/adr/0006-onion-layering-and-namespace-realignment.md | 8 ++++----
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 49a482d1a..c94dfb169 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Breaking changes
+- **Onion layering — namespace realignment begun; `Fallout.Core` → `Fallout.Domain`** ([ADR-0006](docs/adr/0006-onion-layering-and-namespace-realignment.md)). First ring of a project-wide realignment to explicit onion layers (`Fallout.Domain` / `Fallout.Application` / `Fallout.Infrastructure`, `Fallout.Cli` composition root) with `namespace = project = layer`, dissolving the `Fallout.Common.*` catch-all. This entry covers **step 1 (the Domain ring)**; the Application/Infrastructure/tooling-port rings land on `experimental` as separate PRs (any that miss the 2026 cut roll to 2027).
+ - **Namespaces**: `Fallout.Core.Planning` → `Fallout.Domain.Planning`; `ITargetModel` and `ExecutionStatus` move out of `Fallout.Common.Execution` → `Fallout.Domain.Execution`. **Package/assembly**: `Fallout.Core` → `Fallout.Domain`. Replace the corresponding `using` directives and any `PackageReference`/`ProjectReference`.
+ - **Migration / shim**: the `Nuke.*` transition shims silently stop re-exporting the two moved types (the generator only mirrors the `Fallout.Common.*` prefix). A fresh migration/shim strategy is designed once the realignment completes (ADR-0006 defers it deliberately); native `Fallout.*` consumers rewrite the two `using`s above.
- **Adopted calendar versioning (`YYYY.MINOR.PATCH`) + dual-pace channel model; retired the v11 numbering** ([ADR-0004](docs/adr/0004-calendar-versioning-and-dual-pace-channels.md)). Fallout now ships on calendar versions (`2026.0.0`, `2026.1.0`, …) — mechanically valid SemVer with the major equal to the calendar year. **Breaking changes are batched to the yearly major cut**; mid-year stable releases (`release/YYYY`) are strictly non-breaking. `main` becomes the published **edge** channel (date-stamped prereleases to GitHub Packages); the slow/stable track lives on `release/YYYY`. Opt-in unstable APIs are marked `[Experimental("FALLOUT0xx")]`.
- **Migration / impact**: the `11.0.x` packages never shipped a clean stable release (all unlisted), so this strands no stable consumers. The headline content previously slated for "v11" now ships as **`2026.0.0`**. Any tooling pinned to a `[11.0,12.0)`-style range should retarget the `2026.x` line.
- **Legacy unaffected**: the `release/v10` line stays on semver `10.x` and continues to receive security/critical fixes — v10 consumers do nothing.
diff --git a/docs/adr/0006-onion-layering-and-namespace-realignment.md b/docs/adr/0006-onion-layering-and-namespace-realignment.md
index c0f01f7f4..f4553cd68 100644
--- a/docs/adr/0006-onion-layering-and-namespace-realignment.md
+++ b/docs/adr/0006-onion-layering-and-namespace-realignment.md
@@ -19,7 +19,7 @@ The project + namespace structure is inherited verbatim from NUKE: the rebrand (
`docs/rebrand-plan.md` explicitly **defers** "realigning project ↔ namespace" to "a future major version after the shim packages have sunset," citing the type-forwarding bridge as the blocker. This ADR **amends that deferral** on two grounds:
- **The bridge is not a blocker.** The rebrand-plan deferred this work *because* it assumed a rigid `[TypeForwardedTo]` bridge. The actual machinery is the `TransitionShimGenerator` (`ShimAllPublicTypesUnder(from, to)`), a *prefix-remappable* subclass generator — so restructuring `Fallout.*` doesn't orphan the `Nuke.*` surface in principle. We nonetheless **defer the migration strategy wholesale** (see Decision §"Migration & shim strategy") rather than re-point ring-by-ring; the point here is only that the stated blocker doesn't bind.
-- **ADR-0004 gives a clean home.** Namespace realignment is breaking → it lands on `experimental` and is **batched to the `2027.0.0` yearly major**. The work happens in 2026; native `Fallout.*` consumers are carried by re-pointed shims + the `Fallout.Migrate` codefix. Old `Fallout.*` namespaces are deleted at the cut, not dragged.
+- **ADR-0004 gives a clean home.** Namespace realignment is breaking → it lands on `experimental` and is **batched to the next yearly major cut**. The `2026` major has **not cut yet** (no calendar-version GA tag exists; CHANGELOG `[Unreleased] — 2026.0` is still accumulating breaking changes), so this work can ride the **2026** cut and ship this year. Rings that aren't done before `2026.0.0` cuts roll to `2027`. Either way native `Fallout.*` consumers are carried by the deferred migration phase; old `Fallout.*` namespaces are deleted at the cut, not dragged.
(The rebrand-plan is a transient maintainer-owned doc; this is a deliberate, recorded reversal of one of its deferrals, not a silent contradiction.)
@@ -41,7 +41,7 @@ The project + namespace structure is inherited verbatim from NUKE: the rebrand (
**Rules:**
1. **`namespace == project == layer`.** No project declares a namespace rooted outside its layer. `Fallout.Common` is **dissolved**.
2. **Onion dependency rule, fitness-enforced.** Domain references no other Fallout assembly; Application references only Domain; Infrastructure references Application/Domain; only the Cli composition root references Infrastructure. One architecture-test per ring, added as each ring lands (extends the ADR-0005 boundary-test pattern).
-3. **Breaking → `experimental` → `2027.0.0`** (ADR-0004). A breaking PR targets `experimental` only and carries `target/2027` + `breaking-change` + a `CHANGELOG.md` migration entry.
+3. **Breaking → `experimental` → the next yearly major** (ADR-0004). The `2026` major is still unreleased, so rings ride the **2026** cut (`target/2026`) until it closes; anything after rolls to `2027`. A breaking PR targets `experimental` only and carries `target/` + `breaking-change` + a `CHANGELOG.md` entry under that major.
4. **Ring-by-ring migration**, inner to outer — each ring is its own PR on `experimental`. The spike (0002) proves the mechanics on the Domain ring before the larger rings.
5. **Migration/shim strategy is deferred wholesale** — see below.
@@ -49,7 +49,7 @@ The project + namespace structure is inherited verbatim from NUKE: the rebrand (
The `Nuke.*` transition shims (and any native-`Fallout.*` migration aid) are **explicitly out of scope for the rearchitecture rings.** Rationale: there's no point re-pointing the existing `TransitionShimGenerator` ring-by-ring toward a target that's still moving. Instead — once the final layered shape has settled — we design a **fresh migration/shim strategy that fits whatever we ended up with**, as its own phase and its own ADR. The existing bridge is re-pointable (it's a prefix-remappable subclass generator, not raw `[TypeForwardedTo]`), so this deferral costs us no future optionality; it's a sequencing choice, not a capability loss.
-Consequence during the work: on `experimental`, `Nuke.*` shim parity is **not maintained** while the rings land. That's acceptable — `experimental` is the unstable lane, and `2027.0.0` is the only deadline that matters; the new migration story is built before the cut. `Fallout.Migrate` likewise gets revisited then, not incrementally.
+Consequence during the work: on `experimental`, `Nuke.*` shim parity is **not maintained** while the rings land. That's acceptable — `experimental` is the unstable lane, and the only deadline that matters is the major cut the rings target; the new migration story is built before that cut. `Fallout.Migrate` likewise gets revisited then, not incrementally.
### Sequence (each step a PR on `experimental`, with its own ring fitness test)
@@ -76,7 +76,7 @@ Migration/shim strategy is redesigned after step 5, before the cut (deferred, ab
### Negative
- **Large, breaking, multi-PR.** Touches nearly every file's `namespace`/`using`. Mitigated by ring-by-ring sequencing, re-pointed shims, the migrate codefix, and batching to one yearly major.
-- **Consumer churn** for native `Fallout.*` users, and a window on `experimental` where `Nuke.*` shim parity lapses. Both are carried by the deferred migration phase (a fresh strategy + CHANGELOG migration guide), built before the `2027.0.0` cut — not during the rings.
+- **Consumer churn** for native `Fallout.*` users, and a window on `experimental` where `Nuke.*` shim parity lapses. Both are carried by the deferred migration phase (a fresh strategy + CHANGELOG migration guide), built before the target major cut — not during the rings.
## Alternatives considered
From c88b7a7a0ba4317fe21c2ba4ff10ce3839f1d1dd Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 22:09:00 +1200
Subject: [PATCH 07/46] =?UTF-8?q?tooling:=20add=20OnionRewriter=20(dry-run?=
=?UTF-8?q?)=20=E2=80=94=20scopes=20the=20Application=20ring?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Roslyn syntax tool for the ADR-0006 namespace moves: rewrites namespace decls in
the source project + qualified refs to moved types, and fixes usings by type
identity. Dry-run quantifies the Application ring: 91 moved types across ~392
files.
Finding: syntactic reference-resolution is not precise enough for a clean apply —
simple-name collisions across namespaces (e.g. lower layers like ProjectModel
matching a moved type's name) cause spurious usings and risk CS0104 ambiguities.
The namespace-decl + qualified-name passes are correct; the using fixup needs a
semantic upgrade (MSBuildWorkspace + symbol resolution) before applying. Dry-run
only; mutates nothing.
Co-Authored-By: Claude Opus 4.8
---
tools/OnionRewriter/OnionRewriter.csproj | 18 +++
tools/OnionRewriter/Program.cs | 172 +++++++++++++++++++++++
2 files changed, 190 insertions(+)
create mode 100644 tools/OnionRewriter/OnionRewriter.csproj
create mode 100644 tools/OnionRewriter/Program.cs
diff --git a/tools/OnionRewriter/OnionRewriter.csproj b/tools/OnionRewriter/OnionRewriter.csproj
new file mode 100644
index 000000000..857a12404
--- /dev/null
+++ b/tools/OnionRewriter/OnionRewriter.csproj
@@ -0,0 +1,18 @@
+
+
+
+
+ Exe
+ net10.0
+ enable
+ enable
+ false
+
+
+
+
+
+
+
diff --git a/tools/OnionRewriter/Program.cs b/tools/OnionRewriter/Program.cs
new file mode 100644
index 000000000..2f062553d
--- /dev/null
+++ b/tools/OnionRewriter/Program.cs
@@ -0,0 +1,172 @@
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+
+// OnionRewriter — ADR-0006. Moves every type declared in a source project out of an old namespace
+// prefix into a new one, and fixes references across the repo. The hard part it exists for: the old
+// root namespace (Fallout.Common) is shared across several projects, so it disambiguates per file by
+// the *types actually referenced* — adding/keeping/dropping `using`s accordingly. Biased to
+// over-approximate (extra usings are harmless; the compiler catches any genuine miss).
+//
+// Usage: dotnet run --project tools/OnionRewriter [-- --apply]
+// (default = dry run: report only, mutate nothing)
+
+var apply = args.Contains("--apply");
+var repo = Directory.GetCurrentDirectory();
+var sourceProj = Path.Combine(repo, "src", "Fallout.Build") + Path.DirectorySeparatorChar;
+
+const string OldRoot = "Fallout.Common";
+const string NewRoot = "Fallout.Application";
+const string OldExt = "Fallout.Build.Execution.Extensions";
+const string NewExt = "Fallout.Application.Execution.Extensions";
+
+bool IsMovable(string ns) => ns == OldRoot || ns.StartsWith(OldRoot + ".") || ns == OldExt || ns.StartsWith(OldExt + ".");
+string MapNs(string ns) =>
+ ns == OldRoot || ns.StartsWith(OldRoot + ".") ? NewRoot + ns[OldRoot.Length..]
+ : ns == OldExt || ns.StartsWith(OldExt + ".") ? NewExt + ns[OldExt.Length..]
+ : ns;
+
+IEnumerable CsFiles(params string[] roots) =>
+ roots.Where(Directory.Exists)
+ .SelectMany(r => Directory.EnumerateFiles(r, "*.cs", SearchOption.AllDirectories))
+ .Where(p => !p.Contains($"{Path.DirectorySeparatorChar}obj{Path.DirectorySeparatorChar}")
+ && !p.Contains($"{Path.DirectorySeparatorChar}bin{Path.DirectorySeparatorChar}")
+ && !p.Contains($"{Path.DirectorySeparatorChar}.claude{Path.DirectorySeparatorChar}")
+ && !p.Contains($"{Path.DirectorySeparatorChar}vendor{Path.DirectorySeparatorChar}"));
+
+static string? NsOf(SyntaxNode n) =>
+ n.Ancestors().OfType().FirstOrDefault()?.Name.ToString();
+
+// True when a name appears in a type position (so an added `using` is warranted). Excludes the
+// member name in `x.Foo` and the bare call target in `Foo(...)` — the main false-positive sources.
+static bool IsTypePosition(SimpleNameSyntax n) =>
+ !(n.Parent is MemberAccessExpressionSyntax ma && ma.Name == n)
+ && !(n.Parent is InvocationExpressionSyntax inv && inv.Expression == n);
+
+IEnumerable<(string Name, string Ns)> TopLevelTypes(SyntaxNode root)
+{
+ foreach (var t in root.DescendantNodes().OfType())
+ if (t.Parent is BaseNamespaceDeclarationSyntax && NsOf(t) is { } ns)
+ yield return (t.Identifier.Text, ns);
+ foreach (var d in root.DescendantNodes().OfType())
+ if (d.Parent is BaseNamespaceDeclarationSyntax && NsOf(d) is { } ns)
+ yield return (d.Identifier.Text, ns);
+}
+
+// Pass A — types declared in the source project under a movable namespace (these MOVE).
+var movedTypes = new Dictionary(); // simpleName -> new namespace
+var movedNamespaces = new HashSet(); // old movable namespaces actually present
+foreach (var f in CsFiles(sourceProj))
+ foreach (var (name, ns) in TopLevelTypes(CSharpSyntaxTree.ParseText(File.ReadAllText(f)).GetRoot()))
+ if (IsMovable(ns)) { movedTypes[name] = MapNs(ns); movedNamespaces.Add(ns); }
+
+// Pass B — types under Fallout.Common.* declared OUTSIDE the source project (these STAY = residual).
+var residualByNs = new Dictionary>();
+foreach (var f in CsFiles(Path.Combine(repo, "src")))
+{
+ if (f.StartsWith(sourceProj, StringComparison.Ordinal)) continue;
+ foreach (var (name, ns) in TopLevelTypes(CSharpSyntaxTree.ParseText(File.ReadAllText(f)).GetRoot()))
+ if (ns == OldRoot || ns.StartsWith(OldRoot + "."))
+ (residualByNs.TryGetValue(ns, out var s) ? s : residualByNs[ns] = new()).Add(name);
+}
+
+// Pass C — rewrite references repo-wide.
+int filesChanged = 0, usingsAdded = 0, usingsDropped = 0, nsDecls = 0;
+var samples = new List();
+
+foreach (var f in CsFiles(Path.Combine(repo, "src"), Path.Combine(repo, "tests"), Path.Combine(repo, "build")))
+{
+ var original = File.ReadAllText(f);
+ var cu = (CompilationUnitSyntax)CSharpSyntaxTree.ParseText(original).GetRoot();
+ var isSource = f.StartsWith(sourceProj, StringComparison.Ordinal);
+
+ // (1) Source-project files: rewrite their namespace declarations.
+ if (isSource)
+ {
+ var before = nsDecls;
+ cu = (CompilationUnitSyntax)new NsRewriter(IsMovable, MapNs, () => nsDecls++).Visit(cu);
+ if (nsDecls > before) { /* counted */ }
+ }
+
+ // (1b) Rewrite fully-qualified references to moved types (e.g. Fallout.Common.Execution.Foo).
+ cu = (CompilationUnitSyntax)new QualNameRewriter(IsMovable, MapNs, movedTypes).Visit(cu);
+
+ // (2) All files: fix usings by type identity.
+ // - DROP decision uses a BROAD reference set (every identifier) so we only ever over-keep — safe.
+ // - ADD decision uses a TYPE-POSITION-filtered set so we don't add usings for method/property
+ // names that merely collide with a moved type's simple name.
+ var referencedAll = cu.DescendantNodes().OfType().Select(n => n.Identifier.Text).ToHashSet();
+ var referencedTypes = cu.DescendantNodes().OfType().Where(IsTypePosition).Select(n => n.Identifier.Text).ToHashSet();
+ var fileNs = cu.DescendantNodes().OfType().FirstOrDefault()?.Name.ToString();
+
+ var keep = new List();
+ foreach (var u in cu.Usings)
+ {
+ var name = u.Name?.ToString();
+ if (name != null && movedNamespaces.Contains(name))
+ {
+ var residualUsed = residualByNs.TryGetValue(name, out var set) && set.Overlaps(referencedAll);
+ if (residualUsed) keep.Add(u); else usingsDropped++; // drop usings now empty of residual types
+ }
+ else keep.Add(u);
+ }
+
+ var needed = referencedTypes.Where(movedTypes.ContainsKey).Select(n => movedTypes[n]).Distinct();
+ foreach (var ns in needed)
+ {
+ if (ns == fileNs) continue;
+ if (keep.Any(u => u.Name?.ToString() == ns)) continue;
+ keep.Add(ParseCompilationUnit($"using {ns};\n").Usings[0]);
+ usingsAdded++;
+ }
+
+ cu = cu.WithUsings(List(keep));
+ var updated = cu.ToFullString();
+ if (updated != original)
+ {
+ filesChanged++;
+ if (samples.Count < 12) samples.Add(Path.GetRelativePath(repo, f));
+ if (apply) File.WriteAllText(f, updated);
+ }
+}
+
+Console.WriteLine($"OnionRewriter ({(apply ? "APPLY" : "dry-run")})");
+Console.WriteLine($" moved types : {movedTypes.Count}");
+Console.WriteLine($" moved namespaces : {string.Join(", ", movedNamespaces.OrderBy(x => x))}");
+Console.WriteLine($" residual namespaces: {string.Join(", ", residualByNs.Keys.OrderBy(x => x))}");
+Console.WriteLine($" files changed : {filesChanged}");
+Console.WriteLine($" namespace decls : {nsDecls}");
+Console.WriteLine($" usings added : {usingsAdded}");
+Console.WriteLine($" usings dropped : {usingsDropped}");
+Console.WriteLine($" sample files :\n {string.Join("\n ", samples)}");
+
+sealed class NsRewriter(Func isMovable, Func map, Action onHit) : CSharpSyntaxRewriter
+{
+ public override SyntaxNode? VisitNamespaceDeclaration(NamespaceDeclarationSyntax node) => Rewrite(node, base.VisitNamespaceDeclaration(node));
+ public override SyntaxNode? VisitFileScopedNamespaceDeclaration(FileScopedNamespaceDeclarationSyntax node) => Rewrite(node, base.VisitFileScopedNamespaceDeclaration(node));
+
+ private SyntaxNode? Rewrite(BaseNamespaceDeclarationSyntax original, SyntaxNode? visited)
+ {
+ var name = original.Name.ToString();
+ if (!isMovable(name) || visited is not BaseNamespaceDeclarationSyntax n) return visited;
+ onHit();
+ return n.WithName(SyntaxFactory.ParseName(map(name)).WithTriviaFrom(original.Name));
+ }
+}
+
+// Rewrites fully-qualified references like `Fallout.Common.Execution.Foo` → `Fallout.Application.Execution.Foo`,
+// but only when `Foo` is genuinely a moved type that lived in that namespace (guards against a same-named
+// type from a different moved namespace).
+sealed class QualNameRewriter(Func isMovable, Func map, IReadOnlyDictionary movedTypes) : CSharpSyntaxRewriter
+{
+ public override SyntaxNode? VisitQualifiedName(QualifiedNameSyntax node)
+ {
+ var visited = (QualifiedNameSyntax)base.VisitQualifiedName(node)!;
+ var left = node.Left.ToString();
+ var right = node.Right.Identifier.Text;
+ if (isMovable(left) && movedTypes.TryGetValue(right, out var newNs) && newNs == map(left))
+ return visited.WithLeft(SyntaxFactory.ParseName(map(left)).WithTriviaFrom(node.Left));
+ return visited;
+ }
+}
From 328ecbd4c2385511d11fd80dce029a9ae39aa5db Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 22:22:16 +1200
Subject: [PATCH 08/46] tooling: make OnionRewriter semantic (MSBuildWorkspace
+ symbol resolution)
Resolves each reference by the symbol it binds to, so namespace moves are precise:
no spurious usings, no CS0104. Opens csprojs individually (sidesteps .slnx). Drops
only usings orphaned by the move (leaves pre-existing unused usings alone). Dry-run
on the Application ring: 91 moved types, 238 files, 12 qualified refs.
Co-Authored-By: Claude Opus 4.8
---
tools/OnionRewriter/DocumentRewriter.cs | 97 +++++++++
tools/OnionRewriter/OnionRewriter.csproj | 10 +-
tools/OnionRewriter/Program.cs | 242 ++++++++---------------
3 files changed, 191 insertions(+), 158 deletions(-)
create mode 100644 tools/OnionRewriter/DocumentRewriter.cs
diff --git a/tools/OnionRewriter/DocumentRewriter.cs b/tools/OnionRewriter/DocumentRewriter.cs
new file mode 100644
index 000000000..59d98678b
--- /dev/null
+++ b/tools/OnionRewriter/DocumentRewriter.cs
@@ -0,0 +1,97 @@
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+
+static class DocumentRewriter
+{
+ public record struct Counts(bool Changed, int Refs, int Added, int Dropped, int NsDecls);
+
+ public static (SyntaxNode Root, Counts Counts) Rewrite(
+ SyntaxNode root, SemanticModel model, bool isSource,
+ Func isMovable, Func mapNs, Func isMoved)
+ {
+ var cu = (CompilationUnitSyntax)root;
+
+ // --- Semantic pre-scan: which movable-namespace types are USED here, as types? ---
+ var usedMovedNewNs = new HashSet(); // new namespaces we must import
+ var usedMovedOldNs = new HashSet(); // old namespaces a MOVED type was used from
+ var usedResidualMovableNs = new HashSet(); // old movable namespaces still needed (residual types)
+ foreach (var name in cu.DescendantNodes().OfType())
+ {
+ if (model.GetSymbolInfo(name).Symbol is not INamedTypeSymbol t) continue; // only type-position binds
+ var ns = t.OriginalDefinition.ContainingNamespace?.ToDisplayString() ?? "";
+ if (!isMovable(ns)) continue;
+ if (isMoved(t)) { usedMovedNewNs.Add(mapNs(ns)); usedMovedOldNs.Add(ns); }
+ else usedResidualMovableNs.Add(ns);
+ }
+
+ // The file's own namespaces (mapped) — never import those.
+ var ownNs = cu.DescendantNodes().OfType()
+ .Select(n => n.Name.ToString())
+ .Select(n => isSource && isMovable(n) ? mapNs(n) : n)
+ .ToHashSet();
+
+ // --- Stage 1: rewrite namespace declarations (source files) + qualified refs to moved types. ---
+ var rewriter = new SyntaxFixer(model, isSource, isMovable, mapNs, isMoved);
+ cu = (CompilationUnitSyntax)rewriter.Visit(cu)!;
+
+ // --- Stage 2: reconcile namespace `using` directives. ---
+ var keep = new List();
+ int dropped = 0;
+ foreach (var u in cu.Usings)
+ {
+ var name = u.Name?.ToString();
+ if (u.StaticKeyword.IsKind(SyntaxKind.None) && u.Alias is null && name != null && isMovable(name))
+ {
+ // Drop only `using`s orphaned BY THE MOVE — i.e. a moved type was imported from here and
+ // no residual type still is. Leave pre-existing unused usings alone (not our concern).
+ if (usedMovedOldNs.Contains(name) && !usedResidualMovableNs.Contains(name)) dropped++;
+ else keep.Add(u);
+ }
+ else keep.Add(u); // static/alias usings get their type names remapped in Stage 1
+ }
+ int added = 0;
+ foreach (var ns in usedMovedNewNs)
+ {
+ if (ownNs.Contains(ns)) continue;
+ if (keep.Any(u => u.StaticKeyword.IsKind(SyntaxKind.None) && u.Alias is null && u.Name?.ToString() == ns)) continue;
+ keep.Add(ParseCompilationUnit($"using {ns};\n").Usings[0]);
+ added++;
+ }
+ cu = cu.WithUsings(List(keep));
+
+ var changed = added > 0 || dropped > 0 || rewriter.Refs > 0 || rewriter.NsDecls > 0;
+ return (cu, new Counts(changed, rewriter.Refs, added, dropped, rewriter.NsDecls));
+ }
+
+ sealed class SyntaxFixer(SemanticModel model, bool isSource, Func isMovable, Func mapNs, Func isMoved)
+ : CSharpSyntaxRewriter
+ {
+ public int Refs, NsDecls;
+
+ public override SyntaxNode? VisitNamespaceDeclaration(NamespaceDeclarationSyntax node) => MapNamespace(node, base.VisitNamespaceDeclaration(node));
+ public override SyntaxNode? VisitFileScopedNamespaceDeclaration(FileScopedNamespaceDeclarationSyntax node) => MapNamespace(node, base.VisitFileScopedNamespaceDeclaration(node));
+
+ SyntaxNode? MapNamespace(BaseNamespaceDeclarationSyntax original, SyntaxNode? visited)
+ {
+ var name = original.Name.ToString();
+ if (!isSource || !isMovable(name) || visited is not BaseNamespaceDeclarationSyntax n) return visited;
+ NsDecls++;
+ return n.WithName(ParseName(mapNs(name)).WithTriviaFrom(original.Name));
+ }
+
+ public override SyntaxNode? VisitQualifiedName(QualifiedNameSyntax node)
+ {
+ var symbol = model.GetSymbolInfo(node).Symbol as INamedTypeSymbol;
+ var visited = (QualifiedNameSyntax)base.VisitQualifiedName(node)!;
+ if (symbol != null && isMoved(symbol))
+ {
+ var ns = symbol.OriginalDefinition.ContainingNamespace!.ToDisplayString();
+ Refs++;
+ return visited.WithLeft(ParseName(mapNs(ns)).WithTriviaFrom(visited.Left));
+ }
+ return visited;
+ }
+ }
+}
diff --git a/tools/OnionRewriter/OnionRewriter.csproj b/tools/OnionRewriter/OnionRewriter.csproj
index 857a12404..0278102a5 100644
--- a/tools/OnionRewriter/OnionRewriter.csproj
+++ b/tools/OnionRewriter/OnionRewriter.csproj
@@ -1,18 +1,22 @@
+ outside version.json's pathFilters. SEMANTIC mode: loads the real compilations via
+ MSBuildWorkspace and rewrites references by the symbol they actually bind to. Pins its own
+ package versions (central management off) so it doesn't perturb the product's version set. -->
Exe
net10.0
enable
enable
false
+ false
-
+
+
+
diff --git a/tools/OnionRewriter/Program.cs b/tools/OnionRewriter/Program.cs
index 2f062553d..a4ddcd5f3 100644
--- a/tools/OnionRewriter/Program.cs
+++ b/tools/OnionRewriter/Program.cs
@@ -1,172 +1,104 @@
+using System.Runtime.CompilerServices;
+using Microsoft.Build.Locator;
using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.CSharp;
-using Microsoft.CodeAnalysis.CSharp.Syntax;
-using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
-// OnionRewriter — ADR-0006. Moves every type declared in a source project out of an old namespace
-// prefix into a new one, and fixes references across the repo. The hard part it exists for: the old
-// root namespace (Fallout.Common) is shared across several projects, so it disambiguates per file by
-// the *types actually referenced* — adding/keeping/dropping `using`s accordingly. Biased to
-// over-approximate (extra usings are harmless; the compiler catches any genuine miss).
-//
-// Usage: dotnet run --project tools/OnionRewriter [-- --apply]
-// (default = dry run: report only, mutate nothing)
+// OnionRewriter (semantic) — ADR-0006. Moves every type declared in a source project out of an old
+// namespace prefix into a new one, and fixes references across the whole workspace by the symbol each
+// reference actually BINDS to (so simple-name collisions across namespaces resolve correctly — no
+// spurious usings, no CS0104). Rewrites: namespace declarations in the source project; qualified
+// references to moved types; and `using` directives (add the new namespace, drop the old where no
+// residual type is still used). Default = dry run (reports, mutates nothing). Pass --apply to write.
-var apply = args.Contains("--apply");
-var repo = Directory.GetCurrentDirectory();
-var sourceProj = Path.Combine(repo, "src", "Fallout.Build") + Path.DirectorySeparatorChar;
+MSBuildLocator.RegisterDefaults();
+return await Runner.RunAsync(args);
-const string OldRoot = "Fallout.Common";
-const string NewRoot = "Fallout.Application";
-const string OldExt = "Fallout.Build.Execution.Extensions";
-const string NewExt = "Fallout.Application.Execution.Extensions";
-
-bool IsMovable(string ns) => ns == OldRoot || ns.StartsWith(OldRoot + ".") || ns == OldExt || ns.StartsWith(OldExt + ".");
-string MapNs(string ns) =>
- ns == OldRoot || ns.StartsWith(OldRoot + ".") ? NewRoot + ns[OldRoot.Length..]
- : ns == OldExt || ns.StartsWith(OldExt + ".") ? NewExt + ns[OldExt.Length..]
- : ns;
-
-IEnumerable CsFiles(params string[] roots) =>
- roots.Where(Directory.Exists)
- .SelectMany(r => Directory.EnumerateFiles(r, "*.cs", SearchOption.AllDirectories))
- .Where(p => !p.Contains($"{Path.DirectorySeparatorChar}obj{Path.DirectorySeparatorChar}")
- && !p.Contains($"{Path.DirectorySeparatorChar}bin{Path.DirectorySeparatorChar}")
- && !p.Contains($"{Path.DirectorySeparatorChar}.claude{Path.DirectorySeparatorChar}")
- && !p.Contains($"{Path.DirectorySeparatorChar}vendor{Path.DirectorySeparatorChar}"));
-
-static string? NsOf(SyntaxNode n) =>
- n.Ancestors().OfType().FirstOrDefault()?.Name.ToString();
-
-// True when a name appears in a type position (so an added `using` is warranted). Excludes the
-// member name in `x.Foo` and the bare call target in `Foo(...)` — the main false-positive sources.
-static bool IsTypePosition(SimpleNameSyntax n) =>
- !(n.Parent is MemberAccessExpressionSyntax ma && ma.Name == n)
- && !(n.Parent is InvocationExpressionSyntax inv && inv.Expression == n);
-
-IEnumerable<(string Name, string Ns)> TopLevelTypes(SyntaxNode root)
-{
- foreach (var t in root.DescendantNodes().OfType())
- if (t.Parent is BaseNamespaceDeclarationSyntax && NsOf(t) is { } ns)
- yield return (t.Identifier.Text, ns);
- foreach (var d in root.DescendantNodes().OfType())
- if (d.Parent is BaseNamespaceDeclarationSyntax && NsOf(d) is { } ns)
- yield return (d.Identifier.Text, ns);
-}
-
-// Pass A — types declared in the source project under a movable namespace (these MOVE).
-var movedTypes = new Dictionary(); // simpleName -> new namespace
-var movedNamespaces = new HashSet(); // old movable namespaces actually present
-foreach (var f in CsFiles(sourceProj))
- foreach (var (name, ns) in TopLevelTypes(CSharpSyntaxTree.ParseText(File.ReadAllText(f)).GetRoot()))
- if (IsMovable(ns)) { movedTypes[name] = MapNs(ns); movedNamespaces.Add(ns); }
-
-// Pass B — types under Fallout.Common.* declared OUTSIDE the source project (these STAY = residual).
-var residualByNs = new Dictionary>();
-foreach (var f in CsFiles(Path.Combine(repo, "src")))
+static class Runner
{
- if (f.StartsWith(sourceProj, StringComparison.Ordinal)) continue;
- foreach (var (name, ns) in TopLevelTypes(CSharpSyntaxTree.ParseText(File.ReadAllText(f)).GetRoot()))
- if (ns == OldRoot || ns.StartsWith(OldRoot + "."))
- (residualByNs.TryGetValue(ns, out var s) ? s : residualByNs[ns] = new()).Add(name);
-}
-
-// Pass C — rewrite references repo-wide.
-int filesChanged = 0, usingsAdded = 0, usingsDropped = 0, nsDecls = 0;
-var samples = new List();
-
-foreach (var f in CsFiles(Path.Combine(repo, "src"), Path.Combine(repo, "tests"), Path.Combine(repo, "build")))
-{
- var original = File.ReadAllText(f);
- var cu = (CompilationUnitSyntax)CSharpSyntaxTree.ParseText(original).GetRoot();
- var isSource = f.StartsWith(sourceProj, StringComparison.Ordinal);
-
- // (1) Source-project files: rewrite their namespace declarations.
- if (isSource)
+ const string OldRoot = "Fallout.Common";
+ const string NewRoot = "Fallout.Application";
+ const string OldExt = "Fallout.Build.Execution.Extensions";
+ const string NewExt = "Fallout.Application.Execution.Extensions";
+ const string SourceAssembly = "Fallout.Build";
+
+ static bool IsMovable(string ns) => ns == OldRoot || ns.StartsWith(OldRoot + ".") || ns == OldExt || ns.StartsWith(OldExt + ".");
+ static string MapNs(string ns) =>
+ ns == OldRoot || ns.StartsWith(OldRoot + ".") ? NewRoot + ns[OldRoot.Length..]
+ : ns == OldExt || ns.StartsWith(OldExt + ".") ? NewExt + ns[OldExt.Length..]
+ : ns;
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public static async Task RunAsync(string[] args)
{
- var before = nsDecls;
- cu = (CompilationUnitSyntax)new NsRewriter(IsMovable, MapNs, () => nsDecls++).Visit(cu);
- if (nsDecls > before) { /* counted */ }
- }
+ var apply = args.Contains("--apply");
+ var repo = Directory.GetCurrentDirectory();
- // (1b) Rewrite fully-qualified references to moved types (e.g. Fallout.Common.Execution.Foo).
- cu = (CompilationUnitSyntax)new QualNameRewriter(IsMovable, MapNs, movedTypes).Visit(cu);
+ using var ws = Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.Create();
+ ws.WorkspaceFailed += (_, e) => { if (e.Diagnostic.Kind == WorkspaceDiagnosticKind.Failure) Console.Error.WriteLine(" ws: " + e.Diagnostic.Message); };
- // (2) All files: fix usings by type identity.
- // - DROP decision uses a BROAD reference set (every identifier) so we only ever over-keep — safe.
- // - ADD decision uses a TYPE-POSITION-filtered set so we don't add usings for method/property
- // names that merely collide with a moved type's simple name.
- var referencedAll = cu.DescendantNodes().OfType().Select(n => n.Identifier.Text).ToHashSet();
- var referencedTypes = cu.DescendantNodes().OfType().Where(IsTypePosition).Select(n => n.Identifier.Text).ToHashSet();
- var fileNs = cu.DescendantNodes().OfType().FirstOrDefault()?.Name.ToString();
+ var csprojs = Directory.EnumerateFiles(Path.Combine(repo, "src"), "*.csproj", SearchOption.AllDirectories)
+ .Concat(Directory.EnumerateFiles(Path.Combine(repo, "tests"), "*.csproj", SearchOption.AllDirectories))
+ .Concat(Directory.EnumerateFiles(Path.Combine(repo, "build"), "*.csproj", SearchOption.AllDirectories))
+ .Where(p => !p.Contains($"{Path.DirectorySeparatorChar}obj{Path.DirectorySeparatorChar}") && !p.Contains($"{Path.DirectorySeparatorChar}bin{Path.DirectorySeparatorChar}"))
+ .OrderBy(p => p).ToList();
- var keep = new List();
- foreach (var u in cu.Usings)
- {
- var name = u.Name?.ToString();
- if (name != null && movedNamespaces.Contains(name))
+ Console.WriteLine($"Loading {csprojs.Count} projects into the workspace…");
+ foreach (var p in csprojs)
{
- var residualUsed = residualByNs.TryGetValue(name, out var set) && set.Overlaps(referencedAll);
- if (residualUsed) keep.Add(u); else usingsDropped++; // drop usings now empty of residual types
+ try { await ws.OpenProjectAsync(p); }
+ catch (Exception ex) { Console.Error.WriteLine($" open failed {Path.GetFileName(p)}: {ex.Message}"); }
}
- else keep.Add(u);
- }
-
- var needed = referencedTypes.Where(movedTypes.ContainsKey).Select(n => movedTypes[n]).Distinct();
- foreach (var ns in needed)
- {
- if (ns == fileNs) continue;
- if (keep.Any(u => u.Name?.ToString() == ns)) continue;
- keep.Add(ParseCompilationUnit($"using {ns};\n").Usings[0]);
- usingsAdded++;
- }
-
- cu = cu.WithUsings(List(keep));
- var updated = cu.ToFullString();
- if (updated != original)
- {
- filesChanged++;
- if (samples.Count < 12) samples.Add(Path.GetRelativePath(repo, f));
- if (apply) File.WriteAllText(f, updated);
- }
-}
+ var sln = ws.CurrentSolution;
+ Console.WriteLine($"Loaded {sln.Projects.Count()} projects.");
+
+ // Moved types: declared in the source assembly under a movable namespace. Keyed by full name.
+ var sourceProject = sln.Projects.FirstOrDefault(p => p.AssemblyName == SourceAssembly);
+ if (sourceProject is null) { Console.Error.WriteLine($"FATAL: source project {SourceAssembly} not loaded."); return 1; }
+ var sourceComp = await sourceProject.GetCompilationAsync();
+ var movedFullNames = new HashSet();
+ void Collect(INamespaceSymbol nsSym)
+ {
+ foreach (var t in nsSym.GetTypeMembers()) if (IsMovable(nsSym.ToDisplayString())) movedFullNames.Add($"{nsSym.ToDisplayString()}.{t.Name}");
+ foreach (var child in nsSym.GetNamespaceMembers()) Collect(child);
+ }
+ Collect(sourceComp!.Assembly.GlobalNamespace);
+ Console.WriteLine($"Moved types (declared in {SourceAssembly}, movable ns): {movedFullNames.Count}");
-Console.WriteLine($"OnionRewriter ({(apply ? "APPLY" : "dry-run")})");
-Console.WriteLine($" moved types : {movedTypes.Count}");
-Console.WriteLine($" moved namespaces : {string.Join(", ", movedNamespaces.OrderBy(x => x))}");
-Console.WriteLine($" residual namespaces: {string.Join(", ", residualByNs.Keys.OrderBy(x => x))}");
-Console.WriteLine($" files changed : {filesChanged}");
-Console.WriteLine($" namespace decls : {nsDecls}");
-Console.WriteLine($" usings added : {usingsAdded}");
-Console.WriteLine($" usings dropped : {usingsDropped}");
-Console.WriteLine($" sample files :\n {string.Join("\n ", samples)}");
+ bool IsMovedType(INamedTypeSymbol t)
+ {
+ var ns = t.OriginalDefinition.ContainingNamespace?.ToDisplayString() ?? "";
+ return t.OriginalDefinition.ContainingAssembly?.Name == SourceAssembly && IsMovable(ns) && movedFullNames.Contains($"{ns}.{t.OriginalDefinition.Name}");
+ }
-sealed class NsRewriter(Func isMovable, Func map, Action onHit) : CSharpSyntaxRewriter
-{
- public override SyntaxNode? VisitNamespaceDeclaration(NamespaceDeclarationSyntax node) => Rewrite(node, base.VisitNamespaceDeclaration(node));
- public override SyntaxNode? VisitFileScopedNamespaceDeclaration(FileScopedNamespaceDeclarationSyntax node) => Rewrite(node, base.VisitFileScopedNamespaceDeclaration(node));
+ int filesChanged = 0, refsRewritten = 0, usingsAdded = 0, usingsDropped = 0, nsDecls = 0;
+ var samples = new List();
- private SyntaxNode? Rewrite(BaseNamespaceDeclarationSyntax original, SyntaxNode? visited)
- {
- var name = original.Name.ToString();
- if (!isMovable(name) || visited is not BaseNamespaceDeclarationSyntax n) return visited;
- onHit();
- return n.WithName(SyntaxFactory.ParseName(map(name)).WithTriviaFrom(original.Name));
- }
-}
+ foreach (var project in sln.Projects)
+ {
+ var isSource = project.AssemblyName == SourceAssembly;
+ foreach (var doc in project.Documents)
+ {
+ if (doc.FilePath is null || !doc.FilePath.EndsWith(".cs") || doc.FilePath.Contains($"{Path.DirectorySeparatorChar}obj{Path.DirectorySeparatorChar}")) continue;
+ var model = await doc.GetSemanticModelAsync();
+ var root = await doc.GetSyntaxRootAsync();
+ if (model is null || root is null) continue;
+
+ var (newRoot, c) = DocumentRewriter.Rewrite(root, model, isSource, IsMovable, MapNs, IsMovedType);
+ if (c.Changed)
+ {
+ filesChanged++; refsRewritten += c.Refs; usingsAdded += c.Added; usingsDropped += c.Dropped; nsDecls += c.NsDecls;
+ if (samples.Count < 12) samples.Add(Path.GetRelativePath(repo, doc.FilePath));
+ if (apply) await File.WriteAllTextAsync(doc.FilePath, newRoot.ToFullString());
+ }
+ }
+ }
-// Rewrites fully-qualified references like `Fallout.Common.Execution.Foo` → `Fallout.Application.Execution.Foo`,
-// but only when `Foo` is genuinely a moved type that lived in that namespace (guards against a same-named
-// type from a different moved namespace).
-sealed class QualNameRewriter(Func isMovable, Func map, IReadOnlyDictionary movedTypes) : CSharpSyntaxRewriter
-{
- public override SyntaxNode? VisitQualifiedName(QualifiedNameSyntax node)
- {
- var visited = (QualifiedNameSyntax)base.VisitQualifiedName(node)!;
- var left = node.Left.ToString();
- var right = node.Right.Identifier.Text;
- if (isMovable(left) && movedTypes.TryGetValue(right, out var newNs) && newNs == map(left))
- return visited.WithLeft(SyntaxFactory.ParseName(map(left)).WithTriviaFrom(node.Left));
- return visited;
+ Console.WriteLine($"\nOnionRewriter ({(apply ? "APPLY" : "dry-run")})");
+ Console.WriteLine($" files changed : {filesChanged}");
+ Console.WriteLine($" namespace decls : {nsDecls}");
+ Console.WriteLine($" qualified refs : {refsRewritten}");
+ Console.WriteLine($" usings added : {usingsAdded}");
+ Console.WriteLine($" usings dropped : {usingsDropped}");
+ Console.WriteLine($" sample files :\n {string.Join("\n ", samples)}");
+ return 0;
}
}
From f91c0d097683d7b7ad49c12ed9a432b46fccace3 Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 22:48:35 +1200
Subject: [PATCH 09/46] =?UTF-8?q?refactor(arch)!:=20Application=20ring=20?=
=?UTF-8?q?=E2=80=94=20core=20API=20->=20Fallout.Application=20(onion=20st?=
=?UTF-8?q?ep=202)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
ADR-0006 step 2, via the semantic OnionRewriter (MSBuildWorkspace + symbol
resolution). Every type Fallout.Build declared under Fallout.Common.* (FalloutBuild,
Target, [Parameter], Host, the ports, the execution engine, value injection) moves
to Fallout.Application.*; references fixed repo-wide by the symbol each binds to.
~297 files; full solution builds and tests green (~450 tests, incl. Domain fitness).
Tool refinements landed here: name-based moved-type classification (cross-project),
package-consumer skip, attribute/extension-method detection, nested-type qualified
refs, evacuated- vs surviving-namespace using reconciliation. Four dangling usings
hand-finished; Verify snapshots (solution generator, cake-migration) updated.
Deferred (ADR-0006): Nuke.* shim parity lapses — Nuke.Consumer + Nuke.Common.Shim.Tests
temporarily excluded from the solution, to be re-addressed by the redesigned migration
phase. Project-FILE rename (Fallout.Build dir/csproj -> Fallout.Application) still to do
— namespaces are migrated; the assembly is renamed in a mechanical follow-up.
BREAKING CHANGE: Fallout.Common.* core-API namespaces -> Fallout.Application.*. On
experimental; batched to the 2026 major.
Co-Authored-By: Claude Opus 4.8
---
build/Build.CodeGeneration.cs | 4 +-
build/Build.Contributors.cs | 1 +
build/Build.GlobalSolution.cs | 6 +--
build/Build.Licenses.cs | 2 +-
build/Build.PublicApi.cs | 1 +
build/Build.RunTargetInDockerTest.cs | 1 +
build/Build.Stargazers.cs | 4 +-
build/Build.Terminal.cs | 6 +--
build/Build.cs | 9 +++--
fallout.slnx | 6 ++-
.../ArgumentsFromGitCommitMessageAttribute.cs | 10 +++--
.../DisableDefaultOutputAttribute.cs | 4 +-
...ShutdownDotNetAfterServerBuildAttribute.cs | 4 +-
...sualStudioEnvironmentVariablesAttribute.cs | 2 +-
.../Attributes/VerbosityMappingAttribute.cs | 7 +++-
.../BuildServerConfigurationGeneration.cs | 3 +-
...verConfigurationGenerationAttributeBase.cs | 7 ++--
src/Fallout.Build/CICD/CIAttribute.cs | 8 ++--
.../CICD/ChainedConfigurationAttributeBase.cs | 5 ++-
.../CICD/ConfigurationAttributeBase.cs | 8 ++--
src/Fallout.Build/CICD/ConfigurationEntity.cs | 4 +-
src/Fallout.Build/CICD/CustomFileWriter.cs | 3 +-
...erateBuildServerConfigurationsAttribute.cs | 8 ++--
src/Fallout.Build/CICD/IBuildServer.cs | 4 +-
.../CICD/IConfigurationGenerator.cs | 4 +-
...dServerConfigurationGenerationAttribute.cs | 9 +++--
src/Fallout.Build/CICD/NoConvertAttribute.cs | 4 +-
src/Fallout.Build/CICD/Partition.cs | 2 +-
src/Fallout.Build/CICD/PartitionAttribute.cs | 3 +-
src/Fallout.Build/ControlFlow.cs | 5 ++-
src/Fallout.Build/Execution/BuildExecutor.cs | 4 +-
src/Fallout.Build/Execution/BuildManager.cs | 6 ++-
.../Execution/DelegateRequirementService.cs | 9 +++--
.../Execution/ExecutableTarget.cs | 3 +-
.../Execution/ExecutableTargetFactory.cs | 6 ++-
.../Execution/ExecutionPlanner.cs | 4 +-
.../BuildExtensionAttributeBase.cs | 3 +-
.../ToolInjectionAttributeBase.cs | 7 ++--
.../ValueInjectionAttributeBase.cs | 4 +-
.../ArgumentsFromParametersFileAttribute.cs | 11 ++++--
.../Execution/Extensions/EventInvoker.cs | 5 ++-
.../Extensions/HandleHelpRequestsAttribute.cs | 5 ++-
.../Extensions/HandlePlanRequestsAttribute.cs | 6 +--
...dleReSharperSurrogateArgumentsAttribute.cs | 5 ++-
.../HandleShellCompletionAttribute.cs | 6 ++-
.../HandleVisualStudioDebuggingAttribute.cs | 4 +-
.../InjectNonParameterValuesAttribute.cs | 7 ++--
.../InjectParameterValuesAttribute.cs | 7 ++--
.../SerializeBuildServerStateAttribute.cs | 6 +--
.../Extensions/TelemetryAttribute.cs | 4 +-
.../Extensions/UpdateNotificationAttribute.cs | 6 ++-
.../Execution/ParameterService.Statics.cs | 5 ++-
.../Execution/ParameterService.cs | 3 +-
.../Execution/TargetDefinition.cs | 7 +++-
.../Execution/TargetExecutionException.cs | 2 +-
.../Execution/ToolRequirementService.cs | 6 ++-
.../Execution/ValueInjectionUtility.cs | 6 ++-
src/Fallout.Build/FalloutBuild.Events.cs | 6 +--
src/Fallout.Build/FalloutBuild.Interface.cs | 6 +--
src/Fallout.Build/FalloutBuild.Output.cs | 4 +-
src/Fallout.Build/FalloutBuild.Statics.cs | 9 +++--
src/Fallout.Build/FalloutBuild.cs | 13 ++++---
src/Fallout.Build/Host.Activation.cs | 7 ++--
src/Fallout.Build/Host.Theming.cs | 6 +--
src/Fallout.Build/Host.cs | 9 +++--
src/Fallout.Build/IFalloutBuild.cs | 6 +--
src/Fallout.Build/ITargetDefinition.cs | 4 +-
src/Fallout.Build/LogLevel.cs | 4 +-
src/Fallout.Build/Logging.cs | 11 ++++--
src/Fallout.Build/ParameterAttribute.cs | 6 +--
src/Fallout.Build/RequiresAttribute.cs | 5 ++-
src/Fallout.Build/Target.cs | 4 +-
.../Telemetry/Telemetry.Events.cs | 6 ++-
.../Telemetry/Telemetry.Properties.cs | 12 +++---
src/Fallout.Build/Telemetry/Telemetry.cs | 8 ++--
src/Fallout.Build/Terminal.cs | 5 ++-
.../Theming/AnsiConsoleHostTheme.cs | 4 +-
src/Fallout.Build/Theming/IHostTheme.cs | 4 +-
.../Theming/SystemConsoleHostTheme.cs | 4 +-
src/Fallout.Build/Utilities/ConsoleUtility.cs | 5 ++-
.../Utilities/CredentialStore.cs | 7 +++-
src/Fallout.Build/Utilities/SchemaUtility.cs | 7 +++-
src/Fallout.Build/VCS/GitRepository.cs | 6 ++-
.../VCS/GitRepositoryExtensions.cs | 4 +-
src/Fallout.Build/Verbosity.cs | 4 +-
src/Fallout.Cli/Program.AddPackage.cs | 5 ++-
src/Fallout.Cli/Program.Cake.cs | 5 ++-
src/Fallout.Cli/Program.GetConfiguration.cs | 3 +-
src/Fallout.Cli/Program.Secrets.cs | 2 +
src/Fallout.Cli/Program.Setup.cs | 3 +-
src/Fallout.Cli/Program.Trigger.cs | 4 +-
src/Fallout.Cli/Program.Update.cs | 5 ++-
src/Fallout.Cli/Program.cs | 3 +-
.../Rewriting/Cake/ClassRewriter.cs | 1 +
.../Rewriting/Cake/FormattingRewriter.cs | 1 +
.../Rewriting/Cake/InvocationRewriter.cs | 1 +
.../Rewriting/Cake/SafeSyntaxRewriter.cs | 4 +-
.../Cake/TargetDefinitionRewriter.cs | 1 +
.../CheckPathEnvironmentVariableAttribute.cs | 3 +-
.../FileSystemGlobbingAttributeBase.cs | 3 +-
.../Attributes/GitRepositoryAttribute.cs | 5 ++-
.../Attributes/GlobbingOptionsAttribute.cs | 2 +-
.../HandleSingleFileExecutionAttribute.cs | 3 +-
.../LatestGitHubReleaseAttribute.cs | 6 +--
.../Attributes/LatestMavenVersionAttribute.cs | 4 +-
.../Attributes/LatestMyGetVersionAttribute.cs | 4 +-
.../Attributes/LatestNpmVersionAttribute.cs | 4 +-
.../Attributes/LatestNuGetVersionAttribute.cs | 4 +-
.../Attributes/LocalPathAttribute.cs | 3 +-
.../Attributes/NpmPackageAttribute.cs | 3 +-
.../Attributes/NuGetPackageAttribute.cs | 3 +-
.../Attributes/PathVariableAttribute.cs | 3 +-
.../Attributes/SolutionAttribute.cs | 3 +-
.../CI/AppVeyor/AppVeyor.Theming.cs | 4 +-
src/Fallout.Common/CI/AppVeyor/AppVeyor.cs | 2 +
.../CI/AppVeyor/AppVeyorAttribute.cs | 5 ++-
.../Configuration/AppVeyorBranches.cs | 3 +-
.../Configuration/AppVeyorConfiguration.cs | 2 +
.../AppVeyorCustomWriterExtensions.cs | 1 +
.../AzurePipelines/AzurePipelines.Theming.cs | 4 +-
.../CI/AzurePipelines/AzurePipelines.cs | 4 +-
.../AzurePipelines/AzurePipelinesAttribute.cs | 6 ++-
.../AzurePipelineCheckoutStep.cs | 2 +-
.../Configuration/AzurePipelinesCacheStep.cs | 3 +-
.../Configuration/AzurePipelinesCmdStep.cs | 3 +-
.../AzurePipelinesConfiguration.cs | 3 +-
.../AzurePipelinesCustomWriterExtensions.cs | 1 +
.../AzurePipelinesDownloadStep.cs | 3 +-
.../Configuration/AzurePipelinesJob.cs | 2 +
.../AzurePipelinesPublishStep.cs | 3 +-
.../Configuration/AzurePipelinesStage.cs | 2 +
.../Configuration/AzurePipelinesStep.cs | 3 +-
.../AzurePipelinesVcsPushTrigger.cs | 5 ++-
src/Fallout.Common/CI/Bamboo/Bamboo.cs | 4 +-
src/Fallout.Common/CI/Bitbucket/Bitbucket.cs | 4 +-
src/Fallout.Common/CI/Bitrise/Bitrise.cs | 4 +-
.../GitHubActionsArtifactStep.cs | 3 +-
.../Configuration/GitHubActionsCacheStep.cs | 3 +-
.../GitHubActionsCheckoutStep.cs | 3 +-
.../GitHubActionsConfiguration.cs | 2 +
.../GitHubActionsDetailedTrigger.cs | 1 +
.../Configuration/GitHubActionsJob.cs | 2 +
.../Configuration/GitHubActionsRunStep.cs | 1 +
.../GitHubActionsScheduledTrigger.cs | 2 +-
.../Configuration/GitHubActionsStep.cs | 1 +
.../Configuration/GitHubActionsVcsTrigger.cs | 1 +
.../GitHubActionsWorkflowDispatchTrigger.cs | 3 +-
.../CI/GitHubActions/GitHubActions.Theming.cs | 4 +-
.../CI/GitHubActions/GitHubActions.cs | 2 +
.../GitHubActions/GitHubActionsAttribute.cs | 6 ++-
.../CI/GitLab/GitLab.Theming.cs | 4 +-
src/Fallout.Common/CI/GitLab/GitLab.cs | 2 +
src/Fallout.Common/CI/Jenkins/Jenkins.cs | 4 +-
.../SpaceAutomationConfiguration.cs | 4 +-
.../Configuration/SpaceAutomationContainer.cs | 4 +-
.../SpaceAutomationCronScheduleTrigger.cs | 3 +-
.../SpaceAutomationCustomWriterExtensions.cs | 3 +-
.../SpaceAutomationPushTrigger.cs | 3 +-
.../Configuration/SpaceAutomationResources.cs | 5 ++-
.../Configuration/SpaceAutomationTrigger.cs | 3 +-
.../SpaceAutomation.Theming.cs | 2 +-
.../CI/SpaceAutomation/SpaceAutomation.cs | 4 +-
.../SpaceAutomationAttribute.cs | 6 ++-
.../TeamCityArtifactDependency.cs | 2 +-
.../Configuration/TeamCityBuildType.cs | 2 +
.../Configuration/TeamCityBuildTypeVcsRoot.cs | 3 +-
.../Configuration/TeamCityConfiguration.cs | 2 +
.../TeamCityConfigurationParameter.cs | 1 +
.../TeamCityCustomWriterExtensions.cs | 1 +
.../Configuration/TeamCityDependency.cs | 1 +
.../TeamCityFinishBuildTrigger.cs | 1 +
.../TeamCityKeyValueParameter.cs | 1 +
.../Configuration/TeamCityParameter.cs | 1 +
.../TeamCity/Configuration/TeamCityProject.cs | 2 +
.../Configuration/TeamCityScheduledTrigger.cs | 2 +-
.../TeamCitySnapshotDependency.cs | 1 +
.../TeamCity/Configuration/TeamCityTrigger.cs | 1 +
.../TeamCity/Configuration/TeamCityVcsRoot.cs | 3 +-
.../Configuration/TeamCityVcsTrigger.cs | 2 +-
.../CI/TeamCity/TeamCity.Theming.cs | 6 +--
src/Fallout.Common/CI/TeamCity/TeamCity.cs | 4 +-
.../CI/TeamCity/TeamCityAttribute.cs | 7 +++-
src/Fallout.Common/CI/TravisCI/TravisCI.cs | 4 +-
.../ChangeLog/ChangeLogTasks.cs | 3 +-
src/Fallout.Common/IO/FtpTasks.cs | 3 +-
.../AzureKeyVaultAttributeBase.cs | 5 ++-
.../AzureKeyVaultConfigurationAttribute.cs | 4 +-
.../AzureKeyVaultSecretAttribute.cs | 3 +-
.../AzureSignTool/AzureSignTool.Generated.cs | 5 +--
.../BenchmarkDotNet.Generated.cs | 1 -
.../Tools/Boots/Boots.Generated.cs | 1 -
.../Tools/Chocolatey/Chocolatey.Generated.cs | 5 +--
.../CodeMetrics/CodeMetrics.Generated.cs | 1 -
.../Tools/Codecov/Codecov.Generated.cs | 5 +--
.../Tools/CorFlags/CorFlags.Generated.cs | 1 -
.../CoverallsNet/CoverallsNet.Generated.cs | 5 +--
.../Tools/Coverlet/Coverlet.Generated.cs | 1 -
.../Tools/Discord/Discord.Generated.cs | 1 -
.../Tools/DocFX/DocFX.Generated.cs | 1 -
.../Tools/Docker/Docker.Generated.cs | 5 +--
.../DockerTargetDefinitionExtensions.cs | 3 +-
.../Tools/DotCover/DotCover.Generated.cs | 1 -
.../TeamCitySetDotCoverHomePathAttribute.cs | 2 +-
.../DotMemoryUnit/DotMemoryUnit.Generated.cs | 1 -
.../Tools/DotNet/DotNet.Generated.cs | 5 +--
.../Tools/DotNet/DotNetTasks.cs | 1 +
.../DotnetPackaging.Generated.cs | 1 -
.../EntityFramework.Generated.cs | 1 -
.../Tools/Fixie/Fixie.Generated.cs | 1 -
src/Fallout.Common/Tools/Git/Git.Generated.cs | 1 -
.../Tools/GitHub/GitHubTasks.cs | 3 +-
.../Tools/GitLink/GitLink.Generated.cs | 1 -
.../GitReleaseManager.Generated.cs | 5 +--
.../Tools/GitVersion/GitVersion.Generated.cs | 5 +--
.../Tools/GitVersion/GitVersionAttribute.cs | 9 +++--
.../Tools/Helm/Helm.Generated.cs | 5 +--
.../Tools/ILRepack/ILRepack.Generated.cs | 1 -
.../Tools/InnoSetup/InnoSetup.Generated.cs | 1 -
.../Tools/Kubernetes/Kubernetes.Generated.cs | 1 -
.../Tools/MSBuild/MSBuild.Generated.cs | 1 -
.../Tools/MSBuild/MSBuildTasks.cs | 1 +
.../Tools/MSpec/MSpec.Generated.cs | 1 -
.../Tools/MakeNsis/MakeNSIS.Generated.cs | 1 -
.../Tools/Mastodon/Mastodon.Generated.cs | 1 -
.../Tools/MauiCheck/MauiCheck.Generated.cs | 1 -
.../Tools/MinVer/MinVer.Generated.cs | 1 -
.../Tools/MinVer/MinVerAttribute.cs | 4 +-
.../Tools/NSwag/NSwag.Generated.cs | 1 -
.../Tools/NUnit/NUnit.Generated.cs | 1 -
src/Fallout.Common/Tools/NUnit/NUnitTasks.cs | 2 +-
.../NerdbankGitVersioning.Generated.cs | 1 -
.../NerdbankGitVersioningAttribute.cs | 2 +-
.../Tools/Netlify/Netlify.Generated.cs | 5 +--
src/Fallout.Common/Tools/Npm/Npm.Generated.cs | 1 -
.../Tools/NuGet/NuGet.Generated.cs | 5 +--
.../NuGetKeyVaultSignTool.Generated.cs | 5 +--
.../OctoVersion/OctoVersion.Generated.cs | 1 -
.../Tools/OctoVersion/OctoVersionAttribute.cs | 7 ++--
.../Tools/Octopus/Octopus.Generated.cs | 5 +--
.../Tools/OpenCover/OpenCover.Generated.cs | 1 -
.../Tools/OpenCover/OpenCoverTasks.cs | 3 +-
.../Tools/Paket/Paket.Generated.cs | 5 +--
.../Tools/PowerShell/PowerShell.Generated.cs | 1 -
.../Tools/Pulumi/Pulumi.Generated.cs | 1 -
.../Tools/Pwsh/Pwsh.Generated.cs | 1 -
.../ReportGenerator.Generated.cs | 1 -
.../ReportGenerator/ReportGeneratorTasks.cs | 2 +-
.../Tools/SignClient/SignClient.Generated.cs | 5 +--
.../Tools/SignPath/SignPathTasks.cs | 5 ++-
.../Tools/SignTool/SignTool.Generated.cs | 5 +--
.../Tools/Slack/Slack.Generated.cs | 1 -
.../SonarScanner/SonarScanner.Generated.cs | 5 +--
.../Tools/SpecFlow/SpecFlow.Generated.cs | 5 +--
.../Tools/Squirrel/Squirrel.Generated.cs | 1 -
.../StaticWebApps/StaticWebApps.Generated.cs | 5 +--
.../Tools/Teams/Teams.Generated.cs | 1 -
.../Tools/TestCloud/TestCloud.Generated.cs | 1 -
.../Tools/Unity/Unity.Generated.cs | 5 +--
src/Fallout.Common/Tools/Unity/UnityTasks.cs | 3 +-
.../Tools/VSTest/VSTest.Generated.cs | 1 -
.../Tools/VSWhere/VSWhere.Generated.cs | 1 -
.../WebConfigTransformRunner.Generated.cs | 1 -
.../Tools/Xunit/Xunit.Generated.cs | 1 -
src/Fallout.Components/ICompile.cs | 4 +-
.../ICreateGitHubRelease.cs | 3 +-
src/Fallout.Components/IGlobalTool.cs | 2 +-
src/Fallout.Components/IHasArtifacts.cs | 4 +-
src/Fallout.Components/IHasChangelog.cs | 4 +-
src/Fallout.Components/IHasConfiguration.cs | 4 +-
src/Fallout.Components/IHasGitRepository.cs | 5 ++-
src/Fallout.Components/IHasGitVersion.cs | 4 +-
.../IHasNerdbankGitVersioning.cs | 4 +-
src/Fallout.Components/IHasSolution.cs | 4 +-
.../IHasTwitterCredentials.cs | 4 +-
src/Fallout.Components/IPack.cs | 4 +-
src/Fallout.Components/IPublish.cs | 1 +
src/Fallout.Components/IReportCoverage.cs | 4 +-
src/Fallout.Components/IRestore.cs | 4 +-
src/Fallout.Components/ISignPackages.cs | 2 +-
src/Fallout.Components/ITest.cs | 4 +-
src/Shims/Nuke.Common/NukeBuild.cs | 5 ++-
.../Consumers/Fallout.Consumer.Local/Build.cs | 6 +--
.../Fallout.Build.Tests/BuildExecutorTest.cs | 5 ++-
tests/Fallout.Build.Tests/ControlFlowTest.cs | 1 +
.../DefaultInterfaceExecutionTest.cs | 5 ++-
.../ExecutableTargetFactoryTest.cs | 3 +-
.../ExecutionPlannerTest.cs | 2 +-
.../ExecutionTestsInitializer.cs | 4 +-
.../Fallout.Build.Tests/GitRepositoryTest.cs | 4 +-
tests/Fallout.Build.Tests/HostInitializer.cs | 3 +-
.../ParameterServiceTest.cs | 1 +
.../Fallout.Build.Tests/SchemaUtilityTest.cs | 5 ++-
.../cake-scripts/default-target.verified.cs | 4 +-
.../cake-scripts/globbing.verified.cs | 4 +-
.../cake-scripts/parameters.verified.cs | 4 +-
.../cake-scripts/paths.verified.cs | 4 +-
.../cake-scripts/references.verified.cs | 4 +-
.../cake-scripts/targets.verified.cs | 4 +-
.../cake-scripts/tool-invocation.verified.cs | 4 +-
.../CI/ConfigurationGenerationTest.cs | 7 ++--
.../CI/ITestConfigurationGenerator.cs | 2 +-
tests/Fallout.Common.Tests/CITest.cs | 4 +-
tests/Fallout.Common.Tests/GitHubTasksTest.cs | 2 +-
...nGeneratorTest.Test#Solution.g.verified.cs | 2 -
.../StronglyTypedSolutionGeneratorTest.cs | 4 +-
.../SampleConsumerBuild.cs | 3 +-
tools/OnionRewriter/DocumentRewriter.cs | 38 +++++++++++++++----
tools/OnionRewriter/Program.cs | 31 ++++++++++++++-
308 files changed, 677 insertions(+), 514 deletions(-)
diff --git a/build/Build.CodeGeneration.cs b/build/Build.CodeGeneration.cs
index f8ab28165..77bca43d1 100644
--- a/build/Build.CodeGeneration.cs
+++ b/build/Build.CodeGeneration.cs
@@ -1,11 +1,11 @@
-using System;
-using Fallout.Common;
+using System;
using Fallout.Common.IO;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities.Collections;
using static Fallout.CodeGeneration.CodeGenerator;
using static Fallout.CodeGeneration.ReferenceUpdater;
using static Fallout.Common.Tools.Git.GitTasks;
+using Fallout.Application;
partial class Build
{
diff --git a/build/Build.Contributors.cs b/build/Build.Contributors.cs
index a3910c293..8a1ce85fe 100644
--- a/build/Build.Contributors.cs
+++ b/build/Build.Contributors.cs
@@ -5,6 +5,7 @@
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Tools.Git.GitTasks;
+using Fallout.Application;
partial class Build
{
diff --git a/build/Build.GlobalSolution.cs b/build/Build.GlobalSolution.cs
index 7efdea75f..83bd1d7e3 100644
--- a/build/Build.GlobalSolution.cs
+++ b/build/Build.GlobalSolution.cs
@@ -2,15 +2,15 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using Fallout.Common;
-using Fallout.Common.Git;
using Fallout.Common.IO;
using Fallout.Solutions;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
using Fallout.Utilities.Text.Yaml;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.Git.GitTasks;
+using Fallout.Application;
+using Fallout.Application.Git;
partial class Build
{
diff --git a/build/Build.Licenses.cs b/build/Build.Licenses.cs
index 833e45b38..2a1d2df10 100644
--- a/build/Build.Licenses.cs
+++ b/build/Build.Licenses.cs
@@ -1,4 +1,3 @@
-using Fallout.Common;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@@ -6,6 +5,7 @@
using Fallout.Components;
using Serilog;
using static Fallout.Common.IO.HttpTasks;
+using Fallout.Application;
partial class Build
{
diff --git a/build/Build.PublicApi.cs b/build/Build.PublicApi.cs
index c14305a40..9872fc984 100644
--- a/build/Build.PublicApi.cs
+++ b/build/Build.PublicApi.cs
@@ -6,6 +6,7 @@
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application;
partial class Build
{
diff --git a/build/Build.RunTargetInDockerTest.cs b/build/Build.RunTargetInDockerTest.cs
index 2fc40032e..14a3e93ae 100644
--- a/build/Build.RunTargetInDockerTest.cs
+++ b/build/Build.RunTargetInDockerTest.cs
@@ -3,6 +3,7 @@
using Fallout.Common.Tools.Docker;
using Fallout.Common.Utilities;
using Serilog;
+using Fallout.Application;
partial class Build
{
diff --git a/build/Build.Stargazers.cs b/build/Build.Stargazers.cs
index 72d5449ba..762c70e5a 100644
--- a/build/Build.Stargazers.cs
+++ b/build/Build.Stargazers.cs
@@ -1,9 +1,9 @@
-using System.Linq;
+using System.Linq;
using System.Threading.Tasks;
-using Fallout.Common;
using Fallout.Common.IO;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
+using Fallout.Application;
partial class Build
{
diff --git a/build/Build.Terminal.cs b/build/Build.Terminal.cs
index 0a6f8e90c..589a7cf17 100644
--- a/build/Build.Terminal.cs
+++ b/build/Build.Terminal.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
+using Fallout.Application;
[DisableDefaultOutput(
DefaultOutput.Logo,
diff --git a/build/Build.cs b/build/Build.cs
index b1ecb3288..ab0221ed1 100644
--- a/build/Build.cs
+++ b/build/Build.cs
@@ -3,10 +3,7 @@
using System.Linq;
using NuGet.Packaging;
using Fallout.Common;
-using Fallout.Common.CI;
using Fallout.Common.CI.GitHubActions;
-using Fallout.Common.Execution;
-using Fallout.Common.Git;
using Fallout.Common.IO;
using Fallout.Solutions;
using Fallout.Common.Tooling;
@@ -14,8 +11,12 @@
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
using Fallout.Components;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
+using Fallout.Application.CI;
+using Fallout.Application.Git;
+using Fallout.Application.Execution;
[DotNetVerbosityMapping]
[ShutdownDotNetAfterServerBuild]
diff --git a/fallout.slnx b/fallout.slnx
index ad895155c..974398a6a 100644
--- a/fallout.slnx
+++ b/fallout.slnx
@@ -41,13 +41,15 @@
-
+
-
+
diff --git a/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs b/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs
index 4dcd435f0..b1f3d9d21 100644
--- a/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs
+++ b/src/Fallout.Build/Attributes/ArgumentsFromGitCommitMessageAttribute.cs
@@ -1,12 +1,14 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.CI;
-using Fallout.Common.Git;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application.Git;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
public class ArgumentsFromGitCommitMessageAttribute : BuildExtensionAttributeBase, IOnBuildCreated
{
diff --git a/src/Fallout.Build/Attributes/DisableDefaultOutputAttribute.cs b/src/Fallout.Build/Attributes/DisableDefaultOutputAttribute.cs
index 740984fcc..f231b455b 100644
--- a/src/Fallout.Build/Attributes/DisableDefaultOutputAttribute.cs
+++ b/src/Fallout.Build/Attributes/DisableDefaultOutputAttribute.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-namespace Fallout.Common;
+namespace Fallout.Application;
[AttributeUsage(AttributeTargets.Class)]
public class DisableDefaultOutputAttribute : Attribute
diff --git a/src/Fallout.Build/Attributes/ShutdownDotNetAfterServerBuildAttribute.cs b/src/Fallout.Build/Attributes/ShutdownDotNetAfterServerBuildAttribute.cs
index 36ea254a7..1423e7bff 100644
--- a/src/Fallout.Build/Attributes/ShutdownDotNetAfterServerBuildAttribute.cs
+++ b/src/Fallout.Build/Attributes/ShutdownDotNetAfterServerBuildAttribute.cs
@@ -1,9 +1,9 @@
using System;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.Tooling;
+using Fallout.Application.Execution;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
///
/// See dotnet/cli#11424.
diff --git a/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs b/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs
index f8ca1f93f..4bdc1e689 100644
--- a/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs
+++ b/src/Fallout.Build/Attributes/UnsetVisualStudioEnvironmentVariablesAttribute.cs
@@ -3,7 +3,7 @@
using System.Linq;
using Fallout.Common.Utilities.Collections;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
public class UnsetVisualStudioEnvironmentVariablesAttribute : BuildExtensionAttributeBase, IOnBuildCreated
{
diff --git a/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs b/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs
index 9afcd3178..8688b79f5 100644
--- a/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs
+++ b/src/Fallout.Build/Attributes/VerbosityMappingAttribute.cs
@@ -1,10 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Execution;
+using Fallout.Application;
+using Fallout.Common;
+using Fallout.Common.Tooling;
-namespace Fallout.Common.Tooling;
+namespace Fallout.Application.Tooling;
public class VerbosityMappingAttribute : BuildExtensionAttributeBase, IOnBuildInitialized
{
diff --git a/src/Fallout.Build/CICD/BuildServerConfigurationGeneration.cs b/src/Fallout.Build/CICD/BuildServerConfigurationGeneration.cs
index 2c5986940..88a1f47fa 100644
--- a/src/Fallout.Build/CICD/BuildServerConfigurationGeneration.cs
+++ b/src/Fallout.Build/CICD/BuildServerConfigurationGeneration.cs
@@ -1,7 +1,8 @@
using System;
using System.Linq;
+using Fallout.Application;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public static class BuildServerConfigurationGeneration
{
diff --git a/src/Fallout.Build/CICD/BuildServerConfigurationGenerationAttributeBase.cs b/src/Fallout.Build/CICD/BuildServerConfigurationGenerationAttributeBase.cs
index 0a30f7a4b..4cc009066 100644
--- a/src/Fallout.Build/CICD/BuildServerConfigurationGenerationAttributeBase.cs
+++ b/src/Fallout.Build/CICD/BuildServerConfigurationGenerationAttributeBase.cs
@@ -1,11 +1,12 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
-using Fallout.Common.Execution;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Execution;
+using Fallout.Application;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public class BuildServerConfigurationGenerationAttributeBase : BuildExtensionAttributeBase
{
diff --git a/src/Fallout.Build/CICD/CIAttribute.cs b/src/Fallout.Build/CICD/CIAttribute.cs
index 9778a4b2c..8339b38d4 100644
--- a/src/Fallout.Build/CICD/CIAttribute.cs
+++ b/src/Fallout.Build/CICD/CIAttribute.cs
@@ -1,10 +1,12 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Field | AttributeTargets.Property)]
public class CIAttribute : ValueInjectionAttributeBase
diff --git a/src/Fallout.Build/CICD/ChainedConfigurationAttributeBase.cs b/src/Fallout.Build/CICD/ChainedConfigurationAttributeBase.cs
index 16aaa2eec..d7f466c28 100644
--- a/src/Fallout.Build/CICD/ChainedConfigurationAttributeBase.cs
+++ b/src/Fallout.Build/CICD/ChainedConfigurationAttributeBase.cs
@@ -1,10 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Execution;
+using Fallout.Common;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public abstract class ChainedConfigurationAttributeBase : ConfigurationAttributeBase
{
diff --git a/src/Fallout.Build/CICD/ConfigurationAttributeBase.cs b/src/Fallout.Build/CICD/ConfigurationAttributeBase.cs
index aa2304d21..47d487228 100644
--- a/src/Fallout.Build/CICD/ConfigurationAttributeBase.cs
+++ b/src/Fallout.Build/CICD/ConfigurationAttributeBase.cs
@@ -2,12 +2,14 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
-using static Fallout.Common.CI.BuildServerConfigurationGeneration;
+using static Fallout.Application.CI.BuildServerConfigurationGeneration;
+using Fallout.Application;
+using Fallout.Application.Utilities;
+using Fallout.Application.Execution;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
[AttributeUsage(AttributeTargets.Class)]
public abstract class ConfigurationAttributeBase : Attribute, IConfigurationGenerator
diff --git a/src/Fallout.Build/CICD/ConfigurationEntity.cs b/src/Fallout.Build/CICD/ConfigurationEntity.cs
index f04a12d98..de97fc264 100644
--- a/src/Fallout.Build/CICD/ConfigurationEntity.cs
+++ b/src/Fallout.Build/CICD/ConfigurationEntity.cs
@@ -1,8 +1,8 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public abstract class ConfigurationEntity
{
diff --git a/src/Fallout.Build/CICD/CustomFileWriter.cs b/src/Fallout.Build/CICD/CustomFileWriter.cs
index ba334ab2e..32442231d 100644
--- a/src/Fallout.Build/CICD/CustomFileWriter.cs
+++ b/src/Fallout.Build/CICD/CustomFileWriter.cs
@@ -1,8 +1,9 @@
using System;
using System.IO;
using System.Linq;
+using Fallout.Common.Utilities;
-namespace Fallout.Common.Utilities;
+namespace Fallout.Application.Utilities;
public class CustomFileWriter
{
diff --git a/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs b/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs
index bcc716412..cc73a1e42 100644
--- a/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs
+++ b/src/Fallout.Build/CICD/GenerateBuildServerConfigurationsAttribute.cs
@@ -1,11 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.Utilities.Collections;
-using static Fallout.Common.CI.BuildServerConfigurationGeneration;
+using static Fallout.Application.CI.BuildServerConfigurationGeneration;
+using Fallout.Application.Execution;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public class GenerateBuildServerConfigurationsAttribute
: BuildServerConfigurationGenerationAttributeBase, IOnBuildCreated
diff --git a/src/Fallout.Build/CICD/IBuildServer.cs b/src/Fallout.Build/CICD/IBuildServer.cs
index 46cdc1804..f2b4ee24a 100644
--- a/src/Fallout.Build/CICD/IBuildServer.cs
+++ b/src/Fallout.Build/CICD/IBuildServer.cs
@@ -1,5 +1,5 @@
-
-namespace Fallout.Common.CI;
+
+namespace Fallout.Application.CI;
public interface IBuildServer
{
diff --git a/src/Fallout.Build/CICD/IConfigurationGenerator.cs b/src/Fallout.Build/CICD/IConfigurationGenerator.cs
index f6c424531..232392a4a 100644
--- a/src/Fallout.Build/CICD/IConfigurationGenerator.cs
+++ b/src/Fallout.Build/CICD/IConfigurationGenerator.cs
@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
+using Fallout.Application.Execution;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public interface IConfigurationGenerator
{
diff --git a/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs b/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs
index 371214e87..89b57d480 100644
--- a/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs
+++ b/src/Fallout.Build/CICD/InvokeBuildServerConfigurationGenerationAttribute.cs
@@ -1,13 +1,14 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Serilog;
-using static Fallout.Common.CI.BuildServerConfigurationGeneration;
+using static Fallout.Application.CI.BuildServerConfigurationGeneration;
+using Fallout.Application.Execution;
+using Fallout.Application;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public class InvokeBuildServerConfigurationGenerationAttribute
: BuildServerConfigurationGenerationAttributeBase, IOnBuildCreated
diff --git a/src/Fallout.Build/CICD/NoConvertAttribute.cs b/src/Fallout.Build/CICD/NoConvertAttribute.cs
index 6b7faf4ae..7711dfdbc 100644
--- a/src/Fallout.Build/CICD/NoConvertAttribute.cs
+++ b/src/Fallout.Build/CICD/NoConvertAttribute.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
[AttributeUsage(AttributeTargets.Property)]
public class NoConvertAttribute : Attribute
diff --git a/src/Fallout.Build/CICD/Partition.cs b/src/Fallout.Build/CICD/Partition.cs
index 1f66d8df7..9ab944dd6 100644
--- a/src/Fallout.Build/CICD/Partition.cs
+++ b/src/Fallout.Build/CICD/Partition.cs
@@ -4,7 +4,7 @@
using System.Globalization;
using System.Linq;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
[TypeConverter(typeof(TypeConverter))]
public class Partition
diff --git a/src/Fallout.Build/CICD/PartitionAttribute.cs b/src/Fallout.Build/CICD/PartitionAttribute.cs
index 14ed80c19..890249a87 100644
--- a/src/Fallout.Build/CICD/PartitionAttribute.cs
+++ b/src/Fallout.Build/CICD/PartitionAttribute.cs
@@ -1,8 +1,9 @@
using System;
using System.Linq;
using System.Reflection;
+using Fallout.Application;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
public class PartitionAttribute : ParameterAttribute
{
diff --git a/src/Fallout.Build/ControlFlow.cs b/src/Fallout.Build/ControlFlow.cs
index ca8f09cc0..b289d7fa5 100644
--- a/src/Fallout.Build/ControlFlow.cs
+++ b/src/Fallout.Build/ControlFlow.cs
@@ -1,15 +1,16 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Fallout.Common.Utilities;
using Serilog;
+using Fallout.Common;
#pragma warning disable CS0618
// ReSharper disable CompareNonConstrainedGenericWithNull
-namespace Fallout.Common;
+namespace Fallout.Application;
[DebuggerNonUserCode]
[DebuggerStepThrough]
diff --git a/src/Fallout.Build/Execution/BuildExecutor.cs b/src/Fallout.Build/Execution/BuildExecutor.cs
index b1cb733ee..bbffb95f6 100644
--- a/src/Fallout.Build/Execution/BuildExecutor.cs
+++ b/src/Fallout.Build/Execution/BuildExecutor.cs
@@ -7,8 +7,10 @@
using Fallout.Common.Utilities.Collections;
using Fallout.Domain.Execution;
using Serilog;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
///
/// Gradually executes targets of the execution plan.
diff --git a/src/Fallout.Build/Execution/BuildManager.cs b/src/Fallout.Build/Execution/BuildManager.cs
index f0d8daefc..053bf20d3 100644
--- a/src/Fallout.Build/Execution/BuildManager.cs
+++ b/src/Fallout.Build/Execution/BuildManager.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
@@ -10,9 +10,11 @@
using Fallout.Common.Utilities.Collections;
using Fallout.Domain.Execution;
using Serilog;
+using Fallout.Application;
+using Fallout.Application.Tooling;
#pragma warning disable CA2255
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal static class BuildManager
{
diff --git a/src/Fallout.Build/Execution/DelegateRequirementService.cs b/src/Fallout.Build/Execution/DelegateRequirementService.cs
index 88caf5db1..6b172d476 100644
--- a/src/Fallout.Build/Execution/DelegateRequirementService.cs
+++ b/src/Fallout.Build/Execution/DelegateRequirementService.cs
@@ -1,12 +1,15 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.Utilities;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
///
/// Validates all requirements for targets that are part of the execution plan.
diff --git a/src/Fallout.Build/Execution/ExecutableTarget.cs b/src/Fallout.Build/Execution/ExecutableTarget.cs
index 64bcde8c0..81d4699be 100644
--- a/src/Fallout.Build/Execution/ExecutableTarget.cs
+++ b/src/Fallout.Build/Execution/ExecutableTarget.cs
@@ -7,9 +7,10 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Collections;
using Fallout.Domain.Execution;
+using Fallout.Application;
// ReSharper disable MissingBaseTypeHighlighting
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
[DebuggerDisplay($"{{{nameof(Name)}}} ({{{nameof(Status)}}})")]
public class ExecutableTarget : ITargetModel
diff --git a/src/Fallout.Build/Execution/ExecutableTargetFactory.cs b/src/Fallout.Build/Execution/ExecutableTargetFactory.cs
index 137146b8f..0360f1223 100644
--- a/src/Fallout.Build/Execution/ExecutableTargetFactory.cs
+++ b/src/Fallout.Build/Execution/ExecutableTargetFactory.cs
@@ -1,12 +1,14 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
///
/// Creates all target objects according to the build instance.
diff --git a/src/Fallout.Build/Execution/ExecutionPlanner.cs b/src/Fallout.Build/Execution/ExecutionPlanner.cs
index 16450deca..0fd9f8437 100644
--- a/src/Fallout.Build/Execution/ExecutionPlanner.cs
+++ b/src/Fallout.Build/Execution/ExecutionPlanner.cs
@@ -5,8 +5,10 @@
using Fallout.Common.Utilities.Collections;
using Fallout.Domain.Execution;
using Fallout.Domain.Planning;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
///
/// Given the invoked target names, creates an execution plan under consideration of execution, ordering and trigger dependencies.
diff --git a/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs b/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs
index ad53bb3e4..ad7525ce0 100644
--- a/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs
+++ b/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs
@@ -1,8 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using Fallout.Application;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
public interface IBuildExtension
{
diff --git a/src/Fallout.Build/Execution/Extensibility/ToolInjectionAttributeBase.cs b/src/Fallout.Build/Execution/Extensibility/ToolInjectionAttributeBase.cs
index 01fd5cf3c..a904c0440 100644
--- a/src/Fallout.Build/Execution/Extensibility/ToolInjectionAttributeBase.cs
+++ b/src/Fallout.Build/Execution/Extensibility/ToolInjectionAttributeBase.cs
@@ -1,9 +1,10 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
+using Fallout.Common.Tooling;
-namespace Fallout.Common.Tooling;
+namespace Fallout.Application.Tooling;
public abstract class ToolInjectionAttributeBase : ValueInjectionAttributeBase
{
diff --git a/src/Fallout.Build/Execution/Extensibility/ValueInjectionAttributeBase.cs b/src/Fallout.Build/Execution/Extensibility/ValueInjectionAttributeBase.cs
index 70105b78b..d744ac618 100644
--- a/src/Fallout.Build/Execution/Extensibility/ValueInjectionAttributeBase.cs
+++ b/src/Fallout.Build/Execution/Extensibility/ValueInjectionAttributeBase.cs
@@ -3,8 +3,10 @@
using System.Reflection;
using Fallout.Common.Utilities;
using Serilog;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.ValueInjection;
+namespace Fallout.Application.ValueInjection;
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public abstract class ValueInjectionAttributeBase : Attribute
diff --git a/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs b/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs
index cb344c29c..91ce7f91a 100644
--- a/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/ArgumentsFromParametersFileAttribute.cs
@@ -1,16 +1,19 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Nodes;
-using Fallout.Common.CI;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common.ValueInjection;
+using Fallout.Application;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.Utilities;
+using Fallout.Application.CI;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
public class ArgumentsFromParametersFileAttribute : BuildExtensionAttributeBase, IOnBuildCreated
{
diff --git a/src/Fallout.Build/Execution/Extensions/EventInvoker.cs b/src/Fallout.Build/Execution/Extensions/EventInvoker.cs
index d435e3d15..1047b34ed 100644
--- a/src/Fallout.Build/Execution/Extensions/EventInvoker.cs
+++ b/src/Fallout.Build/Execution/Extensions/EventInvoker.cs
@@ -1,8 +1,9 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
+using Fallout.Application;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class EventInvoker : BuildExtensionAttributeBase,
IOnBuildCreated,
diff --git a/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs
index d7a6c50db..f5bac5aaf 100644
--- a/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/HandleHelpRequestsAttribute.cs
@@ -4,9 +4,10 @@
using System.Reflection;
using System.Text;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application;
+using Fallout.Application.ValueInjection;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class HandleHelpRequestsAttribute : BuildExtensionAttributeBase, IOnBuildInitialized
{
diff --git a/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs
index 98d9dfc0d..91f9dfcd8 100644
--- a/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/HandlePlanRequestsAttribute.cs
@@ -1,14 +1,14 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Execution;
-namespace Fallout.Build.Execution.Extensions;
+namespace Fallout.Application.Execution.Extensions;
internal class HandlePlanRequestsAttribute : BuildExtensionAttributeBase, IOnBuildInitialized
{
diff --git a/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs
index 4942df6bd..f2732037d 100644
--- a/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/HandleReSharperSurrogateArgumentsAttribute.cs
@@ -1,11 +1,12 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Fallout.Common.IO;
using Serilog;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class HandleReSharperSurrogateArgumentsAttribute : BuildExtensionAttributeBase, IOnBuildCreated
{
diff --git a/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs
index bd3d13aed..6ebb6aa26 100644
--- a/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/HandleShellCompletionAttribute.cs
@@ -1,12 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.CI;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using static Fallout.Common.Constants;
+using Fallout.Application.CI;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class HandleShellCompletionAttribute : BuildExtensionAttributeBase, IOnBuildCreated
{
diff --git a/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs b/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs
index 492aeeca9..a53759002 100644
--- a/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/HandleVisualStudioDebuggingAttribute.cs
@@ -4,8 +4,10 @@
using System.Linq;
using System.Threading;
using Fallout.Common.IO;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class HandleVisualStudioDebuggingAttribute : BuildExtensionAttributeBase, IOnBuildCreated
{
diff --git a/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs b/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs
index 5f738ada6..88c896a68 100644
--- a/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/InjectNonParameterValuesAttribute.cs
@@ -1,11 +1,12 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
-using Fallout.Common.Execution;
using Fallout.Common.Utilities;
+using Fallout.Application.Execution;
+using Fallout.Application;
-namespace Fallout.Common.ValueInjection;
+namespace Fallout.Application.ValueInjection;
internal class InjectNonParameterValuesAttribute : BuildExtensionAttributeBase, IOnBuildInitialized
{
diff --git a/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs b/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs
index 449c23b01..b109b4f7f 100644
--- a/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/InjectParameterValuesAttribute.cs
@@ -1,9 +1,10 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
+using Fallout.Application;
-namespace Fallout.Common.ValueInjection;
+namespace Fallout.Application.ValueInjection;
internal class InjectParameterValuesAttribute : BuildExtensionAttributeBase, IOnBuildCreated
{
diff --git a/src/Fallout.Build/Execution/Extensions/SerializeBuildServerStateAttribute.cs b/src/Fallout.Build/Execution/Extensions/SerializeBuildServerStateAttribute.cs
index 80eaeebd6..c1e539902 100644
--- a/src/Fallout.Build/Execution/Extensions/SerializeBuildServerStateAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/SerializeBuildServerStateAttribute.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
-namespace Fallout.Common.CI;
+namespace Fallout.Application.CI;
internal class SerializeBuildServerStateAttribute : BuildServerConfigurationGenerationAttributeBase, IOnBuildFinished
{
diff --git a/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs b/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs
index 715e79bfe..7f95d8464 100644
--- a/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/TelemetryAttribute.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class TelemetryAttribute : BuildExtensionAttributeBase, IOnBuildInitialized, IOnTargetSucceeded
{
diff --git a/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs b/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs
index 5841ffc29..03d6c2365 100644
--- a/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs
+++ b/src/Fallout.Build/Execution/Extensions/UpdateNotificationAttribute.cs
@@ -1,11 +1,13 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Fallout.Common.Utilities;
using static Fallout.Common.Constants;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class UpdateNotificationAttribute : BuildExtensionAttributeBase, IOnBuildCreated, IOnBuildFinished
{
diff --git a/src/Fallout.Build/Execution/ParameterService.Statics.cs b/src/Fallout.Build/Execution/ParameterService.Statics.cs
index e8e026b13..1f8de8128 100644
--- a/src/Fallout.Build/Execution/ParameterService.Statics.cs
+++ b/src/Fallout.Build/Execution/ParameterService.Statics.cs
@@ -1,10 +1,11 @@
-using System;
+using System;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Fallout.Common.Utilities;
+using Fallout.Common;
-namespace Fallout.Common;
+namespace Fallout.Application;
internal partial class ParameterService
{
diff --git a/src/Fallout.Build/Execution/ParameterService.cs b/src/Fallout.Build/Execution/ParameterService.cs
index 0197449df..95a35965b 100644
--- a/src/Fallout.Build/Execution/ParameterService.cs
+++ b/src/Fallout.Build/Execution/ParameterService.cs
@@ -7,8 +7,9 @@
using Fallout.Common.Utilities;
using Serilog;
using static Fallout.Common.Utilities.ReflectionUtility;
+using Fallout.Common;
-namespace Fallout.Common;
+namespace Fallout.Application;
internal partial class ParameterService
{
diff --git a/src/Fallout.Build/Execution/TargetDefinition.cs b/src/Fallout.Build/Execution/TargetDefinition.cs
index 64b235b4c..e157e0e0f 100644
--- a/src/Fallout.Build/Execution/TargetDefinition.cs
+++ b/src/Fallout.Build/Execution/TargetDefinition.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
@@ -7,8 +7,11 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application;
+using Fallout.Application.Tooling;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal class TargetDefinition : ITargetDefinition
{
diff --git a/src/Fallout.Build/Execution/TargetExecutionException.cs b/src/Fallout.Build/Execution/TargetExecutionException.cs
index d2e36c91f..b721cb3c4 100644
--- a/src/Fallout.Build/Execution/TargetExecutionException.cs
+++ b/src/Fallout.Build/Execution/TargetExecutionException.cs
@@ -2,7 +2,7 @@
using System.Linq;
using System.Runtime.Serialization;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
[Serializable]
internal class TargetExecutionException : Exception
diff --git a/src/Fallout.Build/Execution/ToolRequirementService.cs b/src/Fallout.Build/Execution/ToolRequirementService.cs
index 229947250..408b87729 100644
--- a/src/Fallout.Build/Execution/ToolRequirementService.cs
+++ b/src/Fallout.Build/Execution/ToolRequirementService.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
@@ -6,8 +6,10 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Serilog;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal static class ToolRequirementService
{
diff --git a/src/Fallout.Build/Execution/ValueInjectionUtility.cs b/src/Fallout.Build/Execution/ValueInjectionUtility.cs
index 8d637a3e9..917489c70 100644
--- a/src/Fallout.Build/Execution/ValueInjectionUtility.cs
+++ b/src/Fallout.Build/Execution/ValueInjectionUtility.cs
@@ -1,12 +1,14 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.ValueInjection;
+namespace Fallout.Application.ValueInjection;
internal static class ValueInjectionUtility
{
diff --git a/src/Fallout.Build/FalloutBuild.Events.cs b/src/Fallout.Build/FalloutBuild.Events.cs
index 2b44e2a19..def3548b6 100644
--- a/src/Fallout.Build/FalloutBuild.Events.cs
+++ b/src/Fallout.Build/FalloutBuild.Events.cs
@@ -1,14 +1,14 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
-using Fallout.Common.Execution;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using Serilog;
+using Fallout.Application.Execution;
-namespace Fallout.Common;
+namespace Fallout.Application;
[EventInvoker(Priority = float.MinValue)]
public abstract partial class FalloutBuild
diff --git a/src/Fallout.Build/FalloutBuild.Interface.cs b/src/Fallout.Build/FalloutBuild.Interface.cs
index 815f1c712..18e1c6861 100644
--- a/src/Fallout.Build/FalloutBuild.Interface.cs
+++ b/src/Fallout.Build/FalloutBuild.Interface.cs
@@ -1,11 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.Execution;
+using Fallout.Application.ValueInjection;
-namespace Fallout.Common;
+namespace Fallout.Application;
public abstract partial class FalloutBuild
{
diff --git a/src/Fallout.Build/FalloutBuild.Output.cs b/src/Fallout.Build/FalloutBuild.Output.cs
index b8eab31fa..71a6d64fc 100644
--- a/src/Fallout.Build/FalloutBuild.Output.cs
+++ b/src/Fallout.Build/FalloutBuild.Output.cs
@@ -1,9 +1,9 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.Utilities;
-namespace Fallout.Common;
+namespace Fallout.Application;
partial class FalloutBuild
{
diff --git a/src/Fallout.Build/FalloutBuild.Statics.cs b/src/Fallout.Build/FalloutBuild.Statics.cs
index 2f1dfc285..2b7dd692e 100644
--- a/src/Fallout.Build/FalloutBuild.Statics.cs
+++ b/src/Fallout.Build/FalloutBuild.Statics.cs
@@ -1,15 +1,16 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using System.Reflection;
-using Fallout.Common.CI;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Constants;
+using Fallout.Application.Execution;
+using Fallout.Application.CI;
+using Fallout.Common;
-namespace Fallout.Common;
+namespace Fallout.Application;
public abstract partial class FalloutBuild
{
diff --git a/src/Fallout.Build/FalloutBuild.cs b/src/Fallout.Build/FalloutBuild.cs
index 9f00da1f6..16d90fbee 100644
--- a/src/Fallout.Build/FalloutBuild.cs
+++ b/src/Fallout.Build/FalloutBuild.cs
@@ -1,21 +1,22 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
-using Fallout.Build.Execution.Extensions;
-using Fallout.Common.CI;
-using Fallout.Common.Execution;
using Fallout.Domain.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
using static Fallout.Common.Constants;
+using Fallout.Application.Execution;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.CI;
+using Fallout.Application.Execution.Extensions;
+using Fallout.Common;
// ReSharper disable VirtualMemberNeverOverridden.Global
-namespace Fallout.Common;
+namespace Fallout.Application;
///
/// Base class for build definitions. Derived types must declare static int Main which calls
diff --git a/src/Fallout.Build/Host.Activation.cs b/src/Fallout.Build/Host.Activation.cs
index 8d611ed92..88537473f 100644
--- a/src/Fallout.Build/Host.Activation.cs
+++ b/src/Fallout.Build/Host.Activation.cs
@@ -1,12 +1,13 @@
-using System;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.Utilities;
+using Fallout.Application.Execution;
+using Fallout.Common;
-namespace Fallout.Common;
+namespace Fallout.Application;
public partial class Host
{
diff --git a/src/Fallout.Build/Host.Theming.cs b/src/Fallout.Build/Host.Theming.cs
index 5ce359718..8f7f989fe 100644
--- a/src/Fallout.Build/Host.Theming.cs
+++ b/src/Fallout.Build/Host.Theming.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
-namespace Fallout.Common;
+namespace Fallout.Application;
public partial class Host
{
diff --git a/src/Fallout.Build/Host.cs b/src/Fallout.Build/Host.cs
index 413cb6bb9..1c99da094 100644
--- a/src/Fallout.Build/Host.cs
+++ b/src/Fallout.Build/Host.cs
@@ -1,18 +1,19 @@
-using System;
+using System;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Domain.Execution;
-using Fallout.Common.Execution.Theming;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using Serilog;
using Serilog.Core;
using Serilog.Events;
using Serilog.Sinks.SystemConsole.Themes;
+using Fallout.Application.Execution.Theming;
+using Fallout.Application.Execution;
+using Fallout.Common;
-namespace Fallout.Common;
+namespace Fallout.Application;
[TypeConverter(typeof(TypeConverter))]
public partial class Host
diff --git a/src/Fallout.Build/IFalloutBuild.cs b/src/Fallout.Build/IFalloutBuild.cs
index 7a0a4fb6a..d2bf0d88c 100644
--- a/src/Fallout.Build/IFalloutBuild.cs
+++ b/src/Fallout.Build/IFalloutBuild.cs
@@ -2,12 +2,12 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
-using Fallout.Common.CI;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
+using Fallout.Application.Execution;
+using Fallout.Application.CI;
-namespace Fallout.Common;
+namespace Fallout.Application;
public interface IFalloutBuild
{
diff --git a/src/Fallout.Build/ITargetDefinition.cs b/src/Fallout.Build/ITargetDefinition.cs
index 6e7af941a..2b4fcf398 100644
--- a/src/Fallout.Build/ITargetDefinition.cs
+++ b/src/Fallout.Build/ITargetDefinition.cs
@@ -1,11 +1,11 @@
-using System;
+using System;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Fallout.Common.Tooling;
-namespace Fallout.Common;
+namespace Fallout.Application;
///
/// Public API for defining targets.
diff --git a/src/Fallout.Build/LogLevel.cs b/src/Fallout.Build/LogLevel.cs
index 8a6982e8a..3e9ef55c4 100644
--- a/src/Fallout.Build/LogLevel.cs
+++ b/src/Fallout.Build/LogLevel.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-namespace Fallout.Common;
+namespace Fallout.Application;
public enum LogLevel
{
diff --git a/src/Fallout.Build/Logging.cs b/src/Fallout.Build/Logging.cs
index 9d99f5052..1d91b91c0 100644
--- a/src/Fallout.Build/Logging.cs
+++ b/src/Fallout.Build/Logging.cs
@@ -1,9 +1,7 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using Fallout.Common.CI;
-using Fallout.Common.Execution.Theming;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
@@ -12,8 +10,13 @@
using Serilog.Events;
using Serilog.Formatting.Compact;
using Serilog.Sinks.SystemConsole.Themes;
+using Fallout.Application.Execution.Theming;
+using Fallout.Application;
+using Fallout.Application.CI;
+using Fallout.Application.Execution;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
public static class Logging
{
diff --git a/src/Fallout.Build/ParameterAttribute.cs b/src/Fallout.Build/ParameterAttribute.cs
index 8767af603..410672017 100644
--- a/src/Fallout.Build/ParameterAttribute.cs
+++ b/src/Fallout.Build/ParameterAttribute.cs
@@ -1,11 +1,11 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
-namespace Fallout.Common;
+namespace Fallout.Application;
///
/// Injected parameters are resolved case-insensitively in the following order:
diff --git a/src/Fallout.Build/RequiresAttribute.cs b/src/Fallout.Build/RequiresAttribute.cs
index ffde922ed..2c6cbdf9d 100644
--- a/src/Fallout.Build/RequiresAttribute.cs
+++ b/src/Fallout.Build/RequiresAttribute.cs
@@ -1,9 +1,10 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.Tooling;
+using Fallout.Common;
-namespace Fallout.Common;
+namespace Fallout.Application;
public abstract class RequiresAttribute : Attribute
{
diff --git a/src/Fallout.Build/Target.cs b/src/Fallout.Build/Target.cs
index 38dd3c3e8..59ca43f98 100644
--- a/src/Fallout.Build/Target.cs
+++ b/src/Fallout.Build/Target.cs
@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
-namespace Fallout.Common;
+namespace Fallout.Application;
///
/// Defines a target.
diff --git a/src/Fallout.Build/Telemetry/Telemetry.Events.cs b/src/Fallout.Build/Telemetry/Telemetry.Events.cs
index ee01b590e..db09a1efb 100644
--- a/src/Fallout.Build/Telemetry/Telemetry.Events.cs
+++ b/src/Fallout.Build/Telemetry/Telemetry.Events.cs
@@ -1,12 +1,14 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using Fallout.Domain.Execution;
using Serilog;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal partial class Telemetry
{
diff --git a/src/Fallout.Build/Telemetry/Telemetry.Properties.cs b/src/Fallout.Build/Telemetry/Telemetry.Properties.cs
index 11c2cf702..7d6fd2734 100644
--- a/src/Fallout.Build/Telemetry/Telemetry.Properties.cs
+++ b/src/Fallout.Build/Telemetry/Telemetry.Properties.cs
@@ -1,17 +1,19 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
-using Fallout.Common.CI;
-using Fallout.Common.Git;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common.ValueInjection;
+using Fallout.Application;
+using Fallout.Application.Git;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.CI;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal partial class Telemetry
{
diff --git a/src/Fallout.Build/Telemetry/Telemetry.cs b/src/Fallout.Build/Telemetry/Telemetry.cs
index 0f7878410..8323edde9 100644
--- a/src/Fallout.Build/Telemetry/Telemetry.cs
+++ b/src/Fallout.Build/Telemetry/Telemetry.cs
@@ -1,13 +1,15 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using System.Threading;
using Fallout.Common.IO;
using Fallout.Solutions;
using Fallout.Common.Utilities;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
+using Fallout.Application;
+using Fallout.Common;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
internal static partial class Telemetry
{
diff --git a/src/Fallout.Build/Terminal.cs b/src/Fallout.Build/Terminal.cs
index 2ed103e21..4881489fd 100644
--- a/src/Fallout.Build/Terminal.cs
+++ b/src/Fallout.Build/Terminal.cs
@@ -1,8 +1,9 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
public class Terminal : Host
{
diff --git a/src/Fallout.Build/Theming/AnsiConsoleHostTheme.cs b/src/Fallout.Build/Theming/AnsiConsoleHostTheme.cs
index cdb0e2ddf..ac3392492 100644
--- a/src/Fallout.Build/Theming/AnsiConsoleHostTheme.cs
+++ b/src/Fallout.Build/Theming/AnsiConsoleHostTheme.cs
@@ -1,10 +1,10 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using Fallout.Common.Utilities;
using Serilog.Sinks.SystemConsole.Themes;
-namespace Fallout.Common.Execution.Theming;
+namespace Fallout.Application.Execution.Theming;
public class AnsiConsoleHostTheme : AnsiConsoleTheme, IHostTheme
{
diff --git a/src/Fallout.Build/Theming/IHostTheme.cs b/src/Fallout.Build/Theming/IHostTheme.cs
index c5ad6ce1c..4ca3e3dd6 100644
--- a/src/Fallout.Build/Theming/IHostTheme.cs
+++ b/src/Fallout.Build/Theming/IHostTheme.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-namespace Fallout.Common.Execution.Theming;
+namespace Fallout.Application.Execution.Theming;
public interface IHostTheme
{
diff --git a/src/Fallout.Build/Theming/SystemConsoleHostTheme.cs b/src/Fallout.Build/Theming/SystemConsoleHostTheme.cs
index 826468ada..9e247c77b 100644
--- a/src/Fallout.Build/Theming/SystemConsoleHostTheme.cs
+++ b/src/Fallout.Build/Theming/SystemConsoleHostTheme.cs
@@ -1,10 +1,10 @@
-using System;
+using System;
using System.Collections.Generic;
using Fallout.Common.Utilities;
using Serilog;
using Serilog.Sinks.SystemConsole.Themes;
-namespace Fallout.Common.Execution.Theming;
+namespace Fallout.Application.Execution.Theming;
public class SystemConsoleHostTheme : SystemConsoleTheme, IHostTheme
{
diff --git a/src/Fallout.Build/Utilities/ConsoleUtility.cs b/src/Fallout.Build/Utilities/ConsoleUtility.cs
index 1e59cb972..8bac101a4 100644
--- a/src/Fallout.Build/Utilities/ConsoleUtility.cs
+++ b/src/Fallout.Build/Utilities/ConsoleUtility.cs
@@ -2,8 +2,11 @@
using System.Drawing;
using System.Linq;
using System.Text;
+using Fallout.Application;
+using Fallout.Common;
+using Fallout.Common.Utilities;
-namespace Fallout.Common.Utilities;
+namespace Fallout.Application.Utilities;
public class ConsoleUtility
{
diff --git a/src/Fallout.Build/Utilities/CredentialStore.cs b/src/Fallout.Build/Utilities/CredentialStore.cs
index 58c2aa9af..f38d495de 100644
--- a/src/Fallout.Build/Utilities/CredentialStore.cs
+++ b/src/Fallout.Build/Utilities/CredentialStore.cs
@@ -1,8 +1,11 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Tooling;
+using Fallout.Application;
+using Fallout.Common;
+using Fallout.Common.Utilities;
-namespace Fallout.Common.Utilities;
+namespace Fallout.Application.Utilities;
public static class CredentialStore
{
diff --git a/src/Fallout.Build/Utilities/SchemaUtility.cs b/src/Fallout.Build/Utilities/SchemaUtility.cs
index 7c6e5c171..09449610c 100644
--- a/src/Fallout.Build/Utilities/SchemaUtility.cs
+++ b/src/Fallout.Build/Utilities/SchemaUtility.cs
@@ -10,10 +10,13 @@
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
using static Fallout.Common.Constants;
+using Fallout.Application;
+using Fallout.Application.ValueInjection;
+using Fallout.Common;
+using Fallout.Application.Execution;
-namespace Fallout.Common.Execution;
+namespace Fallout.Application.Execution;
///
/// Generates a draft-04 JSON Schema for a build's [Parameter]-attributed members so editors
diff --git a/src/Fallout.Build/VCS/GitRepository.cs b/src/Fallout.Build/VCS/GitRepository.cs
index b97e2c3d5..b966b0865 100644
--- a/src/Fallout.Build/VCS/GitRepository.cs
+++ b/src/Fallout.Build/VCS/GitRepository.cs
@@ -2,11 +2,13 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
-using Fallout.Common.CI;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
+using Fallout.Application;
+using Fallout.Application.CI;
+using Fallout.Common;
-namespace Fallout.Common.Git;
+namespace Fallout.Application.Git;
public enum GitProtocol
{
diff --git a/src/Fallout.Build/VCS/GitRepositoryExtensions.cs b/src/Fallout.Build/VCS/GitRepositoryExtensions.cs
index aa9806ae8..b2de5742e 100644
--- a/src/Fallout.Build/VCS/GitRepositoryExtensions.cs
+++ b/src/Fallout.Build/VCS/GitRepositoryExtensions.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
-namespace Fallout.Common.Git;
+namespace Fallout.Application.Git;
public static class GitRepositoryExtensions
{
diff --git a/src/Fallout.Build/Verbosity.cs b/src/Fallout.Build/Verbosity.cs
index 125ec5e1c..9f48bba0c 100644
--- a/src/Fallout.Build/Verbosity.cs
+++ b/src/Fallout.Build/Verbosity.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-namespace Fallout.Common;
+namespace Fallout.Application;
public enum Verbosity
{
diff --git a/src/Fallout.Cli/Program.AddPackage.cs b/src/Fallout.Cli/Program.AddPackage.cs
index ea6d28cf5..816e859e1 100644
--- a/src/Fallout.Cli/Program.AddPackage.cs
+++ b/src/Fallout.Cli/Program.AddPackage.cs
@@ -1,11 +1,12 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Solutions;
using Fallout.Common.Tooling;
using Fallout.Common.Tools.DotNet;
+using Fallout.Application.Execution;
+using Fallout.Application;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Program.Cake.cs b/src/Fallout.Cli/Program.Cake.cs
index 6169798d1..728e8a33f 100644
--- a/src/Fallout.Cli/Program.Cake.cs
+++ b/src/Fallout.Cli/Program.Cake.cs
@@ -1,10 +1,9 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Fallout.Common;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Solutions;
using Fallout.Common.Tooling;
@@ -12,6 +11,8 @@
using Fallout.Cli.Rewriting.Cake;
using static Fallout.Common.Constants;
using static Fallout.Common.EnvironmentInfo;
+using Fallout.Application.Execution;
+using Fallout.Application;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Program.GetConfiguration.cs b/src/Fallout.Cli/Program.GetConfiguration.cs
index 6600b3273..03004adfb 100644
--- a/src/Fallout.Cli/Program.GetConfiguration.cs
+++ b/src/Fallout.Cli/Program.GetConfiguration.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -6,6 +6,7 @@
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Program.Secrets.cs b/src/Fallout.Cli/Program.Secrets.cs
index d6dfc277a..3db43c42d 100644
--- a/src/Fallout.Cli/Program.Secrets.cs
+++ b/src/Fallout.Cli/Program.Secrets.cs
@@ -8,6 +8,8 @@
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Constants;
using static Fallout.Common.Utilities.EncryptionUtility;
+using Fallout.Application;
+using Fallout.Application.Utilities;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Program.Setup.cs b/src/Fallout.Cli/Program.Setup.cs
index 36bbf1019..5c662cd26 100644
--- a/src/Fallout.Cli/Program.Setup.cs
+++ b/src/Fallout.Cli/Program.Setup.cs
@@ -5,7 +5,6 @@
using System.Reflection;
using System.Text;
using Fallout.Common;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
@@ -15,6 +14,8 @@
using static Fallout.Common.EnvironmentInfo;
using static Fallout.Common.Tooling.ProcessTasks;
using static Fallout.Common.Utilities.TemplateUtility;
+using Fallout.Application.Execution;
+using Fallout.Application;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Program.Trigger.cs b/src/Fallout.Cli/Program.Trigger.cs
index 1497e5626..3b4154372 100644
--- a/src/Fallout.Cli/Program.Trigger.cs
+++ b/src/Fallout.Cli/Program.Trigger.cs
@@ -1,10 +1,10 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common;
-using Fallout.Common.Git;
using Fallout.Common.IO;
using Fallout.Common.Tools.Git;
using Fallout.Common.Utilities;
+using Fallout.Application.Git;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Program.Update.cs b/src/Fallout.Cli/Program.Update.cs
index 145bf805c..1a36e0e17 100644
--- a/src/Fallout.Cli/Program.Update.cs
+++ b/src/Fallout.Cli/Program.Update.cs
@@ -1,14 +1,15 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using System.Text.Json.Nodes;
using Fallout.Common;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Solutions;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Utilities;
using static Fallout.Common.Constants;
+using Fallout.Application.Execution;
+using Fallout.Application;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Program.cs b/src/Fallout.Cli/Program.cs
index 1702ab81a..f68cda890 100644
--- a/src/Fallout.Cli/Program.cs
+++ b/src/Fallout.Cli/Program.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using System.Text;
@@ -6,6 +6,7 @@
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Spectre.Console;
+using Fallout.Application;
namespace Fallout.Cli;
diff --git a/src/Fallout.Cli/Rewriting/Cake/ClassRewriter.cs b/src/Fallout.Cli/Rewriting/Cake/ClassRewriter.cs
index 9bfe9e402..f7490da4f 100644
--- a/src/Fallout.Cli/Rewriting/Cake/ClassRewriter.cs
+++ b/src/Fallout.Cli/Rewriting/Cake/ClassRewriter.cs
@@ -10,6 +10,7 @@
using Fallout.Common.Tools.NuGet;
using Fallout.Common.Tools.SignTool;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+using Fallout.Application;
namespace Fallout.Cli.Rewriting.Cake;
diff --git a/src/Fallout.Cli/Rewriting/Cake/FormattingRewriter.cs b/src/Fallout.Cli/Rewriting/Cake/FormattingRewriter.cs
index 63a84b8ad..2b1db73cd 100644
--- a/src/Fallout.Cli/Rewriting/Cake/FormattingRewriter.cs
+++ b/src/Fallout.Cli/Rewriting/Cake/FormattingRewriter.cs
@@ -5,6 +5,7 @@
using Fallout.Common;
using Fallout.Common.Utilities.Collections;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+using Fallout.Application;
namespace Fallout.Cli.Rewriting.Cake;
diff --git a/src/Fallout.Cli/Rewriting/Cake/InvocationRewriter.cs b/src/Fallout.Cli/Rewriting/Cake/InvocationRewriter.cs
index c30b3efcf..0960cd80c 100644
--- a/src/Fallout.Cli/Rewriting/Cake/InvocationRewriter.cs
+++ b/src/Fallout.Cli/Rewriting/Cake/InvocationRewriter.cs
@@ -7,6 +7,7 @@
using Fallout.Common.IO;
using Serilog;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+using Fallout.Application;
namespace Fallout.Cli.Rewriting.Cake;
diff --git a/src/Fallout.Cli/Rewriting/Cake/SafeSyntaxRewriter.cs b/src/Fallout.Cli/Rewriting/Cake/SafeSyntaxRewriter.cs
index e0614e8c6..7e0cf59c8 100644
--- a/src/Fallout.Cli/Rewriting/Cake/SafeSyntaxRewriter.cs
+++ b/src/Fallout.Cli/Rewriting/Cake/SafeSyntaxRewriter.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
-using Fallout.Common;
+using Fallout.Application;
namespace Fallout.Cli.Rewriting.Cake;
diff --git a/src/Fallout.Cli/Rewriting/Cake/TargetDefinitionRewriter.cs b/src/Fallout.Cli/Rewriting/Cake/TargetDefinitionRewriter.cs
index 0738e4eac..b37a9605e 100644
--- a/src/Fallout.Cli/Rewriting/Cake/TargetDefinitionRewriter.cs
+++ b/src/Fallout.Cli/Rewriting/Cake/TargetDefinitionRewriter.cs
@@ -5,6 +5,7 @@
using Fallout.Common;
using Fallout.Common.Utilities.Collections;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+using Fallout.Application;
namespace Fallout.Cli.Rewriting.Cake;
diff --git a/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs b/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs
index 26b24376b..610133e07 100644
--- a/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs
+++ b/src/Fallout.Common/Attributes/CheckPathEnvironmentVariableAttribute.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using Fallout.Common.Tooling;
+using Fallout.Application.Execution;
namespace Fallout.Common.Execution;
diff --git a/src/Fallout.Common/Attributes/FileSystemGlobbingAttributeBase.cs b/src/Fallout.Common/Attributes/FileSystemGlobbingAttributeBase.cs
index dd4fd9de7..f72700717 100644
--- a/src/Fallout.Common/Attributes/FileSystemGlobbingAttributeBase.cs
+++ b/src/Fallout.Common/Attributes/FileSystemGlobbingAttributeBase.cs
@@ -1,9 +1,10 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application;
namespace Fallout.Common.IO;
diff --git a/src/Fallout.Common/Attributes/GitRepositoryAttribute.cs b/src/Fallout.Common/Attributes/GitRepositoryAttribute.cs
index 9b6d80a07..beb70d71f 100644
--- a/src/Fallout.Common/Attributes/GitRepositoryAttribute.cs
+++ b/src/Fallout.Common/Attributes/GitRepositoryAttribute.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.Git;
namespace Fallout.Common.Git;
diff --git a/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs b/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs
index 5f84f04ff..8ddd578c9 100644
--- a/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs
+++ b/src/Fallout.Common/Attributes/GlobbingOptionsAttribute.cs
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
namespace Fallout.Common.IO;
diff --git a/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs b/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs
index 3034762ee..e28185e03 100644
--- a/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs
+++ b/src/Fallout.Common/Attributes/HandleSingleFileExecutionAttribute.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -10,6 +10,7 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Serilog;
+using Fallout.Application.Execution;
namespace Fallout.Common.Execution;
diff --git a/src/Fallout.Common/Attributes/LatestGitHubReleaseAttribute.cs b/src/Fallout.Common/Attributes/LatestGitHubReleaseAttribute.cs
index 5149b0cfb..7bfa03c63 100644
--- a/src/Fallout.Common/Attributes/LatestGitHubReleaseAttribute.cs
+++ b/src/Fallout.Common/Attributes/LatestGitHubReleaseAttribute.cs
@@ -1,12 +1,12 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using NuGet.Versioning;
-using Fallout.Common.Git;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.Git;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/LatestMavenVersionAttribute.cs b/src/Fallout.Common/Attributes/LatestMavenVersionAttribute.cs
index aafdd04c2..e9e55ba4c 100644
--- a/src/Fallout.Common/Attributes/LatestMavenVersionAttribute.cs
+++ b/src/Fallout.Common/Attributes/LatestMavenVersionAttribute.cs
@@ -1,10 +1,10 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using NuGet.Versioning;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/LatestMyGetVersionAttribute.cs b/src/Fallout.Common/Attributes/LatestMyGetVersionAttribute.cs
index ddbbd899a..67935f34d 100644
--- a/src/Fallout.Common/Attributes/LatestMyGetVersionAttribute.cs
+++ b/src/Fallout.Common/Attributes/LatestMyGetVersionAttribute.cs
@@ -1,9 +1,9 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/LatestNpmVersionAttribute.cs b/src/Fallout.Common/Attributes/LatestNpmVersionAttribute.cs
index 4a1383cab..da5eca413 100644
--- a/src/Fallout.Common/Attributes/LatestNpmVersionAttribute.cs
+++ b/src/Fallout.Common/Attributes/LatestNpmVersionAttribute.cs
@@ -1,9 +1,9 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using NuGet.Versioning;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/LatestNuGetVersionAttribute.cs b/src/Fallout.Common/Attributes/LatestNuGetVersionAttribute.cs
index fe7ca7919..fa0ad9f06 100644
--- a/src/Fallout.Common/Attributes/LatestNuGetVersionAttribute.cs
+++ b/src/Fallout.Common/Attributes/LatestNuGetVersionAttribute.cs
@@ -1,9 +1,9 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using NuGet.Versioning;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/LocalPathAttribute.cs b/src/Fallout.Common/Attributes/LocalPathAttribute.cs
index b71e0e74d..6879d4577 100644
--- a/src/Fallout.Common/Attributes/LocalPathAttribute.cs
+++ b/src/Fallout.Common/Attributes/LocalPathAttribute.cs
@@ -1,8 +1,9 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using System.Reflection;
using Fallout.Common.IO;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/NpmPackageAttribute.cs b/src/Fallout.Common/Attributes/NpmPackageAttribute.cs
index 4b7644046..76e6a2a85 100644
--- a/src/Fallout.Common/Attributes/NpmPackageAttribute.cs
+++ b/src/Fallout.Common/Attributes/NpmPackageAttribute.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/NuGetPackageAttribute.cs b/src/Fallout.Common/Attributes/NuGetPackageAttribute.cs
index 4fd17d51a..93c7b027c 100644
--- a/src/Fallout.Common/Attributes/NuGetPackageAttribute.cs
+++ b/src/Fallout.Common/Attributes/NuGetPackageAttribute.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/PathVariableAttribute.cs b/src/Fallout.Common/Attributes/PathVariableAttribute.cs
index 92a6adf89..7de8915b5 100644
--- a/src/Fallout.Common/Attributes/PathVariableAttribute.cs
+++ b/src/Fallout.Common/Attributes/PathVariableAttribute.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tooling;
diff --git a/src/Fallout.Common/Attributes/SolutionAttribute.cs b/src/Fallout.Common/Attributes/SolutionAttribute.cs
index a2b46d5b4..f3428b56d 100644
--- a/src/Fallout.Common/Attributes/SolutionAttribute.cs
+++ b/src/Fallout.Common/Attributes/SolutionAttribute.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.IO;
@@ -6,6 +6,7 @@
using Serilog;
using Fallout.Common;
+using Fallout.Application;
namespace Fallout.Solutions;
diff --git a/src/Fallout.Common/CI/AppVeyor/AppVeyor.Theming.cs b/src/Fallout.Common/CI/AppVeyor/AppVeyor.Theming.cs
index 9dd8b4413..39ec10ca8 100644
--- a/src/Fallout.Common/CI/AppVeyor/AppVeyor.Theming.cs
+++ b/src/Fallout.Common/CI/AppVeyor/AppVeyor.Theming.cs
@@ -1,6 +1,6 @@
-using System.Collections.Generic;
-using Fallout.Common.Execution.Theming;
+using System.Collections.Generic;
using Serilog.Sinks.SystemConsole.Themes;
+using Fallout.Application.Execution.Theming;
namespace Fallout.Common.CI.AppVeyor;
diff --git a/src/Fallout.Common/CI/AppVeyor/AppVeyor.cs b/src/Fallout.Common/CI/AppVeyor/AppVeyor.cs
index a9d32edbc..129c2679a 100644
--- a/src/Fallout.Common/CI/AppVeyor/AppVeyor.cs
+++ b/src/Fallout.Common/CI/AppVeyor/AppVeyor.cs
@@ -4,6 +4,8 @@
using System.Linq;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
+using Fallout.Application;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.AppVeyor;
//
diff --git a/src/Fallout.Common/CI/AppVeyor/AppVeyorAttribute.cs b/src/Fallout.Common/CI/AppVeyor/AppVeyorAttribute.cs
index a0ea0d3b2..c98e2c6d1 100644
--- a/src/Fallout.Common/CI/AppVeyor/AppVeyorAttribute.cs
+++ b/src/Fallout.Common/CI/AppVeyor/AppVeyorAttribute.cs
@@ -4,10 +4,11 @@
using System.Linq;
using System.Reflection;
using Fallout.Common.CI.AppVeyor.Configuration;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
-using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
+using Fallout.Application.Execution;
namespace Fallout.Common.CI.AppVeyor;
diff --git a/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorBranches.cs b/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorBranches.cs
index cb2f721f8..339ad30d7 100644
--- a/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorBranches.cs
+++ b/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorBranches.cs
@@ -1,7 +1,8 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AppVeyor.Configuration;
diff --git a/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorConfiguration.cs b/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorConfiguration.cs
index 4e76c58d6..8744d042a 100644
--- a/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorConfiguration.cs
+++ b/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorConfiguration.cs
@@ -4,6 +4,8 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AppVeyor.Configuration;
diff --git a/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorCustomWriterExtensions.cs b/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorCustomWriterExtensions.cs
index 5e753554a..55c223b22 100644
--- a/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorCustomWriterExtensions.cs
+++ b/src/Fallout.Common/CI/AppVeyor/Configuration/AppVeyorCustomWriterExtensions.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AppVeyor.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.Theming.cs b/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.Theming.cs
index 160de8739..942880149 100644
--- a/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.Theming.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.Theming.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Collections.Generic;
-using Fallout.Common.Execution.Theming;
using Fallout.Common.Utilities;
using Serilog.Sinks.SystemConsole.Themes;
+using Fallout.Application.Execution.Theming;
namespace Fallout.Common.CI.AzurePipelines;
diff --git a/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.cs b/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.cs
index 93f66e267..50df16a23 100644
--- a/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/AzurePipelines.cs
@@ -1,9 +1,11 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.AzurePipelines;
diff --git a/src/Fallout.Common/CI/AzurePipelines/AzurePipelinesAttribute.cs b/src/Fallout.Common/CI/AzurePipelines/AzurePipelinesAttribute.cs
index b6bf766b9..2c5f41baf 100644
--- a/src/Fallout.Common/CI/AzurePipelines/AzurePipelinesAttribute.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/AzurePipelinesAttribute.cs
@@ -1,14 +1,16 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Fallout.Common.CI.AzurePipelines.Configuration;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.IO.PathConstruction;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
+using Fallout.Application.Execution;
namespace Fallout.Common.CI.AzurePipelines;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelineCheckoutStep.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelineCheckoutStep.cs
index 3b1633d9b..f7b91f414 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelineCheckoutStep.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelineCheckoutStep.cs
@@ -1,4 +1,4 @@
-using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCacheStep.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCacheStep.cs
index 555712c7b..8a78d0384 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCacheStep.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCacheStep.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Tooling;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCmdStep.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCmdStep.cs
index 1a9b7ed80..58a8dbcc6 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCmdStep.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCmdStep.cs
@@ -1,8 +1,9 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesConfiguration.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesConfiguration.cs
index 327fa509b..1ff728f08 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesConfiguration.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesConfiguration.cs
@@ -1,5 +1,6 @@
-using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCustomWriterExtensions.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCustomWriterExtensions.cs
index 0d86dbd2d..4d9b63f8f 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCustomWriterExtensions.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesCustomWriterExtensions.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesDownloadStep.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesDownloadStep.cs
index 759ff7fab..379b2b108 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesDownloadStep.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesDownloadStep.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesJob.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesJob.cs
index 90ad9ba37..e1f19fe3b 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesJob.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesJob.cs
@@ -3,6 +3,8 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesPublishStep.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesPublishStep.cs
index de71af96a..e43dcd145 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesPublishStep.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesPublishStep.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStage.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStage.cs
index 749858e6d..0fee503b5 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStage.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStage.cs
@@ -3,6 +3,8 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStep.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStep.cs
index c25fb30ba..dde174943 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStep.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesStep.cs
@@ -1,5 +1,6 @@
-using System;
+using System;
using System.Linq;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesVcsPushTrigger.cs b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesVcsPushTrigger.cs
index a5bc905e2..b44327db3 100644
--- a/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesVcsPushTrigger.cs
+++ b/src/Fallout.Common/CI/AzurePipelines/Configuration/AzurePipelinesVcsPushTrigger.cs
@@ -1,6 +1,7 @@
-using System.Collections.Generic;
-using Fallout.Common.Utilities;
+using System.Collections.Generic;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.AzurePipelines.Configuration;
diff --git a/src/Fallout.Common/CI/Bamboo/Bamboo.cs b/src/Fallout.Common/CI/Bamboo/Bamboo.cs
index a963ae45c..8afb45267 100644
--- a/src/Fallout.Common/CI/Bamboo/Bamboo.cs
+++ b/src/Fallout.Common/CI/Bamboo/Bamboo.cs
@@ -1,5 +1,7 @@
-using System;
+using System;
using System.Diagnostics.CodeAnalysis;
+using Fallout.Application.CI;
+using Fallout.Application;
namespace Fallout.Common.CI.Bamboo;
diff --git a/src/Fallout.Common/CI/Bitbucket/Bitbucket.cs b/src/Fallout.Common/CI/Bitbucket/Bitbucket.cs
index cc79eabf9..b311a1b41 100644
--- a/src/Fallout.Common/CI/Bitbucket/Bitbucket.cs
+++ b/src/Fallout.Common/CI/Bitbucket/Bitbucket.cs
@@ -1,6 +1,8 @@
-using System;
+using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using Fallout.Application.CI;
+using Fallout.Application;
namespace Fallout.Common.CI.Bitbucket;
diff --git a/src/Fallout.Common/CI/Bitrise/Bitrise.cs b/src/Fallout.Common/CI/Bitrise/Bitrise.cs
index 3a6920d61..c51d488c0 100644
--- a/src/Fallout.Common/CI/Bitrise/Bitrise.cs
+++ b/src/Fallout.Common/CI/Bitrise/Bitrise.cs
@@ -1,6 +1,8 @@
-using System;
+using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using Fallout.Application;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.Bitrise;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsArtifactStep.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsArtifactStep.cs
index ae5269c64..6e405afa5 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsArtifactStep.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsArtifactStep.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCacheStep.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCacheStep.cs
index d1fb7da89..83b7c9582 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCacheStep.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCacheStep.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCheckoutStep.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCheckoutStep.cs
index 2f2cdb624..5a6574f0f 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCheckoutStep.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsCheckoutStep.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsConfiguration.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsConfiguration.cs
index 97ad0c9c4..f616c554b 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsConfiguration.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsConfiguration.cs
@@ -2,6 +2,8 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsDetailedTrigger.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsDetailedTrigger.cs
index a79de83ca..de6fb629f 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsDetailedTrigger.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsDetailedTrigger.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsJob.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsJob.cs
index ab19c6ad4..500ecb15a 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsJob.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsJob.cs
@@ -3,6 +3,8 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsRunStep.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsRunStep.cs
index 5ff03f0cb..30632d872 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsRunStep.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsRunStep.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsScheduledTrigger.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsScheduledTrigger.cs
index 2814cdd84..ac52bbb37 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsScheduledTrigger.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsScheduledTrigger.cs
@@ -1,6 +1,6 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsStep.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsStep.cs
index 4971b527a..447700cec 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsStep.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsStep.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsVcsTrigger.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsVcsTrigger.cs
index 50b0ce47f..5d6319fbe 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsVcsTrigger.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsVcsTrigger.cs
@@ -3,6 +3,7 @@
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsWorkflowDispatchTrigger.cs b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsWorkflowDispatchTrigger.cs
index bf4b77490..05b1a2e25 100644
--- a/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsWorkflowDispatchTrigger.cs
+++ b/src/Fallout.Common/CI/GitHubActions/Configuration/GitHubActionsWorkflowDispatchTrigger.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.GitHubActions.Configuration;
diff --git a/src/Fallout.Common/CI/GitHubActions/GitHubActions.Theming.cs b/src/Fallout.Common/CI/GitHubActions/GitHubActions.Theming.cs
index 2dcc184f8..1b0749dfc 100644
--- a/src/Fallout.Common/CI/GitHubActions/GitHubActions.Theming.cs
+++ b/src/Fallout.Common/CI/GitHubActions/GitHubActions.Theming.cs
@@ -1,6 +1,6 @@
-using System;
-using Fallout.Common.Execution.Theming;
+using System;
using Fallout.Common.Utilities;
+using Fallout.Application.Execution.Theming;
namespace Fallout.Common.CI.GitHubActions;
diff --git a/src/Fallout.Common/CI/GitHubActions/GitHubActions.cs b/src/Fallout.Common/CI/GitHubActions/GitHubActions.cs
index 0e76cf618..026002121 100644
--- a/src/Fallout.Common/CI/GitHubActions/GitHubActions.cs
+++ b/src/Fallout.Common/CI/GitHubActions/GitHubActions.cs
@@ -10,6 +10,8 @@
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
+using Fallout.Application;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.GitHubActions;
diff --git a/src/Fallout.Common/CI/GitHubActions/GitHubActionsAttribute.cs b/src/Fallout.Common/CI/GitHubActions/GitHubActionsAttribute.cs
index 98c870cd8..f503997aa 100644
--- a/src/Fallout.Common/CI/GitHubActions/GitHubActionsAttribute.cs
+++ b/src/Fallout.Common/CI/GitHubActions/GitHubActionsAttribute.cs
@@ -1,13 +1,15 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Fallout.Common.CI.GitHubActions.Configuration;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
+using Fallout.Application.Execution;
namespace Fallout.Common.CI.GitHubActions;
diff --git a/src/Fallout.Common/CI/GitLab/GitLab.Theming.cs b/src/Fallout.Common/CI/GitLab/GitLab.Theming.cs
index 1c917f5f7..7a88a4ac5 100644
--- a/src/Fallout.Common/CI/GitLab/GitLab.Theming.cs
+++ b/src/Fallout.Common/CI/GitLab/GitLab.Theming.cs
@@ -1,6 +1,6 @@
-using System;
-using Fallout.Common.Execution.Theming;
+using System;
using Fallout.Common.Utilities;
+using Fallout.Application.Execution.Theming;
namespace Fallout.Common.CI.GitLab;
diff --git a/src/Fallout.Common/CI/GitLab/GitLab.cs b/src/Fallout.Common/CI/GitLab/GitLab.cs
index c89fe2746..e428f2f0f 100644
--- a/src/Fallout.Common/CI/GitLab/GitLab.cs
+++ b/src/Fallout.Common/CI/GitLab/GitLab.cs
@@ -2,6 +2,8 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application;
namespace Fallout.Common.CI.GitLab;
diff --git a/src/Fallout.Common/CI/Jenkins/Jenkins.cs b/src/Fallout.Common/CI/Jenkins/Jenkins.cs
index 7707c14b1..486f32cd5 100644
--- a/src/Fallout.Common/CI/Jenkins/Jenkins.cs
+++ b/src/Fallout.Common/CI/Jenkins/Jenkins.cs
@@ -1,6 +1,8 @@
-using System;
+using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using Fallout.Application.CI;
+using Fallout.Application;
namespace Fallout.Common.CI.Jenkins;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationConfiguration.cs b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationConfiguration.cs
index 7e26eb7ec..9361d2b92 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationConfiguration.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationConfiguration.cs
@@ -1,6 +1,8 @@
-using System.Linq;
+using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.SpaceAutomation.Configuration;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationContainer.cs b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationContainer.cs
index 4e950362f..5c44bf5d3 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationContainer.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationContainer.cs
@@ -1,8 +1,10 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.SpaceAutomation.Configuration;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCronScheduleTrigger.cs b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCronScheduleTrigger.cs
index 92a0dd6f2..458d9738b 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCronScheduleTrigger.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCronScheduleTrigger.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.SpaceAutomation.Configuration;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCustomWriterExtensions.cs b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCustomWriterExtensions.cs
index 79e1d096f..c5cca1db7 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCustomWriterExtensions.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationCustomWriterExtensions.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.SpaceAutomation.Configuration;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationPushTrigger.cs b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationPushTrigger.cs
index 25bdb3782..88297a1ca 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationPushTrigger.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationPushTrigger.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.SpaceAutomation.Configuration;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationResources.cs b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationResources.cs
index 07784c3d5..0c933aacb 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationResources.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationResources.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.SpaceAutomation.Configuration;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationTrigger.cs b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationTrigger.cs
index 1a691d8a8..892f42d5b 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationTrigger.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/Configuration/SpaceAutomationTrigger.cs
@@ -1,5 +1,6 @@
-using System;
+using System;
using System.Linq;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.SpaceAutomation.Configuration;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.Theming.cs b/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.Theming.cs
index 253e8b538..01dd5d88d 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.Theming.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.Theming.cs
@@ -1,4 +1,4 @@
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
namespace Fallout.Common.CI.SpaceAutomation;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.cs b/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.cs
index 54efe276e..026aa34fc 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomation.cs
@@ -1,6 +1,8 @@
-using System;
+using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using Fallout.Application.CI;
+using Fallout.Application;
namespace Fallout.Common.CI.SpaceAutomation;
diff --git a/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomationAttribute.cs b/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomationAttribute.cs
index d14cdd31e..436174487 100644
--- a/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomationAttribute.cs
+++ b/src/Fallout.Common/CI/SpaceAutomation/SpaceAutomationAttribute.cs
@@ -1,11 +1,13 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Fallout.Common.CI.SpaceAutomation.Configuration;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
+using Fallout.Application.Execution;
namespace Fallout.Common.CI.SpaceAutomation;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityArtifactDependency.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityArtifactDependency.cs
index bf9080c54..aafe1c949 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityArtifactDependency.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityArtifactDependency.cs
@@ -1,6 +1,6 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildType.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildType.cs
index 30bf70cc7..b9021c2c0 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildType.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildType.cs
@@ -1,6 +1,8 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildTypeVcsRoot.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildTypeVcsRoot.cs
index 530945720..f82dbd266 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildTypeVcsRoot.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityBuildTypeVcsRoot.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfiguration.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfiguration.cs
index 49fd4ce09..97ec4a852 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfiguration.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfiguration.cs
@@ -2,6 +2,8 @@
using System.Linq;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfigurationParameter.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfigurationParameter.cs
index 3bbe95cff..9c5558867 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfigurationParameter.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityConfigurationParameter.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityCustomWriterExtensions.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityCustomWriterExtensions.cs
index 75b9a1546..2abdbec42 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityCustomWriterExtensions.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityCustomWriterExtensions.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityDependency.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityDependency.cs
index 995ee019a..b083466a1 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityDependency.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityDependency.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityFinishBuildTrigger.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityFinishBuildTrigger.cs
index 65d3bdbc1..997d8f537 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityFinishBuildTrigger.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityFinishBuildTrigger.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityKeyValueParameter.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityKeyValueParameter.cs
index 54c28ba41..eefaec27b 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityKeyValueParameter.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityKeyValueParameter.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityParameter.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityParameter.cs
index 647d3d2ae..17392b694 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityParameter.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityParameter.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityProject.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityProject.cs
index 74bd74de6..c97e2289e 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityProject.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityProject.cs
@@ -1,6 +1,8 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityScheduledTrigger.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityScheduledTrigger.cs
index 82a283544..947b46876 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityScheduledTrigger.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityScheduledTrigger.cs
@@ -1,6 +1,6 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCitySnapshotDependency.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCitySnapshotDependency.cs
index d8358967e..0ce106c43 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCitySnapshotDependency.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCitySnapshotDependency.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityTrigger.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityTrigger.cs
index fa302d64a..8bda89b82 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityTrigger.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityTrigger.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsRoot.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsRoot.cs
index 0435792b9..44eb80217 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsRoot.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsRoot.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsTrigger.cs b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsTrigger.cs
index af6010d08..55e5f6342 100644
--- a/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsTrigger.cs
+++ b/src/Fallout.Common/CI/TeamCity/Configuration/TeamCityVcsTrigger.cs
@@ -1,6 +1,6 @@
using System;
using System.Linq;
-using Fallout.Common.Utilities;
+using Fallout.Application.Utilities;
namespace Fallout.Common.CI.TeamCity.Configuration;
diff --git a/src/Fallout.Common/CI/TeamCity/TeamCity.Theming.cs b/src/Fallout.Common/CI/TeamCity/TeamCity.Theming.cs
index a670029cb..c14505bc8 100644
--- a/src/Fallout.Common/CI/TeamCity/TeamCity.Theming.cs
+++ b/src/Fallout.Common/CI/TeamCity/TeamCity.Theming.cs
@@ -1,7 +1,7 @@
-using System;
-using Fallout.Common.Execution;
-using Fallout.Common.Execution.Theming;
+using System;
using Fallout.Common.Utilities;
+using Fallout.Application.Execution.Theming;
+using Fallout.Application.Execution;
namespace Fallout.Common.CI.TeamCity;
diff --git a/src/Fallout.Common/CI/TeamCity/TeamCity.cs b/src/Fallout.Common/CI/TeamCity/TeamCity.cs
index b12931127..058294755 100644
--- a/src/Fallout.Common/CI/TeamCity/TeamCity.cs
+++ b/src/Fallout.Common/CI/TeamCity/TeamCity.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
@@ -9,6 +9,8 @@
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using Serilog;
+using Fallout.Application;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.TeamCity;
diff --git a/src/Fallout.Common/CI/TeamCity/TeamCityAttribute.cs b/src/Fallout.Common/CI/TeamCity/TeamCityAttribute.cs
index 04453628b..4aec99742 100644
--- a/src/Fallout.Common/CI/TeamCity/TeamCityAttribute.cs
+++ b/src/Fallout.Common/CI/TeamCity/TeamCityAttribute.cs
@@ -6,13 +6,16 @@
using System.Linq.Expressions;
using System.Reflection;
using Fallout.Common.CI.TeamCity.Configuration;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Solutions;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common.ValueInjection;
using static Fallout.Common.IO.PathConstruction;
+using Fallout.Application.CI;
+using Fallout.Application.Utilities;
+using Fallout.Application.Execution;
+using Fallout.Application.ValueInjection;
+using Fallout.Application;
namespace Fallout.Common.CI.TeamCity;
diff --git a/src/Fallout.Common/CI/TravisCI/TravisCI.cs b/src/Fallout.Common/CI/TravisCI/TravisCI.cs
index 3065a9148..342438f95 100644
--- a/src/Fallout.Common/CI/TravisCI/TravisCI.cs
+++ b/src/Fallout.Common/CI/TravisCI/TravisCI.cs
@@ -1,6 +1,8 @@
-using System;
+using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using Fallout.Application;
+using Fallout.Application.CI;
namespace Fallout.Common.CI.TravisCI;
diff --git a/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs b/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs
index 473da0562..c44b88ad0 100644
--- a/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs
+++ b/src/Fallout.Common/ChangeLog/ChangeLogTasks.cs
@@ -3,11 +3,12 @@
using System.Diagnostics;
using System.Linq;
using NuGet.Versioning;
-using Fallout.Common.Git;
using Fallout.Common.IO;
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
using Serilog;
+using Fallout.Application.Git;
+using Fallout.Application;
// ReSharper disable ArgumentsStyleLiteral
namespace Fallout.Common.ChangeLog;
diff --git a/src/Fallout.Common/IO/FtpTasks.cs b/src/Fallout.Common/IO/FtpTasks.cs
index ad1bd6840..fe9422cdc 100644
--- a/src/Fallout.Common/IO/FtpTasks.cs
+++ b/src/Fallout.Common/IO/FtpTasks.cs
@@ -1,8 +1,9 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using System.Net;
using Serilog;
+using Fallout.Application;
#pragma warning disable SYSLIB0014
namespace Fallout.Common.IO;
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttributeBase.cs b/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttributeBase.cs
index c77a8f02e..63d85126e 100644
--- a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttributeBase.cs
+++ b/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultAttributeBase.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
-using Fallout.Common.ValueInjection;
+using Fallout.Application;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tools.AzureKeyVault
{
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs b/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs
index 1736b355a..03f5f869c 100644
--- a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs
+++ b/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultConfigurationAttribute.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
-using Fallout.Common.ValueInjection;
using Serilog;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tools.AzureKeyVault
{
diff --git a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultSecretAttribute.cs b/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultSecretAttribute.cs
index 507c74639..55985ab7d 100644
--- a/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultSecretAttribute.cs
+++ b/src/Fallout.Common/Tools/AzureKeyVault/AzureKeyVaultSecretAttribute.cs
@@ -1,6 +1,7 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
+using Fallout.Application;
namespace Fallout.Common.Tools.AzureKeyVault
{
diff --git a/src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.Generated.cs b/src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.Generated.cs
index 12db5a322..030be4657 100644
--- a/src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.Generated.cs
+++ b/src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/AzureSignTool/AzureSignTool.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.AzureSignTool;
diff --git a/src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.Generated.cs b/src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.Generated.cs
index d7bf92b63..6dee6f6d5 100644
--- a/src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.Generated.cs
+++ b/src/Fallout.Common/Tools/BenchmarkDotNet/BenchmarkDotNet.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Boots/Boots.Generated.cs b/src/Fallout.Common/Tools/Boots/Boots.Generated.cs
index 9895638dd..d7fb8b9ee 100644
--- a/src/Fallout.Common/Tools/Boots/Boots.Generated.cs
+++ b/src/Fallout.Common/Tools/Boots/Boots.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Chocolatey/Chocolatey.Generated.cs b/src/Fallout.Common/Tools/Chocolatey/Chocolatey.Generated.cs
index a3d3d9ec7..504a58c21 100644
--- a/src/Fallout.Common/Tools/Chocolatey/Chocolatey.Generated.cs
+++ b/src/Fallout.Common/Tools/Chocolatey/Chocolatey.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Chocolatey/Chocolatey.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Chocolatey;
diff --git a/src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.Generated.cs b/src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.Generated.cs
index ab4a42a2e..35d0b846a 100644
--- a/src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.Generated.cs
+++ b/src/Fallout.Common/Tools/CodeMetrics/CodeMetrics.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Codecov/Codecov.Generated.cs b/src/Fallout.Common/Tools/Codecov/Codecov.Generated.cs
index 8a1969f03..930d9970d 100644
--- a/src/Fallout.Common/Tools/Codecov/Codecov.Generated.cs
+++ b/src/Fallout.Common/Tools/Codecov/Codecov.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Codecov/Codecov.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Codecov;
diff --git a/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs b/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs
index e640f3b08..7ccb947da 100644
--- a/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs
+++ b/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs b/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs
index 51362c4a2..9ab051b0b 100644
--- a/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs
+++ b/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.CoverallsNet;
diff --git a/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs b/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs
index 317aeca9e..78801f476 100644
--- a/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs
+++ b/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Utilities.Collections;
using System;
diff --git a/src/Fallout.Common/Tools/Discord/Discord.Generated.cs b/src/Fallout.Common/Tools/Discord/Discord.Generated.cs
index cd09ab349..2277892ce 100644
--- a/src/Fallout.Common/Tools/Discord/Discord.Generated.cs
+++ b/src/Fallout.Common/Tools/Discord/Discord.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs b/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs
index 96ed4968c..114506878 100644
--- a/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs
+++ b/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Docker/Docker.Generated.cs b/src/Fallout.Common/Tools/Docker/Docker.Generated.cs
index 1a7b39d91..964545ea8 100644
--- a/src/Fallout.Common/Tools/Docker/Docker.Generated.cs
+++ b/src/Fallout.Common/Tools/Docker/Docker.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Docker/Docker.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Docker;
diff --git a/src/Fallout.Common/Tools/Docker/DockerTargetDefinitionExtensions.cs b/src/Fallout.Common/Tools/Docker/DockerTargetDefinitionExtensions.cs
index 0016dac68..26ad0bb90 100644
--- a/src/Fallout.Common/Tools/Docker/DockerTargetDefinitionExtensions.cs
+++ b/src/Fallout.Common/Tools/Docker/DockerTargetDefinitionExtensions.cs
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Tools.DotNet;
@@ -12,6 +11,8 @@
using Serilog.Formatting.Compact.Reader;
using static Fallout.Common.Tools.Docker.DockerTasks;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
+using Fallout.Application.Execution;
namespace Fallout.Common.Tools.Docker;
diff --git a/src/Fallout.Common/Tools/DotCover/DotCover.Generated.cs b/src/Fallout.Common/Tools/DotCover/DotCover.Generated.cs
index 1f95e1bac..aabc45e9c 100644
--- a/src/Fallout.Common/Tools/DotCover/DotCover.Generated.cs
+++ b/src/Fallout.Common/Tools/DotCover/DotCover.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/DotCover/TeamCitySetDotCoverHomePathAttribute.cs b/src/Fallout.Common/Tools/DotCover/TeamCitySetDotCoverHomePathAttribute.cs
index ca999c4e9..0aeeb3137 100644
--- a/src/Fallout.Common/Tools/DotCover/TeamCitySetDotCoverHomePathAttribute.cs
+++ b/src/Fallout.Common/Tools/DotCover/TeamCitySetDotCoverHomePathAttribute.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using Fallout.Common.CI.TeamCity;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
namespace Fallout.Common.Tools.DotCover;
diff --git a/src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.Generated.cs b/src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.Generated.cs
index 308a475ef..195aff2d4 100644
--- a/src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.Generated.cs
+++ b/src/Fallout.Common/Tools/DotMemoryUnit/DotMemoryUnit.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/DotNet/DotNet.Generated.cs b/src/Fallout.Common/Tools/DotNet/DotNet.Generated.cs
index 624f40593..487b2c251 100644
--- a/src/Fallout.Common/Tools/DotNet/DotNet.Generated.cs
+++ b/src/Fallout.Common/Tools/DotNet/DotNet.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/DotNet/DotNet.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.DotNet;
diff --git a/src/Fallout.Common/Tools/DotNet/DotNetTasks.cs b/src/Fallout.Common/Tools/DotNet/DotNetTasks.cs
index 261fab0fc..0a827f2da 100644
--- a/src/Fallout.Common/Tools/DotNet/DotNetTasks.cs
+++ b/src/Fallout.Common/Tools/DotNet/DotNetTasks.cs
@@ -2,6 +2,7 @@
using System.Linq;
using Fallout.Common.Tooling;
using Serilog.Events;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tools.DotNet;
diff --git a/src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.Generated.cs b/src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.Generated.cs
index 3c161d88b..c46e18bf0 100644
--- a/src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.Generated.cs
+++ b/src/Fallout.Common/Tools/DotnetPackaging/DotnetPackaging.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/EntityFramework/EntityFramework.Generated.cs b/src/Fallout.Common/Tools/EntityFramework/EntityFramework.Generated.cs
index d7bd6b22c..64976eda4 100644
--- a/src/Fallout.Common/Tools/EntityFramework/EntityFramework.Generated.cs
+++ b/src/Fallout.Common/Tools/EntityFramework/EntityFramework.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Fixie/Fixie.Generated.cs b/src/Fallout.Common/Tools/Fixie/Fixie.Generated.cs
index 0be64d219..5ede1d7d5 100644
--- a/src/Fallout.Common/Tools/Fixie/Fixie.Generated.cs
+++ b/src/Fallout.Common/Tools/Fixie/Fixie.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Git/Git.Generated.cs b/src/Fallout.Common/Tools/Git/Git.Generated.cs
index d28ebc7ef..44777a52d 100644
--- a/src/Fallout.Common/Tools/Git/Git.Generated.cs
+++ b/src/Fallout.Common/Tools/Git/Git.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/GitHub/GitHubTasks.cs b/src/Fallout.Common/Tools/GitHub/GitHubTasks.cs
index 1d1abc282..01749e343 100644
--- a/src/Fallout.Common/Tools/GitHub/GitHubTasks.cs
+++ b/src/Fallout.Common/Tools/GitHub/GitHubTasks.cs
@@ -3,10 +3,11 @@
using System.IO;
using System.Linq;
using System.Threading.Tasks;
-using Fallout.Common.Git;
using Fallout.Common.Utilities;
using Octokit;
using static Fallout.Common.IO.PathConstruction;
+using Fallout.Application;
+using Fallout.Application.Git;
namespace Fallout.Common.Tools.GitHub;
diff --git a/src/Fallout.Common/Tools/GitLink/GitLink.Generated.cs b/src/Fallout.Common/Tools/GitLink/GitLink.Generated.cs
index 198d06207..1c2a10b14 100644
--- a/src/Fallout.Common/Tools/GitLink/GitLink.Generated.cs
+++ b/src/Fallout.Common/Tools/GitLink/GitLink.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.Generated.cs b/src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.Generated.cs
index 888c9a99f..7bb390297 100644
--- a/src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.Generated.cs
+++ b/src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/GitReleaseManager/GitReleaseManager.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.GitReleaseManager;
diff --git a/src/Fallout.Common/Tools/GitVersion/GitVersion.Generated.cs b/src/Fallout.Common/Tools/GitVersion/GitVersion.Generated.cs
index be230ca7e..67abdd2ae 100644
--- a/src/Fallout.Common/Tools/GitVersion/GitVersion.Generated.cs
+++ b/src/Fallout.Common/Tools/GitVersion/GitVersion.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/GitVersion/GitVersion.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.GitVersion;
diff --git a/src/Fallout.Common/Tools/GitVersion/GitVersionAttribute.cs b/src/Fallout.Common/Tools/GitVersion/GitVersionAttribute.cs
index 894f06e10..c0dd493f4 100644
--- a/src/Fallout.Common/Tools/GitVersion/GitVersionAttribute.cs
+++ b/src/Fallout.Common/Tools/GitVersion/GitVersionAttribute.cs
@@ -1,15 +1,16 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.CI.AppVeyor;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.TeamCity;
-using Fallout.Common.Git;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
using Serilog;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
+using Fallout.Application;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.Git;
namespace Fallout.Common.Tools.GitVersion;
diff --git a/src/Fallout.Common/Tools/Helm/Helm.Generated.cs b/src/Fallout.Common/Tools/Helm/Helm.Generated.cs
index f5386197b..a838faa8f 100644
--- a/src/Fallout.Common/Tools/Helm/Helm.Generated.cs
+++ b/src/Fallout.Common/Tools/Helm/Helm.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Helm/Helm.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Helm;
diff --git a/src/Fallout.Common/Tools/ILRepack/ILRepack.Generated.cs b/src/Fallout.Common/Tools/ILRepack/ILRepack.Generated.cs
index 62ad73738..ea8df412b 100644
--- a/src/Fallout.Common/Tools/ILRepack/ILRepack.Generated.cs
+++ b/src/Fallout.Common/Tools/ILRepack/ILRepack.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/InnoSetup/InnoSetup.Generated.cs b/src/Fallout.Common/Tools/InnoSetup/InnoSetup.Generated.cs
index 3199c7007..4a20bdb12 100644
--- a/src/Fallout.Common/Tools/InnoSetup/InnoSetup.Generated.cs
+++ b/src/Fallout.Common/Tools/InnoSetup/InnoSetup.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Kubernetes/Kubernetes.Generated.cs b/src/Fallout.Common/Tools/Kubernetes/Kubernetes.Generated.cs
index 066b5240c..40a7608ab 100644
--- a/src/Fallout.Common/Tools/Kubernetes/Kubernetes.Generated.cs
+++ b/src/Fallout.Common/Tools/Kubernetes/Kubernetes.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuild.Generated.cs b/src/Fallout.Common/Tools/MSBuild/MSBuild.Generated.cs
index 62315f2be..864d02fbe 100644
--- a/src/Fallout.Common/Tools/MSBuild/MSBuild.Generated.cs
+++ b/src/Fallout.Common/Tools/MSBuild/MSBuild.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/MSBuild/MSBuildTasks.cs b/src/Fallout.Common/Tools/MSBuild/MSBuildTasks.cs
index 09bad0fa1..0205c1658 100644
--- a/src/Fallout.Common/Tools/MSBuild/MSBuildTasks.cs
+++ b/src/Fallout.Common/Tools/MSBuild/MSBuildTasks.cs
@@ -3,6 +3,7 @@
using System.Reflection;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tools.MSBuild;
diff --git a/src/Fallout.Common/Tools/MSpec/MSpec.Generated.cs b/src/Fallout.Common/Tools/MSpec/MSpec.Generated.cs
index 4f1e524a1..d4a6bcdb2 100644
--- a/src/Fallout.Common/Tools/MSpec/MSpec.Generated.cs
+++ b/src/Fallout.Common/Tools/MSpec/MSpec.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/MakeNsis/MakeNSIS.Generated.cs b/src/Fallout.Common/Tools/MakeNsis/MakeNSIS.Generated.cs
index e3209c7e5..f719bcd3e 100644
--- a/src/Fallout.Common/Tools/MakeNsis/MakeNSIS.Generated.cs
+++ b/src/Fallout.Common/Tools/MakeNsis/MakeNSIS.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Mastodon/Mastodon.Generated.cs b/src/Fallout.Common/Tools/Mastodon/Mastodon.Generated.cs
index 5fd158545..b3a2b21d1 100644
--- a/src/Fallout.Common/Tools/Mastodon/Mastodon.Generated.cs
+++ b/src/Fallout.Common/Tools/Mastodon/Mastodon.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/MauiCheck/MauiCheck.Generated.cs b/src/Fallout.Common/Tools/MauiCheck/MauiCheck.Generated.cs
index 077767fe4..7422118cf 100644
--- a/src/Fallout.Common/Tools/MauiCheck/MauiCheck.Generated.cs
+++ b/src/Fallout.Common/Tools/MauiCheck/MauiCheck.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/MinVer/MinVer.Generated.cs b/src/Fallout.Common/Tools/MinVer/MinVer.Generated.cs
index 29bd510fb..4469aec10 100644
--- a/src/Fallout.Common/Tools/MinVer/MinVer.Generated.cs
+++ b/src/Fallout.Common/Tools/MinVer/MinVer.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/MinVer/MinVerAttribute.cs b/src/Fallout.Common/Tools/MinVer/MinVerAttribute.cs
index 00a9d34b9..93a5b53f8 100644
--- a/src/Fallout.Common/Tools/MinVer/MinVerAttribute.cs
+++ b/src/Fallout.Common/Tools/MinVer/MinVerAttribute.cs
@@ -1,11 +1,11 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.CI.AppVeyor;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.TeamCity;
using Fallout.Common.Tooling;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tools.MinVer;
diff --git a/src/Fallout.Common/Tools/NSwag/NSwag.Generated.cs b/src/Fallout.Common/Tools/NSwag/NSwag.Generated.cs
index c0a2d9234..3d3f7aec0 100644
--- a/src/Fallout.Common/Tools/NSwag/NSwag.Generated.cs
+++ b/src/Fallout.Common/Tools/NSwag/NSwag.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/NUnit/NUnit.Generated.cs b/src/Fallout.Common/Tools/NUnit/NUnit.Generated.cs
index c3e888756..27c0e05b6 100644
--- a/src/Fallout.Common/Tools/NUnit/NUnit.Generated.cs
+++ b/src/Fallout.Common/Tools/NUnit/NUnit.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/NUnit/NUnitTasks.cs b/src/Fallout.Common/Tools/NUnit/NUnitTasks.cs
index 8a742dc17..dc2e992a3 100644
--- a/src/Fallout.Common/Tools/NUnit/NUnitTasks.cs
+++ b/src/Fallout.Common/Tools/NUnit/NUnitTasks.cs
@@ -1,4 +1,4 @@
-using Fallout.Common.Tooling;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tools.NUnit;
diff --git a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs b/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs
index adc22564f..3f68403e5 100644
--- a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs
+++ b/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioning.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs b/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs
index ff235424e..91a2ca6d9 100644
--- a/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs
+++ b/src/Fallout.Common/Tools/NerdbankGitVersioning/NerdbankGitVersioningAttribute.cs
@@ -4,7 +4,7 @@
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.TeamCity;
using Fallout.Common.Tooling;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
namespace Fallout.Common.Tools.NerdbankGitVersioning;
diff --git a/src/Fallout.Common/Tools/Netlify/Netlify.Generated.cs b/src/Fallout.Common/Tools/Netlify/Netlify.Generated.cs
index 91e1073e4..8b909ed01 100644
--- a/src/Fallout.Common/Tools/Netlify/Netlify.Generated.cs
+++ b/src/Fallout.Common/Tools/Netlify/Netlify.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Netlify/Netlify.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Netlify;
diff --git a/src/Fallout.Common/Tools/Npm/Npm.Generated.cs b/src/Fallout.Common/Tools/Npm/Npm.Generated.cs
index 334e5896e..e8f1e618b 100644
--- a/src/Fallout.Common/Tools/Npm/Npm.Generated.cs
+++ b/src/Fallout.Common/Tools/Npm/Npm.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/NuGet/NuGet.Generated.cs b/src/Fallout.Common/Tools/NuGet/NuGet.Generated.cs
index e673705d4..2ff757328 100644
--- a/src/Fallout.Common/Tools/NuGet/NuGet.Generated.cs
+++ b/src/Fallout.Common/Tools/NuGet/NuGet.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/NuGet/NuGet.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.NuGet;
diff --git a/src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs b/src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs
index 7c0fea017..8531aa0c5 100644
--- a/src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs
+++ b/src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/NuGetKeyVaultSignTool/NuGetKeyVaultSignTool.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.NuGetKeyVaultSignTool;
diff --git a/src/Fallout.Common/Tools/OctoVersion/OctoVersion.Generated.cs b/src/Fallout.Common/Tools/OctoVersion/OctoVersion.Generated.cs
index c979c3bb4..823505fc9 100644
--- a/src/Fallout.Common/Tools/OctoVersion/OctoVersion.Generated.cs
+++ b/src/Fallout.Common/Tools/OctoVersion/OctoVersion.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/OctoVersion/OctoVersionAttribute.cs b/src/Fallout.Common/Tools/OctoVersion/OctoVersionAttribute.cs
index 2a931a425..d7f2796a8 100644
--- a/src/Fallout.Common/Tools/OctoVersion/OctoVersionAttribute.cs
+++ b/src/Fallout.Common/Tools/OctoVersion/OctoVersionAttribute.cs
@@ -1,14 +1,15 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
using Fallout.Common.CI.AppVeyor;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.TeamCity;
-using Fallout.Common.Git;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
-using Fallout.Common.ValueInjection;
+using Fallout.Application.ValueInjection;
+using Fallout.Application.Git;
+using Fallout.Application;
namespace Fallout.Common.Tools.OctoVersion;
diff --git a/src/Fallout.Common/Tools/Octopus/Octopus.Generated.cs b/src/Fallout.Common/Tools/Octopus/Octopus.Generated.cs
index c8ec07da2..7024ea049 100644
--- a/src/Fallout.Common/Tools/Octopus/Octopus.Generated.cs
+++ b/src/Fallout.Common/Tools/Octopus/Octopus.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Octopus/Octopus.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Octopus;
diff --git a/src/Fallout.Common/Tools/OpenCover/OpenCover.Generated.cs b/src/Fallout.Common/Tools/OpenCover/OpenCover.Generated.cs
index 00a9f5334..2a247c613 100644
--- a/src/Fallout.Common/Tools/OpenCover/OpenCover.Generated.cs
+++ b/src/Fallout.Common/Tools/OpenCover/OpenCover.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/OpenCover/OpenCoverTasks.cs b/src/Fallout.Common/Tools/OpenCover/OpenCoverTasks.cs
index a40535c73..0c990e4d9 100644
--- a/src/Fallout.Common/Tools/OpenCover/OpenCoverTasks.cs
+++ b/src/Fallout.Common/Tools/OpenCover/OpenCoverTasks.cs
@@ -1,5 +1,6 @@
-using Fallout.Common.Tooling;
+using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tools.OpenCover;
diff --git a/src/Fallout.Common/Tools/Paket/Paket.Generated.cs b/src/Fallout.Common/Tools/Paket/Paket.Generated.cs
index 288956b44..4ee363300 100644
--- a/src/Fallout.Common/Tools/Paket/Paket.Generated.cs
+++ b/src/Fallout.Common/Tools/Paket/Paket.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Paket/Paket.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Paket;
diff --git a/src/Fallout.Common/Tools/PowerShell/PowerShell.Generated.cs b/src/Fallout.Common/Tools/PowerShell/PowerShell.Generated.cs
index 79a7836e8..880d0938c 100644
--- a/src/Fallout.Common/Tools/PowerShell/PowerShell.Generated.cs
+++ b/src/Fallout.Common/Tools/PowerShell/PowerShell.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Pulumi/Pulumi.Generated.cs b/src/Fallout.Common/Tools/Pulumi/Pulumi.Generated.cs
index 422b11cb7..e81229d6c 100644
--- a/src/Fallout.Common/Tools/Pulumi/Pulumi.Generated.cs
+++ b/src/Fallout.Common/Tools/Pulumi/Pulumi.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Pwsh/Pwsh.Generated.cs b/src/Fallout.Common/Tools/Pwsh/Pwsh.Generated.cs
index d4fc36ca9..bfc033145 100644
--- a/src/Fallout.Common/Tools/Pwsh/Pwsh.Generated.cs
+++ b/src/Fallout.Common/Tools/Pwsh/Pwsh.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.Generated.cs b/src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.Generated.cs
index dc207bb8c..2980745db 100644
--- a/src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.Generated.cs
+++ b/src/Fallout.Common/Tools/ReportGenerator/ReportGenerator.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/ReportGenerator/ReportGeneratorTasks.cs b/src/Fallout.Common/Tools/ReportGenerator/ReportGeneratorTasks.cs
index ba1405be6..a6fb83133 100644
--- a/src/Fallout.Common/Tools/ReportGenerator/ReportGeneratorTasks.cs
+++ b/src/Fallout.Common/Tools/ReportGenerator/ReportGeneratorTasks.cs
@@ -1,4 +1,4 @@
-using Fallout.Common.Tooling;
+using Fallout.Application.Tooling;
namespace Fallout.Common.Tools.ReportGenerator;
diff --git a/src/Fallout.Common/Tools/SignClient/SignClient.Generated.cs b/src/Fallout.Common/Tools/SignClient/SignClient.Generated.cs
index f49474682..58a054226 100644
--- a/src/Fallout.Common/Tools/SignClient/SignClient.Generated.cs
+++ b/src/Fallout.Common/Tools/SignClient/SignClient.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/SignClient/SignClient.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.SignClient;
diff --git a/src/Fallout.Common/Tools/SignPath/SignPathTasks.cs b/src/Fallout.Common/Tools/SignPath/SignPathTasks.cs
index 477f96441..ff076e82c 100644
--- a/src/Fallout.Common/Tools/SignPath/SignPathTasks.cs
+++ b/src/Fallout.Common/Tools/SignPath/SignPathTasks.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using System.Net;
@@ -11,7 +11,8 @@
using Fallout.Common.IO;
using Fallout.Common.Utilities;
using Serilog;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
+using Fallout.Application;
namespace Fallout.Common.Tools.SignPath;
diff --git a/src/Fallout.Common/Tools/SignTool/SignTool.Generated.cs b/src/Fallout.Common/Tools/SignTool/SignTool.Generated.cs
index 8337499de..9d1cdb580 100644
--- a/src/Fallout.Common/Tools/SignTool/SignTool.Generated.cs
+++ b/src/Fallout.Common/Tools/SignTool/SignTool.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/SignTool/SignTool.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.SignTool;
diff --git a/src/Fallout.Common/Tools/Slack/Slack.Generated.cs b/src/Fallout.Common/Tools/Slack/Slack.Generated.cs
index 0c6dd2e44..bc9bbe6bf 100644
--- a/src/Fallout.Common/Tools/Slack/Slack.Generated.cs
+++ b/src/Fallout.Common/Tools/Slack/Slack.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/SonarScanner/SonarScanner.Generated.cs b/src/Fallout.Common/Tools/SonarScanner/SonarScanner.Generated.cs
index 27c1c7ef7..a996c882e 100644
--- a/src/Fallout.Common/Tools/SonarScanner/SonarScanner.Generated.cs
+++ b/src/Fallout.Common/Tools/SonarScanner/SonarScanner.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/SonarScanner/SonarScanner.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.SonarScanner;
diff --git a/src/Fallout.Common/Tools/SpecFlow/SpecFlow.Generated.cs b/src/Fallout.Common/Tools/SpecFlow/SpecFlow.Generated.cs
index 5011b6335..a57ebe00c 100644
--- a/src/Fallout.Common/Tools/SpecFlow/SpecFlow.Generated.cs
+++ b/src/Fallout.Common/Tools/SpecFlow/SpecFlow.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/SpecFlow/SpecFlow.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.SpecFlow;
diff --git a/src/Fallout.Common/Tools/Squirrel/Squirrel.Generated.cs b/src/Fallout.Common/Tools/Squirrel/Squirrel.Generated.cs
index cf803dbb1..e6f407469 100644
--- a/src/Fallout.Common/Tools/Squirrel/Squirrel.Generated.cs
+++ b/src/Fallout.Common/Tools/Squirrel/Squirrel.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.Generated.cs b/src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.Generated.cs
index a240dfe11..e05a56f5e 100644
--- a/src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.Generated.cs
+++ b/src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/StaticWebApps/StaticWebApps.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.StaticWebApps;
diff --git a/src/Fallout.Common/Tools/Teams/Teams.Generated.cs b/src/Fallout.Common/Tools/Teams/Teams.Generated.cs
index 2755a14c6..61f3eb919 100644
--- a/src/Fallout.Common/Tools/Teams/Teams.Generated.cs
+++ b/src/Fallout.Common/Tools/Teams/Teams.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/TestCloud/TestCloud.Generated.cs b/src/Fallout.Common/Tools/TestCloud/TestCloud.Generated.cs
index 98ca878b6..a00591134 100644
--- a/src/Fallout.Common/Tools/TestCloud/TestCloud.Generated.cs
+++ b/src/Fallout.Common/Tools/TestCloud/TestCloud.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Unity/Unity.Generated.cs b/src/Fallout.Common/Tools/Unity/Unity.Generated.cs
index e22f8de2e..d015f6a16 100644
--- a/src/Fallout.Common/Tools/Unity/Unity.Generated.cs
+++ b/src/Fallout.Common/Tools/Unity/Unity.Generated.cs
@@ -1,8 +1,4 @@
-// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Unity/Unity.json
-
-using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,6 +9,7 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application;
namespace Fallout.Common.Tools.Unity;
diff --git a/src/Fallout.Common/Tools/Unity/UnityTasks.cs b/src/Fallout.Common/Tools/Unity/UnityTasks.cs
index 6005105e2..904da7be2 100644
--- a/src/Fallout.Common/Tools/Unity/UnityTasks.cs
+++ b/src/Fallout.Common/Tools/Unity/UnityTasks.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -10,6 +10,7 @@
using Fallout.Utilities.Text.Yaml;
using Serilog;
using Serilog.Events;
+using Fallout.Application;
namespace Fallout.Common.Tools.Unity;
diff --git a/src/Fallout.Common/Tools/VSTest/VSTest.Generated.cs b/src/Fallout.Common/Tools/VSTest/VSTest.Generated.cs
index 1b6f1a1bf..b37acaa82 100644
--- a/src/Fallout.Common/Tools/VSTest/VSTest.Generated.cs
+++ b/src/Fallout.Common/Tools/VSTest/VSTest.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/VSWhere/VSWhere.Generated.cs b/src/Fallout.Common/Tools/VSWhere/VSWhere.Generated.cs
index dcf27f93b..c17ca9679 100644
--- a/src/Fallout.Common/Tools/VSWhere/VSWhere.Generated.cs
+++ b/src/Fallout.Common/Tools/VSWhere/VSWhere.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs b/src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs
index 1d6165d1e..77b0b929a 100644
--- a/src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs
+++ b/src/Fallout.Common/Tools/WebConfigTransformRunner/WebConfigTransformRunner.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Common/Tools/Xunit/Xunit.Generated.cs b/src/Fallout.Common/Tools/Xunit/Xunit.Generated.cs
index 15bbe287c..cfe9b7694 100644
--- a/src/Fallout.Common/Tools/Xunit/Xunit.Generated.cs
+++ b/src/Fallout.Common/Tools/Xunit/Xunit.Generated.cs
@@ -2,7 +2,6 @@
using Fallout.Common;
using Fallout.Common.Tooling;
-using Fallout.Common.Tools;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
diff --git a/src/Fallout.Components/ICompile.cs b/src/Fallout.Components/ICompile.cs
index 6bec3c673..e2c020c02 100644
--- a/src/Fallout.Components/ICompile.cs
+++ b/src/Fallout.Components/ICompile.cs
@@ -1,13 +1,13 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
-using Fallout.Common;
using Fallout.Solutions;
using Fallout.Common.Tooling;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/ICreateGitHubRelease.cs b/src/Fallout.Components/ICreateGitHubRelease.cs
index 7c386bdd2..ebe3505f5 100644
--- a/src/Fallout.Components/ICreateGitHubRelease.cs
+++ b/src/Fallout.Components/ICreateGitHubRelease.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -10,6 +10,7 @@
using Fallout.Common.Tools.GitHub;
using Fallout.Common.Utilities;
using Octokit;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IGlobalTool.cs b/src/Fallout.Components/IGlobalTool.cs
index 69447ffbd..2f38a9c0a 100644
--- a/src/Fallout.Components/IGlobalTool.cs
+++ b/src/Fallout.Components/IGlobalTool.cs
@@ -1,9 +1,9 @@
using System;
using System.IO;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.Tools.DotNet;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasArtifacts.cs b/src/Fallout.Components/IHasArtifacts.cs
index 2e76d86d7..e7addeb06 100644
--- a/src/Fallout.Components/IHasArtifacts.cs
+++ b/src/Fallout.Components/IHasArtifacts.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.IO;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasChangelog.cs b/src/Fallout.Components/IHasChangelog.cs
index 1aeff4d5b..6598bf5b5 100644
--- a/src/Fallout.Components/IHasChangelog.cs
+++ b/src/Fallout.Components/IHasChangelog.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using static Fallout.Common.ChangeLog.ChangelogTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasConfiguration.cs b/src/Fallout.Components/IHasConfiguration.cs
index c39fcd3cf..e09fdbf1d 100644
--- a/src/Fallout.Components/IHasConfiguration.cs
+++ b/src/Fallout.Components/IHasConfiguration.cs
@@ -1,6 +1,6 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasGitRepository.cs b/src/Fallout.Components/IHasGitRepository.cs
index f88dc751f..849425190 100644
--- a/src/Fallout.Components/IHasGitRepository.cs
+++ b/src/Fallout.Components/IHasGitRepository.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.Git;
+using Fallout.Application;
+using Fallout.Application.Git;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasGitVersion.cs b/src/Fallout.Components/IHasGitVersion.cs
index 7ae0e2e9e..661ae9e76 100644
--- a/src/Fallout.Components/IHasGitVersion.cs
+++ b/src/Fallout.Components/IHasGitVersion.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.Tools.GitVersion;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasNerdbankGitVersioning.cs b/src/Fallout.Components/IHasNerdbankGitVersioning.cs
index d3edcebfc..00ad78f39 100644
--- a/src/Fallout.Components/IHasNerdbankGitVersioning.cs
+++ b/src/Fallout.Components/IHasNerdbankGitVersioning.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.Tools.NerdbankGitVersioning;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasSolution.cs b/src/Fallout.Components/IHasSolution.cs
index 8d5637319..9f5e5b497 100644
--- a/src/Fallout.Components/IHasSolution.cs
+++ b/src/Fallout.Components/IHasSolution.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using Fallout.Solutions;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IHasTwitterCredentials.cs b/src/Fallout.Components/IHasTwitterCredentials.cs
index acf1314b7..3e09fbf90 100644
--- a/src/Fallout.Components/IHasTwitterCredentials.cs
+++ b/src/Fallout.Components/IHasTwitterCredentials.cs
@@ -1,6 +1,6 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IPack.cs b/src/Fallout.Components/IPack.cs
index 9b3a66a4b..804d9c722 100644
--- a/src/Fallout.Components/IPack.cs
+++ b/src/Fallout.Components/IPack.cs
@@ -1,12 +1,12 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IPublish.cs b/src/Fallout.Components/IPublish.cs
index 38a97d626..00f0620d6 100644
--- a/src/Fallout.Components/IPublish.cs
+++ b/src/Fallout.Components/IPublish.cs
@@ -10,6 +10,7 @@
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IReportCoverage.cs b/src/Fallout.Components/IReportCoverage.cs
index 5023fc79c..3705664d2 100644
--- a/src/Fallout.Components/IReportCoverage.cs
+++ b/src/Fallout.Components/IReportCoverage.cs
@@ -1,7 +1,6 @@
-using System;
+using System;
using System.IO;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
@@ -11,6 +10,7 @@
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Tools.Codecov.CodecovTasks;
using static Fallout.Common.Tools.ReportGenerator.ReportGeneratorTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/IRestore.cs b/src/Fallout.Components/IRestore.cs
index 5819fe98a..f2c2eb2d8 100644
--- a/src/Fallout.Components/IRestore.cs
+++ b/src/Fallout.Components/IRestore.cs
@@ -1,9 +1,9 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.Tooling;
using Fallout.Common.Tools.DotNet;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/ISignPackages.cs b/src/Fallout.Components/ISignPackages.cs
index 2a3f8f003..2a82d60f0 100644
--- a/src/Fallout.Components/ISignPackages.cs
+++ b/src/Fallout.Components/ISignPackages.cs
@@ -2,11 +2,11 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.CI.AppVeyor;
using Fallout.Common.IO;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Tools.SignPath.SignPathTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Fallout.Components/ITest.cs b/src/Fallout.Components/ITest.cs
index 537beb206..7dcec604b 100644
--- a/src/Fallout.Components/ITest.cs
+++ b/src/Fallout.Components/ITest.cs
@@ -1,8 +1,7 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using Fallout.Common;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.GitHubActions;
using Fallout.Common.CI.TeamCity;
@@ -14,6 +13,7 @@
using Fallout.Common.Utilities;
using Fallout.Common.Utilities.Collections;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
+using Fallout.Application;
namespace Fallout.Components;
diff --git a/src/Shims/Nuke.Common/NukeBuild.cs b/src/Shims/Nuke.Common/NukeBuild.cs
index c41c6994b..9a1fe39e3 100644
--- a/src/Shims/Nuke.Common/NukeBuild.cs
+++ b/src/Shims/Nuke.Common/NukeBuild.cs
@@ -1,3 +1,4 @@
+using Fallout.Application;
// The TransitionShimGenerator handles namespace prefix swaps (Fallout.* -> Nuke.*)
// but cannot rename types. NukeBuild -> FalloutBuild and INukeBuild ->
// IFalloutBuild were renamed during the rebrand (#59), so we hand-write those
@@ -9,13 +10,13 @@ namespace Nuke.Common;
///
/// Transition shim. Inherits from .
///
-public abstract class NukeBuild : Fallout.Common.FalloutBuild
+public abstract class NukeBuild : Fallout.Application.FalloutBuild
{
}
///
/// Transition shim. Extends .
///
-public interface INukeBuild : Fallout.Common.IFalloutBuild
+public interface INukeBuild : Fallout.Application.IFalloutBuild
{
}
diff --git a/tests/Consumers/Fallout.Consumer.Local/Build.cs b/tests/Consumers/Fallout.Consumer.Local/Build.cs
index fa5510cc7..bc22f662b 100644
--- a/tests/Consumers/Fallout.Consumer.Local/Build.cs
+++ b/tests/Consumers/Fallout.Consumer.Local/Build.cs
@@ -1,10 +1,6 @@
-//
-// Fallout consumer against this repo's local source. Catches breakage of the
-// public Fallout surface in the current PR.
-
-using Fallout.Common;
using Fallout.Common.IO;
using Fallout.Solutions; // was Fallout.Common.ProjectModel; — renamed in #254 (persistence layering + namespace cleanup)
+using Fallout.Application;
class Build : FalloutBuild
{
diff --git a/tests/Fallout.Build.Tests/BuildExecutorTest.cs b/tests/Fallout.Build.Tests/BuildExecutorTest.cs
index d4ed53e86..d8c9e5a67 100644
--- a/tests/Fallout.Build.Tests/BuildExecutorTest.cs
+++ b/tests/Fallout.Build.Tests/BuildExecutorTest.cs
@@ -1,10 +1,11 @@
-using System;
+using System;
using System.Linq;
using FluentAssertions;
-using Fallout.Common.Execution;
using Fallout.Domain.Execution;
using Fallout.Common.Utilities.Collections;
using Xunit;
+using Fallout.Application.Execution;
+using Fallout.Application;
namespace Fallout.Common.Tests.Execution;
diff --git a/tests/Fallout.Build.Tests/ControlFlowTest.cs b/tests/Fallout.Build.Tests/ControlFlowTest.cs
index d995cbbfb..b87dceb23 100644
--- a/tests/Fallout.Build.Tests/ControlFlowTest.cs
+++ b/tests/Fallout.Build.Tests/ControlFlowTest.cs
@@ -2,6 +2,7 @@
using System.Linq;
using FluentAssertions;
using Xunit;
+using Fallout.Application;
// ReSharper disable ArgumentsStyleLiteral
diff --git a/tests/Fallout.Build.Tests/DefaultInterfaceExecutionTest.cs b/tests/Fallout.Build.Tests/DefaultInterfaceExecutionTest.cs
index c2c21979a..d3704cd8e 100644
--- a/tests/Fallout.Build.Tests/DefaultInterfaceExecutionTest.cs
+++ b/tests/Fallout.Build.Tests/DefaultInterfaceExecutionTest.cs
@@ -1,9 +1,10 @@
-using System;
+using System;
using System.Linq;
using System.Linq.Expressions;
using FluentAssertions;
-using Fallout.Common.Execution;
using Xunit;
+using Fallout.Application.Execution;
+using Fallout.Application;
namespace Fallout.Common.Tests.Execution;
diff --git a/tests/Fallout.Build.Tests/ExecutableTargetFactoryTest.cs b/tests/Fallout.Build.Tests/ExecutableTargetFactoryTest.cs
index 168797267..974bdb618 100644
--- a/tests/Fallout.Build.Tests/ExecutableTargetFactoryTest.cs
+++ b/tests/Fallout.Build.Tests/ExecutableTargetFactoryTest.cs
@@ -2,8 +2,9 @@
using System.Linq;
using System.Linq.Expressions;
using FluentAssertions;
-using Fallout.Common.Execution;
using Xunit;
+using Fallout.Application.Execution;
+using Fallout.Application;
namespace Fallout.Common.Tests.Execution;
diff --git a/tests/Fallout.Build.Tests/ExecutionPlannerTest.cs b/tests/Fallout.Build.Tests/ExecutionPlannerTest.cs
index b8e51e94f..9c4d6ee98 100644
--- a/tests/Fallout.Build.Tests/ExecutionPlannerTest.cs
+++ b/tests/Fallout.Build.Tests/ExecutionPlannerTest.cs
@@ -2,8 +2,8 @@
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
-using Fallout.Common.Execution;
using Xunit;
+using Fallout.Application.Execution;
namespace Fallout.Common.Tests.Execution;
diff --git a/tests/Fallout.Build.Tests/ExecutionTestsInitializer.cs b/tests/Fallout.Build.Tests/ExecutionTestsInitializer.cs
index 30ec8acd4..b8ba0e5a1 100644
--- a/tests/Fallout.Build.Tests/ExecutionTestsInitializer.cs
+++ b/tests/Fallout.Build.Tests/ExecutionTestsInitializer.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Linq;
using System.Runtime.CompilerServices;
-using Fallout.Common.Execution;
+using Fallout.Application.Execution;
namespace Fallout.Common.Tests;
diff --git a/tests/Fallout.Build.Tests/GitRepositoryTest.cs b/tests/Fallout.Build.Tests/GitRepositoryTest.cs
index 6fa952f64..f466bd75b 100644
--- a/tests/Fallout.Build.Tests/GitRepositoryTest.cs
+++ b/tests/Fallout.Build.Tests/GitRepositoryTest.cs
@@ -1,9 +1,9 @@
-using System;
+using System;
using System.IO;
using System.Linq;
using FluentAssertions;
-using Fallout.Common.Git;
using Xunit;
+using Fallout.Application.Git;
namespace Fallout.Common.Tests;
diff --git a/tests/Fallout.Build.Tests/HostInitializer.cs b/tests/Fallout.Build.Tests/HostInitializer.cs
index 05bfd7f54..4a08d758b 100644
--- a/tests/Fallout.Build.Tests/HostInitializer.cs
+++ b/tests/Fallout.Build.Tests/HostInitializer.cs
@@ -1,7 +1,8 @@
-using System;
+using System;
using System.Linq;
using System.Runtime.CompilerServices;
using Fallout.Common.Utilities;
+using Fallout.Application;
namespace Fallout.Common.Tests;
diff --git a/tests/Fallout.Build.Tests/ParameterServiceTest.cs b/tests/Fallout.Build.Tests/ParameterServiceTest.cs
index 92a2618cf..5d73a5e62 100644
--- a/tests/Fallout.Build.Tests/ParameterServiceTest.cs
+++ b/tests/Fallout.Build.Tests/ParameterServiceTest.cs
@@ -6,6 +6,7 @@
using Fallout.Common.Utilities.Collections;
using Xunit;
using static Fallout.Common.Utilities.ReflectionUtility;
+using Fallout.Application;
namespace Fallout.Common.Tests;
diff --git a/tests/Fallout.Build.Tests/SchemaUtilityTest.cs b/tests/Fallout.Build.Tests/SchemaUtilityTest.cs
index 745585966..be531bd94 100644
--- a/tests/Fallout.Build.Tests/SchemaUtilityTest.cs
+++ b/tests/Fallout.Build.Tests/SchemaUtilityTest.cs
@@ -1,13 +1,14 @@
-using System;
+using System;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using Fallout.Common.Utilities;
using VerifyXunit;
using Xunit;
+using Fallout.Application.Execution;
+using Fallout.Application;
#pragma warning disable CS0169 // Field is never used
diff --git a/tests/Fallout.Cli.Tests/cake-scripts/default-target.verified.cs b/tests/Fallout.Cli.Tests/cake-scripts/default-target.verified.cs
index ec7f690a0..1f4570e26 100644
--- a/tests/Fallout.Cli.Tests/cake-scripts/default-target.verified.cs
+++ b/tests/Fallout.Cli.Tests/cake-scripts/default-target.verified.cs
@@ -14,7 +14,7 @@
using Fallout.Common.Tools.GitVersion;
using Fallout.Common.Tools.SignTool;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common;
+using Fallout.Application;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Tools.MSBuild;
using Fallout.Common.Tools.SignTool;
@@ -22,7 +22,7 @@
using Fallout.Common.IO;
using Fallout.Common.IO;
using Fallout.Common;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
using static Fallout.Common.Tools.MSBuild.MSBuildTasks;
using static Fallout.Common.Tools.SignTool.SignToolTasks;
diff --git a/tests/Fallout.Cli.Tests/cake-scripts/globbing.verified.cs b/tests/Fallout.Cli.Tests/cake-scripts/globbing.verified.cs
index bdadd924a..b8af39e71 100644
--- a/tests/Fallout.Cli.Tests/cake-scripts/globbing.verified.cs
+++ b/tests/Fallout.Cli.Tests/cake-scripts/globbing.verified.cs
@@ -14,7 +14,7 @@
using Fallout.Common.Tools.GitVersion;
using Fallout.Common.Tools.SignTool;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common;
+using Fallout.Application;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Tools.MSBuild;
using Fallout.Common.Tools.SignTool;
@@ -22,7 +22,7 @@
using Fallout.Common.IO;
using Fallout.Common.IO;
using Fallout.Common;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
using static Fallout.Common.Tools.MSBuild.MSBuildTasks;
using static Fallout.Common.Tools.SignTool.SignToolTasks;
diff --git a/tests/Fallout.Cli.Tests/cake-scripts/parameters.verified.cs b/tests/Fallout.Cli.Tests/cake-scripts/parameters.verified.cs
index b8012a3f7..7cc99b401 100644
--- a/tests/Fallout.Cli.Tests/cake-scripts/parameters.verified.cs
+++ b/tests/Fallout.Cli.Tests/cake-scripts/parameters.verified.cs
@@ -14,7 +14,7 @@
using Fallout.Common.Tools.GitVersion;
using Fallout.Common.Tools.SignTool;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common;
+using Fallout.Application;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Tools.MSBuild;
using Fallout.Common.Tools.SignTool;
@@ -22,7 +22,7 @@
using Fallout.Common.IO;
using Fallout.Common.IO;
using Fallout.Common;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
using static Fallout.Common.Tools.MSBuild.MSBuildTasks;
using static Fallout.Common.Tools.SignTool.SignToolTasks;
diff --git a/tests/Fallout.Cli.Tests/cake-scripts/paths.verified.cs b/tests/Fallout.Cli.Tests/cake-scripts/paths.verified.cs
index 495291107..c5d5cb56a 100644
--- a/tests/Fallout.Cli.Tests/cake-scripts/paths.verified.cs
+++ b/tests/Fallout.Cli.Tests/cake-scripts/paths.verified.cs
@@ -14,7 +14,7 @@
using Fallout.Common.Tools.GitVersion;
using Fallout.Common.Tools.SignTool;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common;
+using Fallout.Application;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Tools.MSBuild;
using Fallout.Common.Tools.SignTool;
@@ -22,7 +22,7 @@
using Fallout.Common.IO;
using Fallout.Common.IO;
using Fallout.Common;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
using static Fallout.Common.Tools.MSBuild.MSBuildTasks;
using static Fallout.Common.Tools.SignTool.SignToolTasks;
diff --git a/tests/Fallout.Cli.Tests/cake-scripts/references.verified.cs b/tests/Fallout.Cli.Tests/cake-scripts/references.verified.cs
index 1d0bc1e73..a0f943d48 100644
--- a/tests/Fallout.Cli.Tests/cake-scripts/references.verified.cs
+++ b/tests/Fallout.Cli.Tests/cake-scripts/references.verified.cs
@@ -14,7 +14,7 @@
using Fallout.Common.Tools.GitVersion;
using Fallout.Common.Tools.SignTool;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common;
+using Fallout.Application;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Tools.MSBuild;
using Fallout.Common.Tools.SignTool;
@@ -22,7 +22,7 @@
using Fallout.Common.IO;
using Fallout.Common.IO;
using Fallout.Common;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
using static Fallout.Common.Tools.MSBuild.MSBuildTasks;
using static Fallout.Common.Tools.SignTool.SignToolTasks;
diff --git a/tests/Fallout.Cli.Tests/cake-scripts/targets.verified.cs b/tests/Fallout.Cli.Tests/cake-scripts/targets.verified.cs
index 2754810b2..3e4364634 100644
--- a/tests/Fallout.Cli.Tests/cake-scripts/targets.verified.cs
+++ b/tests/Fallout.Cli.Tests/cake-scripts/targets.verified.cs
@@ -14,7 +14,7 @@
using Fallout.Common.Tools.GitVersion;
using Fallout.Common.Tools.SignTool;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common;
+using Fallout.Application;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Tools.MSBuild;
using Fallout.Common.Tools.SignTool;
@@ -22,7 +22,7 @@
using Fallout.Common.IO;
using Fallout.Common.IO;
using Fallout.Common;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
using static Fallout.Common.Tools.MSBuild.MSBuildTasks;
using static Fallout.Common.Tools.SignTool.SignToolTasks;
diff --git a/tests/Fallout.Cli.Tests/cake-scripts/tool-invocation.verified.cs b/tests/Fallout.Cli.Tests/cake-scripts/tool-invocation.verified.cs
index 0368b35c4..e0fe71714 100644
--- a/tests/Fallout.Cli.Tests/cake-scripts/tool-invocation.verified.cs
+++ b/tests/Fallout.Cli.Tests/cake-scripts/tool-invocation.verified.cs
@@ -14,7 +14,7 @@
using Fallout.Common.Tools.GitVersion;
using Fallout.Common.Tools.SignTool;
using Fallout.Common.Utilities.Collections;
-using Fallout.Common;
+using Fallout.Application;
using Fallout.Common.Tools.DotNet;
using Fallout.Common.Tools.MSBuild;
using Fallout.Common.Tools.SignTool;
@@ -22,7 +22,7 @@
using Fallout.Common.IO;
using Fallout.Common.IO;
using Fallout.Common;
-using static Fallout.Common.ControlFlow;
+using static Fallout.Application.ControlFlow;
using static Fallout.Common.Tools.DotNet.DotNetTasks;
using static Fallout.Common.Tools.MSBuild.MSBuildTasks;
using static Fallout.Common.Tools.SignTool.SignToolTasks;
diff --git a/tests/Fallout.Common.Tests/CI/ConfigurationGenerationTest.cs b/tests/Fallout.Common.Tests/CI/ConfigurationGenerationTest.cs
index ce164bfb5..8866dbcf5 100644
--- a/tests/Fallout.Common.Tests/CI/ConfigurationGenerationTest.cs
+++ b/tests/Fallout.Common.Tests/CI/ConfigurationGenerationTest.cs
@@ -1,19 +1,20 @@
-using System;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
-using Fallout.Common.CI;
using Fallout.Common.CI.AppVeyor;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.GitHubActions;
using Fallout.Common.CI.TeamCity;
-using Fallout.Common.Execution;
using Fallout.Common.IO;
using Fallout.Common.Tooling;
using VerifyXunit;
using Xunit;
+using Fallout.Application.Execution;
+using Fallout.Application.CI;
+using Fallout.Application;
namespace Fallout.Common.Tests.CI;
diff --git a/tests/Fallout.Common.Tests/CI/ITestConfigurationGenerator.cs b/tests/Fallout.Common.Tests/CI/ITestConfigurationGenerator.cs
index 547000106..bc8f3c653 100644
--- a/tests/Fallout.Common.Tests/CI/ITestConfigurationGenerator.cs
+++ b/tests/Fallout.Common.Tests/CI/ITestConfigurationGenerator.cs
@@ -1,7 +1,7 @@
using System;
using System.IO;
using System.Linq;
-using Fallout.Common.CI;
+using Fallout.Application.CI;
namespace Fallout.Common.Tests.CI;
diff --git a/tests/Fallout.Common.Tests/CITest.cs b/tests/Fallout.Common.Tests/CITest.cs
index ac1a79ab3..44aa6c78d 100644
--- a/tests/Fallout.Common.Tests/CITest.cs
+++ b/tests/Fallout.Common.Tests/CITest.cs
@@ -1,10 +1,9 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using FluentAssertions;
-using Fallout.Common.CI;
using Fallout.Common.CI.AppVeyor;
using Fallout.Common.CI.AzurePipelines;
using Fallout.Common.CI.Bitrise;
@@ -13,6 +12,7 @@
using Fallout.Common.CI.TeamCity;
using Fallout.Common.CI.TravisCI;
using Xunit;
+using Fallout.Application.CI;
namespace Fallout.Common.Tests;
diff --git a/tests/Fallout.Common.Tests/GitHubTasksTest.cs b/tests/Fallout.Common.Tests/GitHubTasksTest.cs
index 1b13ea081..defc2c1d0 100644
--- a/tests/Fallout.Common.Tests/GitHubTasksTest.cs
+++ b/tests/Fallout.Common.Tests/GitHubTasksTest.cs
@@ -1,10 +1,10 @@
using System;
using System.Linq;
using FluentAssertions;
-using Fallout.Common.Git;
using Fallout.Common.IO;
using Fallout.Common.Tools.GitHub;
using Xunit;
+using Fallout.Application.Git;
namespace Fallout.Common.Tests;
diff --git a/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs b/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs
index 18855dfd8..803ac6916 100644
--- a/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs
+++ b/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs
@@ -47,10 +47,8 @@ internal class Solution(SolutionModel model, AbsolutePath path) : Fallout.Soluti
public Fallout.Solutions.Project Fallout_Utilities_Text_Yaml => this.GetProject("Fallout.Utilities.Text.Yaml");
public Fallout.Solutions.Project Nuke_Build => this.GetProject("Nuke.Build");
public Fallout.Solutions.Project Nuke_Common => this.GetProject("Nuke.Common");
- public Fallout.Solutions.Project Nuke_Common_Shim_Tests => this.GetProject("Nuke.Common.Shim.Tests");
public Fallout.Solutions.Project Nuke_Components => this.GetProject("Nuke.Components");
public Fallout.Solutions.Project Nuke_Components_Shim_Tests => this.GetProject("Nuke.Components.Shim.Tests");
- public Fallout.Solutions.Project Nuke_Consumer => this.GetProject("Nuke.Consumer");
public _misc misc => Unsafe.As<_misc>(this.GetSolutionFolder("misc"));
diff --git a/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.cs b/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.cs
index 3cb6d2a52..65b531f46 100644
--- a/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.cs
+++ b/tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.cs
@@ -1,13 +1,13 @@
-using System;
+using System;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
-using Fallout.Common;
using Fallout.Solutions;
using VerifyXunit;
using Xunit;
+using Fallout.Application;
namespace Fallout.SourceGenerators.Tests;
diff --git a/tests/Nuke.Common.Shim.Tests/SampleConsumerBuild.cs b/tests/Nuke.Common.Shim.Tests/SampleConsumerBuild.cs
index 32dcad3af..a3a29f117 100644
--- a/tests/Nuke.Common.Shim.Tests/SampleConsumerBuild.cs
+++ b/tests/Nuke.Common.Shim.Tests/SampleConsumerBuild.cs
@@ -15,6 +15,7 @@
using Nuke.Common.IO;
using Nuke.Common.ProjectModel;
using Nuke.Common.Utilities;
+using Fallout.Application.Git;
namespace Nuke.Common.Shim.Tests;
@@ -30,7 +31,7 @@ public abstract class SampleConsumerBuild : NukeBuild, INukeBuild
[Secret] readonly string NuGetApiKey;
[Solution] readonly Fallout.Solutions.Solution Solution;
[Solution("path/to/explicit.slnx")] readonly Fallout.Solutions.Solution ExplicitSolution;
- [GitRepository] readonly Fallout.Common.Git.GitRepository GitRepository;
+ [GitRepository] readonly Fallout.Application.Git.GitRepository GitRepository;
// CI-host shims expose only the static `Instance` accessor. Consumers can
// still chain into instance members because the returned type is canonical.
diff --git a/tools/OnionRewriter/DocumentRewriter.cs b/tools/OnionRewriter/DocumentRewriter.cs
index 59d98678b..b96253624 100644
--- a/tools/OnionRewriter/DocumentRewriter.cs
+++ b/tools/OnionRewriter/DocumentRewriter.cs
@@ -9,7 +9,8 @@ public record struct Counts(bool Changed, int Refs, int Added, int Dropped, int
public static (SyntaxNode Root, Counts Counts) Rewrite(
SyntaxNode root, SemanticModel model, bool isSource,
- Func isMovable, Func mapNs, Func isMoved)
+ Func isMovable, Func mapNs, Func isMoved,
+ HashSet surviving)
{
var cu = (CompilationUnitSyntax)root;
@@ -19,7 +20,15 @@ public static (SyntaxNode Root, Counts Counts) Rewrite(
var usedResidualMovableNs = new HashSet(); // old movable namespaces still needed (residual types)
foreach (var name in cu.DescendantNodes().OfType())
{
- if (model.GetSymbolInfo(name).Symbol is not INamedTypeSymbol t) continue; // only type-position binds
+ // Type-position binds to a type symbol; an attribute/`new` binds to its constructor; an
+ // extension call (x.NotNull()) binds to the reduced method — take the declaring type in each
+ // case so attributes AND extension-method imports (often same-namespace siblings a moved file
+ // loses) are counted.
+ var sym = model.GetSymbolInfo(name).Symbol;
+ var t = sym as INamedTypeSymbol
+ ?? (sym is IMethodSymbol { MethodKind: MethodKind.Constructor } ctor ? ctor.ContainingType : null)
+ ?? (sym is IMethodSymbol { IsExtensionMethod: true } ext ? (ext.ReducedFrom ?? ext).ContainingType : null);
+ if (t is null) continue;
var ns = t.OriginalDefinition.ContainingNamespace?.ToDisplayString() ?? "";
if (!isMovable(ns)) continue;
if (isMoved(t)) { usedMovedNewNs.Add(mapNs(ns)); usedMovedOldNs.Add(ns); }
@@ -44,15 +53,22 @@ public static (SyntaxNode Root, Counts Counts) Rewrite(
var name = u.Name?.ToString();
if (u.StaticKeyword.IsKind(SyntaxKind.None) && u.Alias is null && name != null && isMovable(name))
{
- // Drop only `using`s orphaned BY THE MOVE — i.e. a moved type was imported from here and
- // no residual type still is. Leave pre-existing unused usings alone (not our concern).
- if (usedMovedOldNs.Contains(name) && !usedResidualMovableNs.Contains(name)) dropped++;
+ // Drop a movable `using` when its namespace is fully evacuated (no residual declarations
+ // anywhere — would otherwise dangle), OR when a moved type was imported from here and no
+ // residual type still is. Otherwise keep (residual still used, or a pre-existing unused
+ // using of a surviving namespace — not our concern).
+ var evacuated = !surviving.Contains(name);
+ if (evacuated || (usedMovedOldNs.Contains(name) && !usedResidualMovableNs.Contains(name))) dropped++;
else keep.Add(u);
}
else keep.Add(u); // static/alias usings get their type names remapped in Stage 1
}
int added = 0;
- foreach (var ns in usedMovedNewNs)
+ // Moved types → new-namespace usings. Plus, for SOURCE files that change namespace: residual
+ // movable-namespace types they used to see as same-namespace siblings now need an explicit
+ // `using` (e.g. ParameterService leaving Fallout.Common still uses Utilities' ArgumentParser).
+ var toAdd = isSource ? usedMovedNewNs.Concat(usedResidualMovableNs) : usedMovedNewNs;
+ foreach (var ns in toAdd.Distinct())
{
if (ownNs.Contains(ns)) continue;
if (keep.Any(u => u.StaticKeyword.IsKind(SyntaxKind.None) && u.Alias is null && u.Name?.ToString() == ns)) continue;
@@ -88,8 +104,14 @@ sealed class SyntaxFixer(SemanticModel model, bool isSource, Func
if (symbol != null && isMoved(symbol))
{
var ns = symbol.OriginalDefinition.ContainingNamespace!.ToDisplayString();
- Refs++;
- return visited.WithLeft(ParseName(mapNs(ns)).WithTriviaFrom(visited.Left));
+ // Only remap when Left is EXACTLY the namespace (direct `Namespace.Type`). For a nested
+ // ref (`Namespace.Outer.Nested`), Left includes the outer type — leave it to the inner
+ // QualifiedName visit, which remaps just the namespace and preserves the outer qualifier.
+ if (node.Left.ToString() == ns)
+ {
+ Refs++;
+ return visited.WithLeft(ParseName(mapNs(ns)).WithTriviaFrom(visited.Left));
+ }
}
return visited;
}
diff --git a/tools/OnionRewriter/Program.cs b/tools/OnionRewriter/Program.cs
index a4ddcd5f3..bd0682623 100644
--- a/tools/OnionRewriter/Program.cs
+++ b/tools/OnionRewriter/Program.cs
@@ -1,6 +1,8 @@
using System.Runtime.CompilerServices;
using Microsoft.Build.Locator;
using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
// OnionRewriter (semantic) — ADR-0006. Moves every type declared in a source project out of an old
// namespace prefix into a new one, and fixes references across the whole workspace by the symbol each
@@ -63,10 +65,31 @@ void Collect(INamespaceSymbol nsSym)
Collect(sourceComp!.Assembly.GlobalNamespace);
Console.WriteLine($"Moved types (declared in {SourceAssembly}, movable ns): {movedFullNames.Count}");
+ // Match by assembly NAME + the moved-type set (resolves correctly across projects — a referenced
+ // project's assembly symbol is a different instance per compilation, so identity comparison fails
+ // cross-project). The pinned Consumer.NuGet/Nuke.Consumer projects also have a "Fallout.Build"
+ // assembly via their package, but those projects are skipped entirely in the document loop.
bool IsMovedType(INamedTypeSymbol t)
{
var ns = t.OriginalDefinition.ContainingNamespace?.ToDisplayString() ?? "";
- return t.OriginalDefinition.ContainingAssembly?.Name == SourceAssembly && IsMovable(ns) && movedFullNames.Contains($"{ns}.{t.OriginalDefinition.Name}");
+ return t.OriginalDefinition.ContainingAssembly?.Name == SourceAssembly
+ && IsMovable(ns)
+ && movedFullNames.Contains($"{ns}.{t.OriginalDefinition.Name}");
+ }
+
+ // Movable namespaces still declared OUTSIDE the source project (so they survive the move). A
+ // movable `using` whose namespace is NOT here is evacuated and must be dropped even if the file
+ // referenced its types only via inference (no explicit type name).
+ var survivingMovableNs = new HashSet();
+ foreach (var f in Directory.EnumerateFiles(Path.Combine(repo, "src"), "*.cs", SearchOption.AllDirectories))
+ {
+ if (f.Contains($"{Path.DirectorySeparatorChar}obj{Path.DirectorySeparatorChar}") || f.Contains($"{Path.DirectorySeparatorChar}bin{Path.DirectorySeparatorChar}")) continue;
+ if (f.StartsWith(Path.Combine(repo, "src", "Fallout.Build") + Path.DirectorySeparatorChar, StringComparison.Ordinal)) continue;
+ foreach (var n in CSharpSyntaxTree.ParseText(File.ReadAllText(f)).GetRoot().DescendantNodes().OfType())
+ {
+ var ns = n.Name.ToString();
+ if (IsMovable(ns)) survivingMovableNs.Add(ns);
+ }
}
int filesChanged = 0, refsRewritten = 0, usingsAdded = 0, usingsDropped = 0, nsDecls = 0;
@@ -78,11 +101,15 @@ bool IsMovedType(INamedTypeSymbol t)
foreach (var doc in project.Documents)
{
if (doc.FilePath is null || !doc.FilePath.EndsWith(".cs") || doc.FilePath.Contains($"{Path.DirectorySeparatorChar}obj{Path.DirectorySeparatorChar}")) continue;
+ // Package consumers (Consumer.NuGet, Nuke.Consumer) compile against the PUBLISHED package,
+ // which still has the old namespaces — the local rename must not touch them. (Consumer.Local
+ // references the local source and IS migrated.)
+ if (doc.FilePath.Contains("Consumer.NuGet") || doc.FilePath.Contains("Nuke.Consumer")) continue;
var model = await doc.GetSemanticModelAsync();
var root = await doc.GetSyntaxRootAsync();
if (model is null || root is null) continue;
- var (newRoot, c) = DocumentRewriter.Rewrite(root, model, isSource, IsMovable, MapNs, IsMovedType);
+ var (newRoot, c) = DocumentRewriter.Rewrite(root, model, isSource, IsMovable, MapNs, IsMovedType, survivingMovableNs);
if (c.Changed)
{
filesChanged++; refsRewritten += c.Refs; usingsAdded += c.Added; usingsDropped += c.Dropped; nsDecls += c.NsDecls;
From 4f29ae4c9d5d6203ee3e57e0927a9d965beaeb80 Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 23:44:08 +1200
Subject: [PATCH 10/46] docs(changelog): record Application ring (step 2) under
the onion entry
Co-Authored-By: Claude Opus 4.8
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c94dfb169..8f429014c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- **Onion layering — namespace realignment begun; `Fallout.Core` → `Fallout.Domain`** ([ADR-0006](docs/adr/0006-onion-layering-and-namespace-realignment.md)). First ring of a project-wide realignment to explicit onion layers (`Fallout.Domain` / `Fallout.Application` / `Fallout.Infrastructure`, `Fallout.Cli` composition root) with `namespace = project = layer`, dissolving the `Fallout.Common.*` catch-all. This entry covers **step 1 (the Domain ring)**; the Application/Infrastructure/tooling-port rings land on `experimental` as separate PRs (any that miss the 2026 cut roll to 2027).
- **Namespaces**: `Fallout.Core.Planning` → `Fallout.Domain.Planning`; `ITargetModel` and `ExecutionStatus` move out of `Fallout.Common.Execution` → `Fallout.Domain.Execution`. **Package/assembly**: `Fallout.Core` → `Fallout.Domain`. Replace the corresponding `using` directives and any `PackageReference`/`ProjectReference`.
- **Migration / shim**: the `Nuke.*` transition shims silently stop re-exporting the two moved types (the generator only mirrors the `Fallout.Common.*` prefix). A fresh migration/shim strategy is designed once the realignment completes (ADR-0006 defers it deliberately); native `Fallout.*` consumers rewrite the two `using`s above.
+ - **Step 2 (the Application ring)**: the core API `Fallout.Build` declared under `Fallout.Common.*` — `FalloutBuild`, `Target`, `[Parameter]` & attributes, `Host`, the execution engine, value injection, and the CI ports — moves to **`Fallout.Application.*`**. Native consumers rewrite `using Fallout.Common;` → `using Fallout.Application;` (and the `Fallout.Common.Execution`/`.CI`/`.ValueInjection` sub-namespaces likewise). Performed by a semantic rewriter (`tools/OnionRewriter`). The `Nuke.*` shim surface that mirrored these (`Nuke.Common.Target`, `…Parameter`, …) lapses for now — `Nuke.Consumer` and `Nuke.Common.Shim.Tests` are temporarily out of the solution until the migration phase. The `Fallout.Build` **assembly/project** is renamed to `Fallout.Application` in a later mechanical step (namespaces are already migrated).
- **Adopted calendar versioning (`YYYY.MINOR.PATCH`) + dual-pace channel model; retired the v11 numbering** ([ADR-0004](docs/adr/0004-calendar-versioning-and-dual-pace-channels.md)). Fallout now ships on calendar versions (`2026.0.0`, `2026.1.0`, …) — mechanically valid SemVer with the major equal to the calendar year. **Breaking changes are batched to the yearly major cut**; mid-year stable releases (`release/YYYY`) are strictly non-breaking. `main` becomes the published **edge** channel (date-stamped prereleases to GitHub Packages); the slow/stable track lives on `release/YYYY`. Opt-in unstable APIs are marked `[Experimental("FALLOUT0xx")]`.
- **Migration / impact**: the `11.0.x` packages never shipped a clean stable release (all unlisted), so this strands no stable consumers. The headline content previously slated for "v11" now ships as **`2026.0.0`**. Any tooling pinned to a `[11.0,12.0)`-style range should retarget the `2026.x` line.
- **Legacy unaffected**: the `release/v10` line stays on semver `10.x` and continues to receive security/critical fixes — v10 consumers do nothing.
From 813eca2504684bbcb0d0bfa90cf1ddebad566f4c Mon Sep 17 00:00:00 2001
From: Chrison Simtian
Date: Sun, 31 May 2026 23:52:42 +1200
Subject: [PATCH 11/46] =?UTF-8?q?feat(tooling):=20extract=20process-execut?=
=?UTF-8?q?ion=20port=20(IProcessRunner)=20=E2=80=94=20onion=20step=203?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
ADR-0006 step 3 (first piece of the Infrastructure ring). The single impure step of
running a tool — spawning an OS process — now goes through an injectable IProcessRunner
port (default SystemProcessRunner) instead of a static Process.Start. This lets the
tooling vocabulary stay pure (prerequisite for moving the wrappers to Application in
step 4) and makes builds unit-testable by swapping the runner. Non-breaking; behaviour
identical — Tooling builds, 64/64 tests pass.
Co-Authored-By: Claude Opus 4.8
---
src/Fallout.Tooling/IProcessRunner.cs | 15 +++++++++++++++
src/Fallout.Tooling/ProcessTasks.cs | 16 +++++++++-------
src/Fallout.Tooling/SystemProcessRunner.cs | 21 +++++++++++++++++++++
3 files changed, 45 insertions(+), 7 deletions(-)
create mode 100644 src/Fallout.Tooling/IProcessRunner.cs
create mode 100644 src/Fallout.Tooling/SystemProcessRunner.cs
diff --git a/src/Fallout.Tooling/IProcessRunner.cs b/src/Fallout.Tooling/IProcessRunner.cs
new file mode 100644
index 000000000..040f89ec4
--- /dev/null
+++ b/src/Fallout.Tooling/IProcessRunner.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Diagnostics;
+
+namespace Fallout.Common.Tooling;
+
+///
+/// The process-execution port (ADR-0006 step 3). Abstracts the single impure step of running a tool —
+/// spawning an OS process — so the tooling vocabulary (, the generated
+/// wrappers) stays pure and side-effect-free, and builds become unit-testable by swapping in a fake
+/// runner via . The default adapter is .
+///
+public interface IProcessRunner
+{
+ IProcess Start(ProcessStartInfo startInfo, int? timeout, Action logger, Func outputFilter);
+}
diff --git a/src/Fallout.Tooling/ProcessTasks.cs b/src/Fallout.Tooling/ProcessTasks.cs
index d95a4fbed..3a17bd46f 100644
--- a/src/Fallout.Tooling/ProcessTasks.cs
+++ b/src/Fallout.Tooling/ProcessTasks.cs
@@ -19,6 +19,12 @@ public static class ProcessTasks
public static bool LogWorkingDirectory = true;
public static string DefaultWorkingDirectory = EnvironmentInfo.WorkingDirectory;
+ ///
+ /// The process-execution port (ADR-0006). Defaults to spawning a real OS process; tests (and, later,
+ /// a hosted runner) swap in a fake/alternate .
+ ///
+ public static IProcessRunner Runner { get; set; } = new SystemProcessRunner();
+
private static readonly char[] s_pathSeparators = { EnvironmentInfo.IsWin ? ';' : ':' };
private static readonly object s_lock = new();
@@ -158,12 +164,8 @@ private static IProcess StartProcessInternal(
if (logInvocation)
LogInvocation(startInfo, outputFilter, environmentVariables != null);
- var process = Process.Start(startInfo);
- if (process == null)
- return null;
-
- var output = GetOutputCollection(process, logger, outputFilter);
- return new Process2(process, outputFilter, timeout, output);
+ // The one impure step — spawning the OS process — goes through the execution port.
+ return Runner.Start(startInfo, timeout, logger, outputFilter);
}
private static void LogInvocation(ProcessStartInfo startInfo, Func outputFilter, bool hasEnvironmentVariables)
@@ -188,7 +190,7 @@ private static void LogInvocation(ProcessStartInfo startInfo, Func GetOutputCollection(
+ internal static BlockingCollection
For more details, visit the official website.
[ExcludeFromCodeCoverage]
@@ -25,13 +25,13 @@ public partial class CodecovTasks : ToolTasks, IRequireNuGetPackage
/// Code coverage is a measurement used to express which lines of code were executed by a test suite. We use three primary terms to describe each line executed.
- hit - indicates that the source code was executed by the test suite.
- partial - indicates that the source code was not fully executed by the test suite; there are remaining branches that were not executed.
- miss - indicates that the source code was not executed by the test suite.
Coverage is the ratio of hits / (sum of hit + partial + miss). A code base that has 5 lines executed by tests out of 12 total lines will receive a coverage ratio of 41% (rounding down).Phrased simply, code coverage provides a visual measurement of what source code is being executed by a test suite. This information indicates to the software developer where they should write new tests in an effort to achieve higher coverage.Testing source code helps to prevent bugs and syntax errors by executing each line with a known variable and cross-checking it with an expected output.For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --branch via
- --build via
- --disable-network via
- --dump via
- --env via
- --feature via
- --file via
- --flag via
- --name via
- --no-color via
- --pr via
- --required via
- --root via
- --sha via
- --slug via
- --tag via
- --token via
- --url via
- --verbose via
public static IReadOnlyCollection Codecov(CodecovSettings options = null) => new CodecovTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection Codecov(Configure configurator) => new CodecovTasks().Run(configurator.Invoke(new CodecovSettings()));
- ///
+ ///
public static IEnumerable<(CodecovSettings Settings, IReadOnlyCollection Output)> Codecov(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(Codecov, degreeOfParallelism, completeOnFailure);
}
#region CodecovSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(CodecovTasks), Command = nameof(CodecovTasks.Codecov))]
public partial class CodecovSettings : ToolOptions
@@ -79,7 +79,7 @@ public partial class CodecovSettings : ToolOptions
}
#endregion
#region CodecovSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class CodecovSettingsExtensions
{
diff --git a/src/Fallout.Common/Tools/Codecov/CodecovTasks.cs b/src/Fallout.Common/Tools/Codecov/CodecovTasks.cs
index 8cbcccf33..90f8c3cf5 100644
--- a/src/Fallout.Common/Tools/Codecov/CodecovTasks.cs
+++ b/src/Fallout.Common/Tools/Codecov/CodecovTasks.cs
@@ -1,7 +1,9 @@
-using System;
-using Fallout.Common.Tooling;
+using System;
+using Fallout.Application.Tooling;
+using Fallout.Infrastructure.Tooling;
+using Fallout.Common;
-namespace Fallout.Common.Tools.Codecov;
+namespace Fallout.Application.Tools.Codecov;
partial class CodecovTasks
{
diff --git a/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs b/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs
index 7ccb947da..c4fdbb969 100644
--- a/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs
+++ b/src/Fallout.Common/Tools/CorFlags/CorFlags.Generated.cs
@@ -1,7 +1,6 @@
// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/CorFlags/CorFlags.json
using Fallout.Common;
-using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -12,8 +11,9 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.CorFlags;
+namespace Fallout.Application.Tools.CorFlags;
/// The CorFlags Conversion tool allows you to configure the CorFlags section of the header of a portable executable image.
For more details, visit the official website.
[ExcludeFromCodeCoverage]
@@ -27,13 +27,13 @@ public partial class CorFlagsTasks : ToolTasks, IRequirePathTool
/// The CorFlags Conversion tool allows you to configure the CorFlags section of the header of a portable executable image.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <assembly> via
- -32BIT via
- -32BITPREF via
- -Force via
- -ILONLY via
- -nologo via
- -RevertCLRHeader via
- -UpgradeCLRHeader via
public static IReadOnlyCollection CorFlags(CorFlagsSettings options = null) => new CorFlagsTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection CorFlags(Configure configurator) => new CorFlagsTasks().Run(configurator.Invoke(new CorFlagsSettings()));
- ///
+ ///
public static IEnumerable<(CorFlagsSettings Settings, IReadOnlyCollection Output)> CorFlags(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(CorFlags, degreeOfParallelism, completeOnFailure);
}
#region CorFlagsSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(CorFlagsTasks), Command = nameof(CorFlagsTasks.CorFlags))]
public partial class CorFlagsSettings : ToolOptions
@@ -57,7 +57,7 @@ public partial class CorFlagsSettings : ToolOptions
}
#endregion
#region CorFlagsSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class CorFlagsSettingsExtensions
{
diff --git a/src/Fallout.Common/Tools/CorFlags/CorFlagsSettings.cs b/src/Fallout.Common/Tools/CorFlags/CorFlagsSettings.cs
index cbf870749..6ec2148f7 100644
--- a/src/Fallout.Common/Tools/CorFlags/CorFlagsSettings.cs
+++ b/src/Fallout.Common/Tools/CorFlags/CorFlagsSettings.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Reflection;
-namespace Fallout.Common.Tools.CorFlags;
+namespace Fallout.Application.Tools.CorFlags;
partial class CorFlagsSettings
{
diff --git a/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs b/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs
index 9ab051b0b..8164e97d0 100644
--- a/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs
+++ b/src/Fallout.Common/Tools/CoverallsNet/CoverallsNet.Generated.cs
@@ -1,4 +1,3 @@
-using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -10,8 +9,9 @@
using System.Text;
using System.Text.Json.Serialization;
using Fallout.Application;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.CoverallsNet;
+namespace Fallout.Application.Tools.CoverallsNet;
/// Coveralls uploader for .Net Code coverage of your C# source code. Should work with any code files that get reported with the supported coverage tools, but the primary focus is CSharp.
For more details, visit the official website.
[ExcludeFromCodeCoverage]
@@ -26,13 +26,13 @@ public partial class CoverallsNetTasks : ToolTasks, IRequireNuGetPackage
/// Coveralls uploader for .Net Code coverage of your C# source code. Should work with any code files that get reported with the supported coverage tools, but the primary focus is CSharp.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --basePath via
- --commitAuthor via
- --commitBranch via
- --commitEmail via
- --commitId via
- --commitMessage via
- --dryrun via
- --dynamiccodecoverage via
- --exportcodecoverage via
- --input via
- --jobId via
- --monocov via
- --opencover via
- --output via
- --pullRequest via
- --repoToken via
- --repoTokenVariable via
- --serviceName via
- --useRelativePaths via
public static IReadOnlyCollection CoverallsNet(CoverallsNetSettings options = null) => new CoverallsNetTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection CoverallsNet(Configure configurator) => new CoverallsNetTasks().Run(configurator.Invoke(new CoverallsNetSettings()));
- ///
+ ///
public static IEnumerable<(CoverallsNetSettings Settings, IReadOnlyCollection Output)> CoverallsNet(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(CoverallsNet, degreeOfParallelism, completeOnFailure);
}
#region CoverallsNetSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(CoverallsNetTasks), Command = nameof(CoverallsNetTasks.CoverallsNet))]
public partial class CoverallsNetSettings : ToolOptions
@@ -78,7 +78,7 @@ public partial class CoverallsNetSettings : ToolOptions
}
#endregion
#region CoverallsNetSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class CoverallsNetSettingsExtensions
{
diff --git a/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs b/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs
index 78801f476..34aa9fa61 100644
--- a/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs
+++ b/src/Fallout.Common/Tools/Coverlet/Coverlet.Generated.cs
@@ -1,8 +1,6 @@
// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Coverlet/Coverlet.json
using Fallout.Common;
-using Fallout.Common.Tooling;
-using Fallout.Common.Tools.DotNet;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -13,8 +11,10 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application.Tooling;
+using Fallout.Application.Tools.DotNet;
-namespace Fallout.Common.Tools.Coverlet;
+namespace Fallout.Application.Tools.Coverlet;
/// Coverlet is a cross platform code coverage library for .NET Core, with support for line, branch and method coverage.The dotnet test command is used to execute unit tests in a given project. Unit tests are console application projects that have dependencies on the unit test framework (for example, MSTest, NUnit, or xUnit) and the dotnet test runner for the unit testing framework. These are packaged as NuGet packages and are restored as ordinary dependencies for the project.
For more details, visit the official website.
[ExcludeFromCodeCoverage]
@@ -29,13 +29,13 @@ public partial class CoverletTasks : ToolTasks, IRequireNuGetPackage
/// Coverlet is a cross platform code coverage library for .NET Core, with support for line, branch and method coverage.The dotnet test command is used to execute unit tests in a given project. Unit tests are console application projects that have dependencies on the unit test framework (for example, MSTest, NUnit, or xUnit) and the dotnet test runner for the unit testing framework. These are packaged as NuGet packages and are restored as ordinary dependencies for the project.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <assembly> via
- --exclude via
- --exclude-by-file via
- --format via
- --include via
- --merge-with via
- --output via
- --target via
- --targetargs via
- --threshold via
- --threshold-type via
- --version via
public static IReadOnlyCollection Coverlet(CoverletSettings options = null) => new CoverletTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection Coverlet(Configure configurator) => new CoverletTasks().Run(configurator.Invoke(new CoverletSettings()));
- ///
+ ///
public static IEnumerable<(CoverletSettings Settings, IReadOnlyCollection Output)> Coverlet(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(Coverlet, degreeOfParallelism, completeOnFailure);
}
#region CoverletSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(CoverletTasks), Command = nameof(CoverletTasks.Coverlet))]
public partial class CoverletSettings : ToolOptions
@@ -67,7 +67,7 @@ public partial class CoverletSettings : ToolOptions
}
#endregion
#region CoverletSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class CoverletSettingsExtensions
{
diff --git a/src/Fallout.Common/Tools/Coverlet/CoverletSettingsExtensions.cs b/src/Fallout.Common/Tools/Coverlet/CoverletSettingsExtensions.cs
index d37e3dfb3..0acd04d30 100644
--- a/src/Fallout.Common/Tools/Coverlet/CoverletSettingsExtensions.cs
+++ b/src/Fallout.Common/Tools/Coverlet/CoverletSettingsExtensions.cs
@@ -1,8 +1,8 @@
-using System;
+using System;
using System.Linq;
-using Fallout.Common.Tooling;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.Coverlet;
+namespace Fallout.Application.Tools.Coverlet;
public static partial class CoverletSettingsExtensions
{
diff --git a/src/Fallout.Common/Tools/Discord/Discord.Generated.cs b/src/Fallout.Common/Tools/Discord/Discord.Generated.cs
index 2277892ce..d1efe0e77 100644
--- a/src/Fallout.Common/Tools/Discord/Discord.Generated.cs
+++ b/src/Fallout.Common/Tools/Discord/Discord.Generated.cs
@@ -1,7 +1,6 @@
// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/Discord/Discord.json
using Fallout.Common;
-using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -12,8 +11,9 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.Discord;
+namespace Fallout.Application.Tools.Discord;
#region DiscordMessage
/// Used within .
diff --git a/src/Fallout.Common/Tools/Discord/DiscordTasks.cs b/src/Fallout.Common/Tools/Discord/DiscordTasks.cs
index 398d2cc39..b1b3c03b0 100644
--- a/src/Fallout.Common/Tools/Discord/DiscordTasks.cs
+++ b/src/Fallout.Common/Tools/Discord/DiscordTasks.cs
@@ -1,9 +1,9 @@
using System.Net.Http;
using System.Threading.Tasks;
-using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Net;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.Discord;
+namespace Fallout.Application.Tools.Discord;
public static class DiscordTasks
{
diff --git a/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs b/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs
index 114506878..d129d413e 100644
--- a/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs
+++ b/src/Fallout.Common/Tools/DocFX/DocFX.Generated.cs
@@ -1,7 +1,6 @@
// Generated from https://github.com/ChrisonSimtian/Fallout/blob/main/src/Fallout.Common/Tools/DocFX/DocFX.json
using Fallout.Common;
-using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -12,8 +11,9 @@
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.DocFX;
+namespace Fallout.Application.Tools.DocFX;
/// DocFX is an API documentation generator for .NET, and currently it supports C# and VB. It generates API reference documentation from triple-slash comments in your source code. It also allows you to use Markdown files to create additional topics such as tutorials and how-tos, and to customize the generated reference documentation. DocFX builds a static HTML website from your source code and Markdown files, which can be easily hosted on any web servers (for example, github.io). Also, DocFX provides you the flexibility to customize the layout and style of your website through templates. If you are interested in creating your own website with your own styles, you can follow how to create custom template to create custom templates.
For more details, visit the official website.
[ExcludeFromCodeCoverage]
@@ -28,76 +28,76 @@ public partial class DocFXTasks : ToolTasks, IRequireNuGetPackage
/// Generate client-only website combining API in YAML files and conceptual files.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <configFile> via
- --changesFile via
- --cleanupCacheHistory via
- --content via
- --correlationId via
- --debug via
- --debugOutput via
- --disableGitFeatures via
- --dryRun via
- --exportRawModel via
- --exportViewModel via
- --falName via
- --fileMetadataFile via
- --fileMetadataFiles via
- --force via
- --forcePostProcess via
- --globalMetadata via
- --globalMetadataFile via
- --globalMetadataFiles via
- --help via
- --hostname via
- --intermediateFolder via
- --keepFileLink via
- --log via
- --logLevel via
- --lruSize via
- --markdownEngineName via
- --markdownEngineProperties via
- --maxParallelism via
- --noLangKeyword via
- --output via
- --overwrite via
- --port via
- --postProcessors via
- --rawModelOutputFolder via
- --repositoryRoot via
- --resource via
- --schemaLicense via
- --serve via
- --template via
- --theme via
- --viewModelOutputFolder via
- --warningsAsErrors via
- --xref via
public static IReadOnlyCollection DocFXBuild(DocFXBuildSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXBuild(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXBuildSettings()));
- ///
+ ///
public static IEnumerable<(DocFXBuildSettings Settings, IReadOnlyCollection Output)> DocFXBuild(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXBuild, degreeOfParallelism, completeOnFailure);
/// Export dependency file.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <dependencyFile> via
- --help via
- --intermediateFolder via
- --version via
public static IReadOnlyCollection DocFXDependency(DocFXDependencySettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXDependency(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXDependencySettings()));
- ///
+ ///
public static IEnumerable<(DocFXDependencySettings Settings, IReadOnlyCollection Output)> DocFXDependency(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXDependency, degreeOfParallelism, completeOnFailure);
/// Download remote xref map file and create an xref archive in local.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <archiveFile> via
- --help via
- --xref via
public static IReadOnlyCollection DocFXDownload(DocFXDownloadSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXDownload(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXDownloadSettings()));
- ///
+ ///
public static IEnumerable<(DocFXDownloadSettings Settings, IReadOnlyCollection Output)> DocFXDownload(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXDownload, degreeOfParallelism, completeOnFailure);
/// Get an overall guide for the command and sub-commands.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
public static IReadOnlyCollection DocFXHelp(DocFXHelpSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXHelp(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXHelpSettings()));
- ///
+ ///
public static IEnumerable<(DocFXHelpSettings Settings, IReadOnlyCollection Output)> DocFXHelp(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXHelp, degreeOfParallelism, completeOnFailure);
/// Generate an initial docfx.json following the instructions.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --apiGlobPattern via
- --apiSourceFolder via
- --file via
- --help via
- --output via
- --overwrite via
- --quiet via
public static IReadOnlyCollection DocFXInit(DocFXInitSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXInit(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXInitSettings()));
- ///
+ ///
public static IEnumerable<(DocFXInitSettings Settings, IReadOnlyCollection Output)> DocFXInit(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXInit, degreeOfParallelism, completeOnFailure);
/// Merge .net base API in YAML files and toc files.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <configFile> via
- --content via
- --correlationId via
- --fileMetadataFile via
- --globalMetadata via
- --globalMetadataFile via
- --help via
- --log via
- --logLevel via
- --repositoryRoot via
- --tocMetadata via
- --warningsAsErrors via
public static IReadOnlyCollection DocFXMerge(DocFXMergeSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXMerge(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXMergeSettings()));
- ///
+ ///
public static IEnumerable<(DocFXMergeSettings Settings, IReadOnlyCollection Output)> DocFXMerge(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXMerge, degreeOfParallelism, completeOnFailure);
/// Generate YAML files from source code.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <projects> via
- --correlationId via
- --disableDefaultFilter via
- --disableGitFeatures via
- --filter via
- --force via
- --globalNamespaceId via
- --help via
- --log via
- --logLevel via
- --output via
- --property via
- --raw via
- --repositoryRoot via
- --shouldSkipMarkup via
- --warningsAsErrors via
public static IReadOnlyCollection DocFXMetadata(DocFXMetadataSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXMetadata(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXMetadataSettings()));
- ///
+ ///
public static IEnumerable<(DocFXMetadataSettings Settings, IReadOnlyCollection Output)> DocFXMetadata(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXMetadata, degreeOfParallelism, completeOnFailure);
/// Generate pdf file.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <configFile> via
- --basePath via
- --changesFile via
- --cleanupCacheHistory via
- --content via
- --correlationId via
- --css via
- --debug via
- --debugOutput via
- --disableGitFeatures via
- --dryRun via
- --errorHandling via
- --excludedTocs via
- --exportRawModel via
- --exportViewModel via
- --falName via
- --fileMetadataFile via
- --fileMetadataFiles via
- --force via
- --forcePostProcess via
- --generatesAppendices via
- --generatesExternalLink via
- --globalMetadata via
- --globalMetadataFile via
- --globalMetadataFiles via
- --help via
- --host via
- --hostname via
- --intermediateFolder via
- --keepFileLink via
- --keepRawFiles via
- --locale via
- --log via
- --logLevel via
- --lruSize via
- --markdownEngineName via
- --markdownEngineProperties via
- --maxParallelism via
- --name via
- --noLangKeyword via
- --noStdin via
- --output via
- --overwrite via
- --port via
- --postProcessors via
- --rawModelOutputFolder via
- --rawOutputFolder via
- --repositoryRoot via
- --resource via
- --schemaLicense via
- --serve via
- --template via
- --theme via
- --viewModelOutputFolder via
- --warningsAsErrors via
- --xref via
public static IReadOnlyCollection DocFXPdf(DocFXPdfSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXPdf(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXPdfSettings()));
- ///
+ ///
public static IEnumerable<(DocFXPdfSettings Settings, IReadOnlyCollection Output)> DocFXPdf(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXPdf, degreeOfParallelism, completeOnFailure);
/// Host a local static website.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <folder> via
- --help via
- --hostname via
- --port via
public static IReadOnlyCollection DocFXServe(DocFXServeSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXServe(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXServeSettings()));
- ///
+ ///
public static IEnumerable<(DocFXServeSettings Settings, IReadOnlyCollection Output)> DocFXServe(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXServe, degreeOfParallelism, completeOnFailure);
/// List or export existing template.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <command> via
- --all via
- --help via
- --output via
public static IReadOnlyCollection DocFXTemplate(DocFXTemplateSettings options = null) => new DocFXTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DocFXTemplate(Configure configurator) => new DocFXTasks().Run(configurator.Invoke(new DocFXTemplateSettings()));
- ///
+ ///
public static IEnumerable<(DocFXTemplateSettings Settings, IReadOnlyCollection Output)> DocFXTemplate(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DocFXTemplate, degreeOfParallelism, completeOnFailure);
}
#region DocFXBuildSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXBuild), Arguments = "build")]
public partial class DocFXBuildSettings : ToolOptions
@@ -193,7 +193,7 @@ public partial class DocFXBuildSettings : ToolOptions
}
#endregion
#region DocFXDependencySettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXDependency), Arguments = "dependency")]
public partial class DocFXDependencySettings : ToolOptions
@@ -209,7 +209,7 @@ public partial class DocFXDependencySettings : ToolOptions
}
#endregion
#region DocFXDownloadSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXDownload), Arguments = "download")]
public partial class DocFXDownloadSettings : ToolOptions
@@ -223,7 +223,7 @@ public partial class DocFXDownloadSettings : ToolOptions
}
#endregion
#region DocFXHelpSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXHelp), Arguments = "help")]
public partial class DocFXHelpSettings : ToolOptions
@@ -233,7 +233,7 @@ public partial class DocFXHelpSettings : ToolOptions
}
#endregion
#region DocFXInitSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXInit), Arguments = "init")]
public partial class DocFXInitSettings : ToolOptions
@@ -255,7 +255,7 @@ public partial class DocFXInitSettings : ToolOptions
}
#endregion
#region DocFXMergeSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXMerge), Arguments = "merge")]
public partial class DocFXMergeSettings : ToolOptions
@@ -287,7 +287,7 @@ public partial class DocFXMergeSettings : ToolOptions
}
#endregion
#region DocFXMetadataSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXMetadata), Arguments = "metadata")]
public partial class DocFXMetadataSettings : ToolOptions
@@ -327,7 +327,7 @@ public partial class DocFXMetadataSettings : ToolOptions
}
#endregion
#region DocFXPdfSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXPdf), Arguments = "pdf")]
public partial class DocFXPdfSettings : ToolOptions
@@ -447,7 +447,7 @@ public partial class DocFXPdfSettings : ToolOptions
}
#endregion
#region DocFXServeSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXServe), Arguments = "serve")]
public partial class DocFXServeSettings : ToolOptions
@@ -463,7 +463,7 @@ public partial class DocFXServeSettings : ToolOptions
}
#endregion
#region DocFXTemplateSettings
-///
+///
[ExcludeFromCodeCoverage]
[Command(Type = typeof(DocFXTasks), Command = nameof(DocFXTasks.DocFXTemplate), Arguments = "template")]
public partial class DocFXTemplateSettings : ToolOptions
@@ -479,7 +479,7 @@ public partial class DocFXTemplateSettings : ToolOptions
}
#endregion
#region DocFXBuildSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXBuildSettingsExtensions
{
@@ -1090,7 +1090,7 @@ public static partial class DocFXBuildSettingsExtensions
}
#endregion
#region DocFXDependencySettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXDependencySettingsExtensions
{
@@ -1138,7 +1138,7 @@ public static partial class DocFXDependencySettingsExtensions
}
#endregion
#region DocFXDownloadSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXDownloadSettingsExtensions
{
@@ -1178,7 +1178,7 @@ public static partial class DocFXDownloadSettingsExtensions
}
#endregion
#region DocFXHelpSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXHelpSettingsExtensions
{
@@ -1193,7 +1193,7 @@ public static partial class DocFXHelpSettingsExtensions
}
#endregion
#region DocFXInitSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXInitSettingsExtensions
{
@@ -1292,7 +1292,7 @@ public static partial class DocFXInitSettingsExtensions
}
#endregion
#region DocFXMergeSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXMergeSettingsExtensions
{
@@ -1443,7 +1443,7 @@ public static partial class DocFXMergeSettingsExtensions
}
#endregion
#region DocFXMetadataSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXMetadataSettingsExtensions
{
@@ -1665,7 +1665,7 @@ public static partial class DocFXMetadataSettingsExtensions
}
#endregion
#region DocFXPdfSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXPdfSettingsExtensions
{
@@ -2423,7 +2423,7 @@ public static partial class DocFXPdfSettingsExtensions
}
#endregion
#region DocFXServeSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXServeSettingsExtensions
{
@@ -2471,7 +2471,7 @@ public static partial class DocFXServeSettingsExtensions
}
#endregion
#region DocFXTemplateSettingsExtensions
-///
+///
[ExcludeFromCodeCoverage]
public static partial class DocFXTemplateSettingsExtensions
{
diff --git a/src/Fallout.Common/Tools/DocFX/DocFXTasks.cs b/src/Fallout.Common/Tools/DocFX/DocFXTasks.cs
index f47be9417..3869cafdc 100644
--- a/src/Fallout.Common/Tools/DocFX/DocFXTasks.cs
+++ b/src/Fallout.Common/Tools/DocFX/DocFXTasks.cs
@@ -1,7 +1,7 @@
-using Fallout.Common.Tooling;
using Serilog.Events;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.DocFX;
+namespace Fallout.Application.Tools.DocFX;
[LogLevelPattern(LogEventLevel.Warning, $@"{TimestampPattern}Info\:\[ExtractMetadata\]No\ files\ are\ found")]
[LogLevelPattern(LogEventLevel.Warning, $@"{TimestampPattern}Warning\:")]
diff --git a/src/Fallout.Common/Tools/Docker/Docker.Generated.cs b/src/Fallout.Common/Tools/Docker/Docker.Generated.cs
index 964545ea8..85ae6e4dd 100644
--- a/src/Fallout.Common/Tools/Docker/Docker.Generated.cs
+++ b/src/Fallout.Common/Tools/Docker/Docker.Generated.cs
@@ -1,4 +1,3 @@
-using Fallout.Common.Tooling;
using Fallout.Common.Utilities.Collections;
using System;
using System.Collections.Generic;
@@ -10,8 +9,9 @@
using System.Text;
using System.Text.Json.Serialization;
using Fallout.Application;
+using Fallout.Application.Tooling;
-namespace Fallout.Common.Tools.Docker;
+namespace Fallout.Application.Tools.Docker;
/// Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.
For more details, visit the official website.
[ExcludeFromCodeCoverage]
@@ -25,1315 +25,1315 @@ public partial class DockerTasks : ToolTasks, IRequirePathTool
/// Remove one or more configs.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <configs> via
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerConfigRm(DockerConfigRmSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerConfigRm(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerConfigRmSettings()));
- ///
+ ///
public static IEnumerable<(DockerConfigRmSettings Settings, IReadOnlyCollection Output)> DockerConfigRm(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerConfigRm, degreeOfParallelism, completeOnFailure);
/// Load an image from a tar archive or STDIN.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --input via
- --log-level via
- --quiet via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerLoad(DockerLoadSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerLoad(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerLoadSettings()));
- ///
+ ///
public static IEnumerable<(DockerLoadSettings Settings, IReadOnlyCollection Output)> DockerLoad(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerLoad, degreeOfParallelism, completeOnFailure);
/// Remove all stopped containers.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --filter via
- --force via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerContainerPrune(DockerContainerPruneSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerContainerPrune(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerContainerPruneSettings()));
- ///
+ ///
public static IEnumerable<(DockerContainerPruneSettings Settings, IReadOnlyCollection Output)> DockerContainerPrune(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerContainerPrune, degreeOfParallelism, completeOnFailure);
/// Manage trust on Docker images.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerTrust(DockerTrustSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerTrust(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerTrustSettings()));
- ///
+ ///
public static IEnumerable<(DockerTrustSettings Settings, IReadOnlyCollection Output)> DockerTrust(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerTrust, degreeOfParallelism, completeOnFailure);
/// Manage Docker stacks.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --kubeconfig via
- --log-level via
- --orchestrator via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerStack(DockerStackSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerStack(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerStackSettings()));
- ///
+ ///
public static IEnumerable<(DockerStackSettings Settings, IReadOnlyCollection Output)> DockerStack(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerStack, degreeOfParallelism, completeOnFailure);
/// Pull an image or a repository from a registry.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <name> via
- --all-tags via
- --config via
- --debug via
- --disable-content-trust via
- --log-level via
- --platform via
- --quiet via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerPull(DockerPullSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerPull(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerPullSettings()));
- ///
+ ///
public static IEnumerable<(DockerPullSettings Settings, IReadOnlyCollection Output)> DockerPull(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerPull, degreeOfParallelism, completeOnFailure);
/// Sign an image.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerTrustSign(DockerTrustSignSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerTrustSign(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerTrustSignSettings()));
- ///
+ ///
public static IEnumerable<(DockerTrustSignSettings Settings, IReadOnlyCollection Output)> DockerTrustSign(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerTrustSign, degreeOfParallelism, completeOnFailure);
/// Manage checkpoints.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerCheckpoint(DockerCheckpointSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerCheckpoint(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerCheckpointSettings()));
- ///
+ ///
public static IEnumerable<(DockerCheckpointSettings Settings, IReadOnlyCollection Output)> DockerCheckpoint(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerCheckpoint, degreeOfParallelism, completeOnFailure);
/// Manage entities who can sign Docker images.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerTrustSigner(DockerTrustSignerSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerTrustSigner(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerTrustSignerSettings()));
- ///
+ ///
public static IEnumerable<(DockerTrustSignerSettings Settings, IReadOnlyCollection Output)> DockerTrustSigner(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerTrustSigner, degreeOfParallelism, completeOnFailure);
/// Display detailed information on one or more configs.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <configs> via
- --config via
- --debug via
- --format via
- --log-level via
- --pretty via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerConfigInspect(DockerConfigInspectSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerConfigInspect(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerConfigInspectSettings()));
- ///
+ ///
public static IEnumerable<(DockerConfigInspectSettings Settings, IReadOnlyCollection Output)> DockerConfigInspect(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerConfigInspect, degreeOfParallelism, completeOnFailure);
/// Manage services.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerService(DockerServiceSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerService(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerServiceSettings()));
- ///
+ ///
public static IEnumerable<(DockerServiceSettings Settings, IReadOnlyCollection Output)> DockerService(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerService, degreeOfParallelism, completeOnFailure);
/// Generate and load a signing key-pair.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <name> via
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerTrustKeyGenerate(DockerTrustKeyGenerateSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerTrustKeyGenerate(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerTrustKeyGenerateSettings()));
- ///
+ ///
public static IEnumerable<(DockerTrustKeyGenerateSettings Settings, IReadOnlyCollection Output)> DockerTrustKeyGenerate(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerTrustKeyGenerate, degreeOfParallelism, completeOnFailure);
/// Manage Docker.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerSystem(DockerSystemSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerSystem(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerSystemSettings()));
- ///
+ ///
public static IEnumerable<(DockerSystemSettings Settings, IReadOnlyCollection Output)> DockerSystem(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerSystem, degreeOfParallelism, completeOnFailure);
/// List configs.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --filter via
- --format via
- --log-level via
- --quiet via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerConfigLs(DockerConfigLsSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerConfigLs(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerConfigLsSettings()));
- ///
+ ///
public static IEnumerable<(DockerConfigLsSettings Settings, IReadOnlyCollection Output)> DockerConfigLs(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerConfigLs, degreeOfParallelism, completeOnFailure);
/// Update a context.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <context> via
- --config via
- --debug via
- --default-stack-orchestrator via
- --description via
- --docker via
- --kubernetes via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerContextUpdate(DockerContextUpdateSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerContextUpdate(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerContextUpdateSettings()));
- ///
+ ///
public static IEnumerable<(DockerContextUpdateSettings Settings, IReadOnlyCollection Output)> DockerContextUpdate(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerContextUpdate, degreeOfParallelism, completeOnFailure);
/// List the services in the stack.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <stack> via
- --config via
- --debug via
- --filter via
- --format via
- --kubeconfig via
- --log-level via
- --namespace via
- --orchestrator via
- --quiet via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerStackServices(DockerStackServicesSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerStackServices(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerStackServicesSettings()));
- ///
+ ///
public static IEnumerable<(DockerStackServicesSettings Settings, IReadOnlyCollection Output)> DockerStackServices(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerStackServices, degreeOfParallelism, completeOnFailure);
/// List port mappings or a specific mapping for the container.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <container> via
- <privatePort> via
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerContainerPort(DockerContainerPortSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerContainerPort(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerContainerPortSettings()));
- ///
+ ///
public static IEnumerable<(DockerContainerPortSettings Settings, IReadOnlyCollection Output)> DockerContainerPort(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerContainerPort, degreeOfParallelism, completeOnFailure);
/// Rename a container.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <container> via
- <newName> via
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerRename(DockerRenameSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerRename(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerRenameSettings()));
- ///
+ ///
public static IEnumerable<(DockerRenameSettings Settings, IReadOnlyCollection Output)> DockerRename(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerRename, degreeOfParallelism, completeOnFailure);
/// Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <sourceImage> via
- <targetImage> via
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerTag(DockerTagSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerTag(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerTagSettings()));
- ///
+ ///
public static IEnumerable<(DockerTagSettings Settings, IReadOnlyCollection Output)> DockerTag(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerTag, degreeOfParallelism, completeOnFailure);
/// Display detailed information on one or more secrets.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <secrets> via
- --config via
- --debug via
- --format via
- --log-level via
- --pretty via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerSecretInspect(DockerSecretInspectSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerSecretInspect(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerSecretInspectSettings()));
- ///
+ ///
public static IEnumerable<(DockerSecretInspectSettings Settings, IReadOnlyCollection Output)> DockerSecretInspect(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerSecretInspect, degreeOfParallelism, completeOnFailure);
/// Manage Docker secrets.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- --config via
- --debug via
- --log-level via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerSecret(DockerSecretSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerSecret(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerSecretSettings()));
- ///
+ ///
public static IEnumerable<(DockerSecretSettings Settings, IReadOnlyCollection Output)> DockerSecret(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerSecret, degreeOfParallelism, completeOnFailure);
/// Export a container's filesystem as a tar archive.
For more details, visit the official website.
/// This is a CLI wrapper with fluent API that allows to modify the following arguments:
- <container> via
- --config via
- --debug via
- --log-level via
- --output via
- --tls via
- --tlscacert via
- --tlscert via
- --tlskey via
- --tlsverify via
public static IReadOnlyCollection DockerContainerExport(DockerContainerExportSettings options = null) => new DockerTasks().Run(options);
- ///
+ ///
public static IReadOnlyCollection DockerContainerExport(Configure configurator) => new DockerTasks().Run(configurator.Invoke(new DockerContainerExportSettings()));
- ///
+ ///
public static IEnumerable<(DockerContainerExportSettings Settings, IReadOnlyCollection Output)> DockerContainerExport(CombinatorialConfigure configurator, int degreeOfParallelism = 1, bool completeOnFailure = false) => configurator.Invoke(DockerContainerExport, degreeOfParallelism, completeOnFailure);
///