Lift the four stable extension interfaces into Fallout.Core#12
Open
ChrisonSimtian wants to merge 1 commit into
Open
Lift the four stable extension interfaces into Fallout.Core#12ChrisonSimtian wants to merge 1 commit into
ChrisonSimtian wants to merge 1 commit into
Conversation
This was referenced Jun 29, 2026
d1902bf to
fef2e4a
Compare
f0c5d85 to
9abc17f
Compare
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) <noreply@anthropic.com>
fef2e4a to
355b162
Compare
9abc17f to
597d40a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First, deliberately-small step of the de-statification / plugin-SDK groundwork (roadmap Workstream B): move the already-pure extension abstractions down into
Fallout.Core(public), next toITargetModel.Moved to Core (namespaces unchanged → zero consumer/implementer edits)
IBuildExtensionBuildExtensionAttributeBase.csfloat PriorityIOnBuildFinishedvoid OnBuildFinished()IHostThemeTheming/IHostTheme.csvoid Write*/string Format*(strings only)IBuildServerCICD/IBuildServer.csstring Branch/CommitAll four are pure (string/float/void) so they clear Core's purity bar. Implementers stay in Build/Common and resolve them via the existing
→ Corereference;IHostTheme's internal members stay accessible because the sharedAssemblyInfogrants Core'sInternalsVisibleToto Build + Common. LegacyFallout.Common.*namespaces preserved → already in the naming-drift baseline, no baseline change.Why so small
This is the genuinely cheap, zero-risk slice of the interface-lift. Two heavier follow-ups were deliberately left out:
IOn*lifecycle interfaces — moving them to Core forcesExecutableTarget→ITargetModelre-typing across ~21 implementers (this is the realITargetLifecycleListener/ SDK-6e groundwork; deserves its own focused PR).IOnTargetSummaryUpdated— blocked byIFalloutBuild(a Phase-2 item: needs Core-safe abstractions forAbsolutePath/Host/Partitionfirst).See the scoping discussion: Phase 1 (this) → Phase 1b (lifecycle re-type) → Phase 2 (
IFalloutBuildblockers) → Phase 3 (DI + de-staticParameterService/ExecutionPlanner) → Phase 4 (splitFalloutBuild, de-staticHost/Logging) → Phase 5 (EnvironmentInfo, ~544 sites).Verification
fallout.slnxbuild: 0 errors.🤖 Generated with Claude Code