Add real-time pipeline stage status updates to MR pipeline mini graph using GraphQL subscription

Summary

As part of the gitlab-org#14144, we need to implement a new GraphQL subscription to provide real-time pipeline stage status updates in the MR pipeline mini graph. When an individual stage's status changes (e.g., pending → running → success/failed), the pipeline mini graph should update immediately without requiring page refreshes or polling.

Background

Real-time pipeline-level status updates were previously implemented in #582444 (closed) using the ci_pipeline_statuses_updated subscription. However, that subscription operates at the pipeline level and does not cover individual stage status changes within a pipeline.

Currently, when a pipeline is running, users cannot see individual stage status transitions in real-time on the MR pipeline mini graph. The stage icons only update on page refresh or via polling. To provide a more responsive experience, we need a new subscription that fires whenever a CI stage's status changes.

Unlike the pipeline-level subscription work, no existing GraphQL subscription exists for stage status updates. A new subscription must be created from scratch, covering both the backend subscription infrastructure and the frontend consumption.

What needs to be done

Create a new GraphQL subscription on the backend and consume it on the frontend in the PipelineStageDropdown component. Only stages belonging to alive pipelines (running, pending, etc.) should subscribe to reduce WebSocket overhead, and subscriptions should be cleaned up once a stage reaches a terminal status.

Edited by 🤖 GitLab Bot 🤖