Skip to content

Move pure build-execution domain enums into Fallout.Core#9

Open
ChrisonSimtian wants to merge 2 commits into
mainfrom
core/extract-domain-enums
Open

Move pure build-execution domain enums into Fallout.Core#9
ChrisonSimtian wants to merge 2 commits into
mainfrom
core/extract-domain-enums

Conversation

@ChrisonSimtian

@ChrisonSimtian ChrisonSimtian commented Jun 29, 2026

Copy link
Copy Markdown
Owner

First of the onion-architecture tidy-up sweeps, now also carrying the architecture-fitness suite that enforces the layering going forward (folded in from the closed #7).

Part 1 — pure domain enums into Fallout.Core

Fallout.Core is the innermost ring (references nothing, forbids I/O). This pulls the simplest pure domain enums down next to ExecutionStatus / ITargetModel.

Type From
Verbosity (enum) Fallout.Build/Verbosity.cs (whole-file move)
DependencyBehavior (enum) Fallout.Build/ITargetDefinition.cs (extracted)
DefaultOutput (enum) Fallout.Build/Attributes/DisableDefaultOutputAttribute.cs (extracted; attribute stays in Build)

All keep their Fallout.Common namespace → no consumer code changes. Core stays netstandard2.1;net10.0.

Part 2 — ArchUnitNET architecture-fitness suite (was #7)

tests/Fallout.Architecture.Tests: a solution-wide, assembly-scoped ArchUnitNET suite that locks in the runtime layering so future work can't silently invert a dependency edge that still compiles.

  • Rules: Core/Utilities foundation purity, utility-satellite confinement, downward-only layering (Tooling/ProjectModel/Build.Shared), Solution facade, "nothing depends on the Cli composition root", "Fallout.* never depends on the Nuke.* shims", Core I/O-purity, and namespace-rooted-at-assembly naming.
  • One-way ratchet (Ratchet + KnownViolations): known debt is grandfathered against a documented baseline; a new violation fails, and a fixed baseline entry must be removed — so debt can only shrink. This is the "be a bit less strict today, enforce going forward" mechanism.
  • Migrated the [Foundation] Extract Fallout.Core domain project Fallout-build/Fallout#88 Core purity guard off the unmaintained NetArchTest.Rules onto ArchUnitNET and removed that package + the old Fallout.Core.Tests guard.

Naming follows the current *.Tests convention; Dennis's Fallout-build#439 (*.Tests*.Specs) will sweep this project up with the rest.

Verification

  • Full fallout.slnx build: 0 errors.
  • Architecture suite: 15/15 green (baseline matches — the enum moves kept identical type full names).

🤖 Generated with Claude Code

First onion-architecture tidy-up sweep: relocate the simple, pure domain
enums down into the innermost Fallout.Core project, next to the existing
ExecutionStatus / ITargetModel domain types.

- Verbosity: whole-file move from Fallout.Build
- DependencyBehavior: extracted from Fallout.Build/ITargetDefinition.cs
- DefaultOutput: extracted from Fallout.Build/Attributes/DisableDefaultOutputAttribute.cs
  (the DisableDefaultOutputAttribute itself stays in Fallout.Build)

All three keep their existing `Fallout.Common` namespace, so no consumer
code changes are required — Fallout.Build already references Fallout.Core.
Also drops now-unused using directives from the touched files.

Scope is deliberately limited to types that move with zero refactoring;
the tool-execution contract (Output/OutputType/IProcess/IRequire*) is a
follow-up PR stacked on this one.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisonSimtian ChrisonSimtian force-pushed the core/extract-domain-enums branch from b2d7cc4 to 8ed4dd3 Compare June 29, 2026 11:29
…line

Brings the solution-wide architecture-fitness suite into the Core sweep so
the layering this PR tidies up is now enforced by tests and can't silently
drift back. Originally drafted as a standalone PR (#7), folded in here.

- tests/Fallout.Architecture.Tests: assembly-scoped ArchUnitNET rules —
  Core/Utilities foundation purity, utility-satellite confinement,
  downward-only layering, "nothing depends on the Cli composition root",
  "Fallout.* never depends on the Nuke.* shims", Core I/O-purity, and a
  namespace-rooted-at-assembly naming rule.
- Ratchet + KnownViolations: a one-way ratchet over a documented baseline.
  Known-broken areas are grandfathered; new violations fail, and fixed
  baseline entries must be removed — so the debt can only shrink. Lets us
  be deliberately less strict today while locking in every future gain.
- Migrated the issue-Fallout-build#88 Core purity guard off the unmaintained
  NetArchTest.Rules onto ArchUnitNET; removed that package and the old
  Fallout.Core.Tests guard.
- docs/architecture-tests.md, CHANGELOG, dependencies docs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisonSimtian ChrisonSimtian force-pushed the core/extract-domain-enums branch from 8ed4dd3 to 1d25508 Compare June 30, 2026 00:15
ChrisonSimtian added a commit that referenced this pull request Jun 30, 2026
…roject list

Pre-existing staleness, not from the namespace alignment: the snapshot predated the
architecture suite (#9), the Application.Tooling leaves (#10), and the Application.Tools
families (#11), so it was missing those projects and failing on the whole stack. The
generator emits accessors from project/assembly names (unchanged by the namespace work),
so this is a pure catch-up. Also drops the stray committed .received.cs (Verify artifact
that should not be tracked).

Fallout.SourceGenerators.Specs now 6/6.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

target/2026 Releases on the 2026 calendar line

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant