Skip to content

Split the tool-execution contract into Fallout.Application.Tooling.Execution + .Requirements#10

Open
ChrisonSimtian wants to merge 2 commits into
core/extract-domain-enumsfrom
tooling/extract-abstractions
Open

Split the tool-execution contract into Fallout.Application.Tooling.Execution + .Requirements#10
ChrisonSimtian wants to merge 2 commits into
core/extract-domain-enumsfrom
tooling/extract-abstractions

Conversation

@ChrisonSimtian

@ChrisonSimtian ChrisonSimtian commented Jun 29, 2026

Copy link
Copy Markdown
Owner

Second onion-architecture sweep. Pulls the pure tool-execution contract out of Fallout.Tooling into two cohesive Application-layer foundation leaves, and extends the architecture suite to govern them.

Stacked on #9 — review/merge #9 first. The diff shown here is #10's delta on top of #9.
First bottom-up step of the onion migration on main — tools are an Application concern, so the contract lands under Fallout.Application.*. (Fallout.Common/Build/Cli stay flat until later passes — the repo is deliberately half-onion in the interim.)

The two leaves (both netstandard2.0;net10.0, reference nothing else in-repo)

Fallout.Application.Tooling.Execution — the process-execution contract:

Type Kind
IProcess interface (abstraction over a running process)
Output struct (one captured output line)
OutputType enum (Std / Err)

Fallout.Application.Tooling.Requirements — the tool-requirement markers:

Type Kind
IRequireTool, IRequireToolWithVersion, IRequirePathTool, IRequireNuGetPackage, IRequireNpmPackage, IRequireAptGetPackage marker interfaces

The ToolRequirement / *Requirement classes stay in Fallout.Tooling (two do I/O for version resolution).

Why this shape

  • Onion / Application layer — a build system's core job is orchestrating external tools, so the tool contract is an Application concern (Fallout.Application.*), not Domain. The raw process runner (Process2) + resolvers are the Infrastructure detail, to be re-homed later.
  • Two leaves, not oneIProcess/Output (how a tool runs) and IRequire* (what a tool needs) are independent concerns; splitting sets up the longer-term per-family tool direction. Easy to merge back if excessive.
  • Why not Fallout.Core — consumed by the netstandard2.0 Roslyn generator + net472 MSBuild tasks, so they must be ns2.0; Core stays ns2.1.
  • No consumer changes — types keep their Fallout.Common.Tooling namespace; Fallout.Tooling references both leaves and re-flows them transitively.

Architecture governance

Both leaves are referenced by the arch-test project, registered as governed runtime libraries, and asserted (via a [Theory]) to be foundations that depend on nothing else in-repo. Their contract types stay in the pre-existing namespace-drift baseline by full name — ratchet stays green.

Verification

  • Full fallout.slnx build: 0 errors.
  • Architecture suite: 17/17 green (15 + 2 foundation checks).

Follow-up (separate PR, stacked on this)

Split the 65 tool wrappers out of Fallout.Common into Fallout.Application.Tools.<Family> (~14 family projects), after breaking the Common ↔ Tools cycle.

🤖 Generated with Claude Code

@ChrisonSimtian ChrisonSimtian added the target/2026 Releases on the 2026 calendar line label Jun 29, 2026
@ChrisonSimtian ChrisonSimtian force-pushed the tooling/extract-abstractions branch from b226ce1 to 3bda72a Compare June 29, 2026 02:11
@ChrisonSimtian ChrisonSimtian changed the base branch from main to core/extract-domain-enums June 29, 2026 02:12
@ChrisonSimtian ChrisonSimtian force-pushed the tooling/extract-abstractions branch from 3bda72a to 7b7e233 Compare June 29, 2026 02:33
@ChrisonSimtian ChrisonSimtian changed the title Extract the tool-execution contract into Fallout.Tooling.Abstractions Split the tool-execution contract into Fallout.Tooling.Execution + Fallout.Tooling.Requirements Jun 29, 2026
@ChrisonSimtian ChrisonSimtian force-pushed the tooling/extract-abstractions branch from 7b7e233 to 2596d68 Compare June 29, 2026 02:54
@ChrisonSimtian ChrisonSimtian changed the title Split the tool-execution contract into Fallout.Tooling.Execution + Fallout.Tooling.Requirements Split the tool-execution contract into Fallout.Application.Tooling.Execution + .Requirements Jun 29, 2026
@ChrisonSimtian ChrisonSimtian force-pushed the core/extract-domain-enums branch from b2d7cc4 to 8ed4dd3 Compare June 29, 2026 11:29
@ChrisonSimtian ChrisonSimtian force-pushed the tooling/extract-abstractions branch from 2596d68 to 76b3c99 Compare June 29, 2026 11:29
ChrisonSimtian and others added 2 commits June 30, 2026 12:13
Pulls the pure tool-execution contract out of Fallout.Tooling into two
cohesive, single-purpose Application-layer foundation leaves (onion: tools
are an Application concern), each ns2.0;net10 and referencing nothing else
in the repo:

- Fallout.Application.Tooling.Execution — the process-execution contract:
  IProcess, Output, OutputType.
- Fallout.Application.Tooling.Requirements — the tool-requirement markers:
  IRequireTool, IRequireToolWithVersion, IRequirePathTool,
  IRequireNuGetPackage, IRequireNpmPackage, IRequireAptGetPackage (extracted
  from ToolRequirement.cs; the *Requirement classes stay in Fallout.Tooling).

First bottom-up step of the onion migration on main. All types keep their
Fallout.Common.Tooling namespace, so no consumer code changes — Fallout.Tooling
references both leaves and re-flows them transitively. They must be
netstandard2.0 because the Roslyn source generator and net472 MSBuild tasks
consume them; Fallout.Core stays netstandard2.1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
References both leaves from the architecture test project, registers them as
governed runtime libraries, and asserts (via a Theory) that each is a
foundation depending on nothing else in the repo. Their contract types keep
the Fallout.Common.Tooling namespace, so they stay in the pre-existing
namespace-drift baseline by full name — the ratchet stays green.

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 ChrisonSimtian force-pushed the tooling/extract-abstractions branch from 76b3c99 to 8ae03da 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