Skip to content

refactor(arch)!: extract Fallout.Domain ring — onion realignment step 1 (ADR-0006)#343

Closed
ChrisonSimtian wants to merge 6 commits into
experimentalfrom
spike/onion-structure
Closed

refactor(arch)!: extract Fallout.Domain ring — onion realignment step 1 (ADR-0006)#343
ChrisonSimtian wants to merge 6 commits into
experimentalfrom
spike/onion-structure

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

⚠️ Breaking change. ITargetModel and ExecutionStatus move namespace from Fallout.Common.ExecutionFallout.Domain.Execution, and the Fallout.Core project/assembly is renamed to Fallout.Domain — native Fallout.* consumers must update those usings / references. Rides the (still-unreleased) 2026 major cut.

First ring of the onion-layering realignment (ADR-0006): realign the NUKE-inherited "namespace ≠ project, Fallout.Common.* everywhere" structure to explicit onion layers (Fallout.Domain / Fallout.Application / Fallout.Infrastructure, Fallout.Cli root), namespace = project = layer. Proven on the innermost ring first; see spike 0002.

What

  • Fallout.CoreFallout.Domain (project + test project); refs + fallout.slnx updated.
  • Fallout.Core.PlanningFallout.Domain.Planning; ITargetModel/ExecutionStatus out of Fallout.Common.ExecutionFallout.Domain.Execution.
  • 8 consumers gain using Fallout.Domain.Execution;; the intra-repo ExecutionStatus type-forwarder is re-pointed.
  • Fitness test strengthened: the innermost ring must depend on no outer ring including Fallout.Common (the realignment goal). Proven non-vacuous.

Validation

  • Full solution builds; entire test suite green (~480 tests across every project, including the Nuke.* shim tests).
  • Solution-generator Verify snapshot updated for the project rename.

Notes

  • Shim parity is deliberately deferred (ADR-0006): the Nuke.* shims silently stop re-exporting the two moved types (no build break); a fresh migration/shim strategy is designed once the realignment completes.
  • Targets 2026 because the 2026 major hasn't cut (no calendar GA tag; CHANGELOG [Unreleased] — 2026.0 still accumulating breaking changes). Later rings that miss the 2026 cut roll to 2027.
  • CHANGELOG entry added under [Unreleased] — 2026.0.

🤖 Generated with Claude Code

ChrisonSimtian and others added 6 commits June 3, 2026 14:51
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 <noreply@anthropic.com>
…strategy

- 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 <noreply@anthropic.com>
…is the port

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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…CHANGELOG

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 <noreply@anthropic.com>
@ChrisonSimtian

Copy link
Copy Markdown
Collaborator Author

Collapsed into #359. The onion realignment now reviews as one PR (commit history kept). Nothing lost — #359 contains all of this work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking-change Change is breaking — requires major version bump per CLAUDE.md semver policy. target/2026 Targets the 2026 calendar-version line (current). See ADR-0004.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant