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.cs — IBuildExtension + 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions