Skip to content

Lift the target lifecycle interfaces into Fallout.Core (re-typed to ITargetModel)#13

Open
ChrisonSimtian wants to merge 1 commit into
core/lift-stable-interfacesfrom
core/lift-lifecycle-interfaces
Open

Lift the target lifecycle interfaces into Fallout.Core (re-typed to ITargetModel)#13
ChrisonSimtian wants to merge 1 commit into
core/lift-stable-interfacesfrom
core/lift-lifecycle-interfaces

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Owner

Phase 1b of the de-statification / plugin-SDK groundwork. Moves the six target/build lifecycle listener interfaces into Fallout.Core, re-typed from the live ExecutableTarget to the read-only Core projection ITargetModel — the ITargetLifecycleListener seam (SDK-6e). Plugins observe targets through the stable read-only view, not the mutable engine type.

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

Moved to Core (grouped with IBuildExtension/IOnBuildFinished)

IOnBuildCreated, IOnBuildInitialized, IOnTargetSkipped, IOnTargetRunning, IOnTargetSucceeded, IOnTargetFailed — params ExecutableTargetITargetModel.

Why it's safe

ExecutableTarget already implements ITargetModel, so callers are unchanged: single targets upcast; IReadOnlyCollection<T> is covariant so collections flow too. Build was green on the first pass after the re-type.

All ~21 implementers had signatures re-typed — 19 needed only the type change (they use ITargetModel members or ignore the param). 3 take a (ExecutableTarget) cast where they legitimately reach past the read-only surface:

Implementer Reaches
GenerateBuildServerConfigurationsAttribute IConfigurationGenerator.Generate (still ExecutableTarget)
TelemetryAttribute Telemetry.TargetSucceeded
InjectNonParameterValuesAttribute ExecutableTarget.DelegateRequirements

Namespaces preserved (Fallout.Common.Execution) → no consumer edits; already in the naming-drift baseline → no baseline change.

Deliberately left for Phase 2

IOnTargetSummaryUpdated stays in Build — it takes IFalloutBuild, which needs Core-safe abstractions (AbsolutePath/Host/Partition) first.

Verification

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

🤖 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 core/lift-stable-interfaces branch from f0c5d85 to 9abc17f Compare June 29, 2026 11:30
@ChrisonSimtian ChrisonSimtian force-pushed the core/lift-lifecycle-interfaces branch from 695dd96 to e4df566 Compare June 29, 2026 11:30
…TargetModel)

Phase 1b of the de-statification groundwork: move the six target/build lifecycle
listener interfaces down into Fallout.Core, re-typed from the live ExecutableTarget
to the read-only Core projection ITargetModel. This is the ITargetLifecycleListener
seam (SDK-6e) — plugins observe targets through the stable read-only view, not the
mutable engine type.

Moved to Core (grouped with IBuildExtension/IOnBuildFinished):
- IOnBuildCreated, IOnBuildInitialized, IOnTargetSkipped, IOnTargetRunning,
  IOnTargetSucceeded, IOnTargetFailed — params ExecutableTarget -> ITargetModel.

ExecutableTarget already implements ITargetModel, so callers (EventInvoker, the
executor) pass targets unchanged: single targets upcast, and IReadOnlyCollection<T>
is covariant so collections flow too. All ~21 implementers had their signatures
re-typed; 19 needed only the type change, and 3 take a (ExecutableTarget) cast where
they reach past the read-only surface:
- GenerateBuildServerConfigurationsAttribute -> IConfigurationGenerator.Generate
- TelemetryAttribute -> Telemetry.TargetSucceeded
- InjectNonParameterValuesAttribute -> ExecutableTarget.DelegateRequirements

Interfaces keep their Fallout.Common.Execution namespace -> no consumer edits, and
they stay in the architecture naming-drift baseline by full name (no baseline change).
IOnTargetSummaryUpdated stays in Build for now — it takes IFalloutBuild, which is a
Phase 2 blocker.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisonSimtian ChrisonSimtian force-pushed the core/lift-stable-interfaces branch from 9abc17f to 597d40a Compare June 30, 2026 00:16
@ChrisonSimtian ChrisonSimtian force-pushed the core/lift-lifecycle-interfaces branch from e4df566 to 3e0c70e 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