Part of the v11 internal-foundation workstream. See docs/roadmap.md and milestone #6.
Goal
Catch layer-purity violations at PR time, not in code review. Add a small set of architectural-fitness tests (using NetArchTest or similar) that assert the layering established by the other v11 foundation work stays intact.
Scope — fitness tests to add
Fallout.Core purity: zero ProjectReference to other Fallout projects; zero using System.IO; zero using System.Diagnostics.Process; zero static fields with non-readonly state.
- No statics in orchestration: types under
Fallout.Build.Execution.* (other than the static BuildManager facade) declare no mutable static fields.
- DI boundaries: types implementing infrastructure interfaces (
IFileSystem, IProcessRunner, etc.) live only in their designated infrastructure folder; no Fallout code calls new DefaultFileSystem() directly outside the DI registration.
- Internal-only middleware:
IBuildMiddleware and its sibling types are internal and have no [assembly: InternalsVisibleTo] declarations for non-test assemblies.
Place tests in a new project tests/Fallout.Architecture.Tests.
Verification
- All fitness tests pass on main after the other v11 foundation work lands.
- A deliberate violation (e.g., adding
using System.IO; to Fallout.Core) fails the new test.
- Tests run as part of
./build.ps1 Test.
Out of scope (tracked separately)
- Migrating other existing tests — this is a new tests project, not a rewrite.
- Public-API-stability tests for the v12 SDK — v12.
Part of the v11 internal-foundation workstream. See docs/roadmap.md and milestone #6.
Goal
Catch layer-purity violations at PR time, not in code review. Add a small set of architectural-fitness tests (using NetArchTest or similar) that assert the layering established by the other v11 foundation work stays intact.
Scope — fitness tests to add
Fallout.Corepurity: zeroProjectReferenceto other Fallout projects; zerousing System.IO; zerousing System.Diagnostics.Process; zero static fields with non-readonly state.Fallout.Build.Execution.*(other than the staticBuildManagerfacade) declare no mutable static fields.IFileSystem,IProcessRunner, etc.) live only in their designated infrastructure folder; no Fallout code callsnew DefaultFileSystem()directly outside the DI registration.IBuildMiddlewareand its sibling types areinternaland have no[assembly: InternalsVisibleTo]declarations for non-test assemblies.Place tests in a new project
tests/Fallout.Architecture.Tests.Verification
using System.IO;toFallout.Core) fails the new test../build.ps1 Test.Out of scope (tracked separately)