Share project and namespace in atomic pipeline processing
What does this MR do and why?
Ci::PipelineProcessing::AtomicProcessingService#load_jobs preloaded each batch of jobs with the with_project_preload scope, issuing fresh project and namespace queries per batch even though the service already holds both records (pipeline.project and its namespace).
This MR preloads the association explicitly with ActiveRecord::Associations::Preloader and available_records, so every loaded job shares the in-memory project and namespace instances instead of reloading them. Measured on the jobRetry GraphQL mutation with CI variables, this removes 6 SQL queries (90 → 84 in the progression measured on the proof of concept, see References).
Feature flag
Atomic processing runs on every pipeline processing pass, so the change is guarded by the ci_atomic_processing_preload_available_records derisk feature flag (disabled by default, actor: project). When disabled, the code falls back to the existing with_project_preload scope unchanged. Both states are covered by specs.
References
MR acceptance checklist
Evaluated against the MR acceptance checklist.