build.find_overrides is part of build, but it's only ever used by Interpreter.
Likewise, OverrideExecutable if anything is related to ExternalProgram; it has nothing to do with the build state and is never serialized. If an abstract class is created for ExternalProgram and OverrideExecutable, it can replace several instances of T.Union[OverrideExecutable, ExternalProgram, OverrideProgram].