Skip to content

Lift the four stable extension interfaces into Fallout.Core#12

Open
ChrisonSimtian wants to merge 1 commit into
tools/split-application-toolsfrom
core/lift-stable-interfaces
Open

Lift the four stable extension interfaces into Fallout.Core#12
ChrisonSimtian wants to merge 1 commit into
tools/split-application-toolsfrom
core/lift-stable-interfaces

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Owner

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 to ITargetModel.

Stacked on #11. Review order: #9#10#11 → this.

Moved to Core (namespaces unchanged → zero consumer/implementer edits)

Interface From Members
IBuildExtension extracted from BuildExtensionAttributeBase.cs float Priority
IOnBuildFinished same void OnBuildFinished()
IHostTheme Theming/IHostTheme.cs void Write*/string Format* (strings only)
IBuildServer CICD/IBuildServer.cs string Branch/Commit

All four are pure (string/float/void) so they clear Core's purity bar. Implementers stay in Build/Common and resolve them via the existing → Core reference; IHostTheme's internal members stay accessible because the shared AssemblyInfo grants Core's InternalsVisibleTo to Build + Common. Legacy Fallout.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:

  • The IOn* lifecycle interfaces — moving them to Core forces ExecutableTargetITargetModel re-typing across ~21 implementers (this is the real ITargetLifecycleListener / SDK-6e groundwork; deserves its own focused PR).
  • IOnTargetSummaryUpdated — blocked by IFalloutBuild (a Phase-2 item: needs Core-safe abstractions for AbsolutePath/Host/Partition first).

See the scoping discussion: Phase 1 (this) → Phase 1b (lifecycle re-type) → Phase 2 (IFalloutBuild blockers) → Phase 3 (DI + de-static ParameterService/ExecutionPlanner) → Phase 4 (split FalloutBuild, de-static Host/Logging) → Phase 5 (EnvironmentInfo, ~544 sites).

Verification

  • Full fallout.slnx build: 0 errors.
  • Architecture suite: 31/31 green.

🤖 Generated with Claude Code

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>
@ChrisonSimtian ChrisonSimtian force-pushed the tools/split-application-tools branch from fef2e4a to 355b162 Compare June 30, 2026 00:15
@ChrisonSimtian ChrisonSimtian force-pushed the core/lift-stable-interfaces branch from 9abc17f to 597d40a Compare June 30, 2026 00:16
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