Merge origin/main into refactor-iterative-loop-blocks
Conflict resolutions:
- flux2/denoise.py: keep this branch's Flux2LoopAfterDenoiser — main's #14278
removed its unused inputs/intermediate_inputs, but the class is rewritten here
as a ModularLoopPipelineBlocks that declares real inputs (latents, noise_pred)
- test_modular_pipelines_common.py: deleted on main by #14444 (tests split up);
test_stream_matches_call moved to its new home on ModularPipelineTesterMixin
in tests/modular_pipelines/testing_utils/common.py
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>