Gates step failed on run#211 because research.rs grew to 1313 lines
(over the 1250 budget) after adding the pipeline_state handler in the
previous commit. Move the diagnostic into its own module — pure
extraction, no behavior change.
research.rs: 1313 → 1126 lines
research_pipeline.rs: new, 187 lines
lib.rs: route now points at routes::research_pipeline::pipeline_state