Skip to content

[Foundation] FT-7: Formalize the build extension pipeline (deterministic ordering + typed phases) #312

Description

@ChrisonSimtian

Summary

Formalize the build extension/middleware pipeline: deterministic ordering and a typed phase model instead of comment-encoded magic priority numbers. Directly supports the plugin architecture foundation in this milestone.

Findings (file:line)

  • FalloutBuild.Events.cs:21-25 — extensions discovered via GetCustomAttributes<BuildExtensionAttributeBase>() and ordered OrderByDescending(x => x.Priority). Equal priorities fall back to CLR reflection order → non-deterministic across runtimes.
  • FalloutBuild.cs:44-62 — ~15 built-in extensions share magic priorities (150/100/75/50/10/5/-100); the "before logo / after logo / after finish" phases exist only as comments.
  • Execution/Extensibility/BuildExtensionAttributeBase.csIBuildExtension + IOn* lifecycle interfaces are public; concrete extensions are mostly internal (keep that).

Scope

  • Add a deterministic secondary ordering key for equal priorities.
  • Introduce a typed phase model (enum or ordered phase tokens) replacing comment-encoded ranges.
  • Document the IOn* lifecycle contract.
  • Confirm middleware internals stay internal (milestone policy: no public plugin SDK yet).

Acceptance criteria

  • Equal-priority ordering is deterministic and covered by a test.
  • Phases are typed, not magic numbers.
  • No public plugin surface added.

Notes

  • Non-breaking.
  • Depends on: FT-2 (can proceed largely in parallel with FT-3/4/5).
  • Size: M.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions