From 597d40a301e80a558f95a3eeb733c91d13cb4017 Mon Sep 17 00:00:00 2001 From: Chrison Simtian Date: Mon, 29 Jun 2026 19:28:17 +1200 Subject: [PATCH] Lift the four stable extension interfaces into Fallout.Core MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First step of the de-statification / plugin-SDK groundwork: move the small, already-pure extension abstractions down into Fallout.Core (public), so the stable contracts live at the center next to ITargetModel. Moved (namespaces unchanged -> zero consumer/implementer edits): - IBuildExtension, IOnBuildFinished (extracted from BuildExtensionAttributeBase.cs) - IHostTheme (Fallout.Common.Execution.Theming) - IBuildServer (Fallout.Common.CI) All four are pure abstractions (string/float/void members only), so they clear Core's purity bar. Implementers stay in Build/Common and see the interfaces via the existing Build/Common -> Core reference; IHostTheme's internal members remain accessible because the shared AssemblyInfo grants Core's InternalsVisibleTo to Build and Common. The interfaces keep their legacy Fallout.Common.* namespaces, so they remain in the architecture naming-drift baseline by full name — the ratchet stays green with no baseline change. Deliberately NOT included (separate follow-ups): the IOn* lifecycle interfaces (need ExecutableTarget -> ITargetModel re-typing across ~21 implementers) and IOnTargetSummaryUpdated (blocked by IFalloutBuild). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../BuildExtensionAttributeBase.cs | 10 ---------- .../CICD => Fallout.Core/CI}/IBuildServer.cs | 0 src/Fallout.Core/Execution/IBuildExtension.cs | 18 ++++++++++++++++++ .../Execution}/Theming/IHostTheme.cs | 0 4 files changed, 18 insertions(+), 10 deletions(-) rename src/{Fallout.Build/CICD => Fallout.Core/CI}/IBuildServer.cs (100%) create mode 100644 src/Fallout.Core/Execution/IBuildExtension.cs rename src/{Fallout.Build => Fallout.Core/Execution}/Theming/IHostTheme.cs (100%) diff --git a/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs b/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs index ad53bb3e4..5d2a46d59 100644 --- a/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs +++ b/src/Fallout.Build/Execution/Extensibility/BuildExtensionAttributeBase.cs @@ -4,11 +4,6 @@ namespace Fallout.Common.Execution; -public interface IBuildExtension -{ - float Priority { get; } -} - [AttributeUsage(AttributeTargets.Class)] public abstract class BuildExtensionAttributeBase : Attribute, IBuildExtension { @@ -52,8 +47,3 @@ public interface IOnTargetFailed : IBuildExtension { void OnTargetFailed(ExecutableTarget target); } - -public interface IOnBuildFinished : IBuildExtension -{ - void OnBuildFinished(); -} diff --git a/src/Fallout.Build/CICD/IBuildServer.cs b/src/Fallout.Core/CI/IBuildServer.cs similarity index 100% rename from src/Fallout.Build/CICD/IBuildServer.cs rename to src/Fallout.Core/CI/IBuildServer.cs diff --git a/src/Fallout.Core/Execution/IBuildExtension.cs b/src/Fallout.Core/Execution/IBuildExtension.cs new file mode 100644 index 000000000..d4d821aa6 --- /dev/null +++ b/src/Fallout.Core/Execution/IBuildExtension.cs @@ -0,0 +1,18 @@ +namespace Fallout.Common.Execution; + +/// +/// Root marker for a build extension — the stable seam the plugin SDK builds lifecycle +/// listeners on. Higher runs earlier. +/// +public interface IBuildExtension +{ + float Priority { get; } +} + +/// +/// Build extension invoked once the build has finished (whatever the outcome). +/// +public interface IOnBuildFinished : IBuildExtension +{ + void OnBuildFinished(); +} diff --git a/src/Fallout.Build/Theming/IHostTheme.cs b/src/Fallout.Core/Execution/Theming/IHostTheme.cs similarity index 100% rename from src/Fallout.Build/Theming/IHostTheme.cs rename to src/Fallout.Core/Execution/Theming/IHostTheme.cs