Background & Motivation
Only one pipeline can run at a time across the whole environment, this is enforced in the backend via OtherProjectActiveError in application/backend/app/api/routers/pipelines.py. However, discovering which project currently owns the running pipeline is hard for a newcomer:
- On the home page grid, the active-pipeline project is not pinned , it's sorted in with everything else.
- In the header dropdown (
ProjectsListPanel in application/ui/src/components/project-panel/projects-list-panel.component.tsx), only the currently-selected project shows an "Active" tag; if you're viewing a different project, the active one is buried in the otherProjects list.
A common instruction is: "disable the pipeline that's currently running, then enable my new project's pipeline." Today the teammate has to hunt for the running project first.
Proposed Solution
Make the active-pipeline project always visible and always pinned to the top of both the home page grid and the header dropdown, with inline enable/disable controls. Every project already carries an active_pipeline: bool in ProjectView (application/backend/app/api/schemas/project.py), so the data is available client-side without new endpoints.
Functional Requirements
- Always-visible active project
- The project whose
active_pipeline is true shall be pinned to the top of the home page project grid and the top of the header project dropdown, regardless of the current sort/filter. Optionally: this project stands out with a glowing green box or play/pause button (indicating it is in use).
- The pin shall persist even when a name search or task filter (Project Discovery feature) would otherwise exclude it, so the running pipeline is never hidden.
- Clear status indication
- The pinned active project shall show a prominent "Active pipeline" indicator, reusing the existing "Active"
Tag styling already used in ProjectsListPanel.
- Inline enable/disable
- From the pinned location, the user shall be able to disable the running pipeline directly (calling the existing
POST .../pipeline:disable in application/backend/app/api/routers/pipelines.py).
- From any other project row/card, the user shall be able to enable its pipeline (calling
POST .../pipeline:enable). This already exists in ProjectActionsMenu (application/ui/src/features/project/list/menu-actions/menu-actions.component.tsx) but shall be surfaced consistently on the home grid too.
- Conflict handling
- When enabling a pipeline while another is active, the existing 409
OtherProjectActiveError flow shall be surfaced via the already-present EnablePipelineBlockedDialog (application/ui/src/components/enable-pipeline-blocked-dialog/), guiding the user to disable the currently active pipeline first.
- No active pipeline state
- When no pipeline is running anywhere, no pinned "active" slot shall be shown, and the grid/dropdown shall render normally.
Affected Areas
- UI:
application/ui/src/features/project/list/project-list.component.tsx, application/ui/src/components/project-panel/projects-list-panel.component.tsx, application/ui/src/features/project/list/menu-actions/menu-actions.component.tsx, application/ui/src/components/enable-pipeline-blocked-dialog/
- Backend (existing, no change expected):
application/backend/app/api/routers/pipelines.py
Acceptance Criteria
Background & Motivation
Only one pipeline can run at a time across the whole environment, this is enforced in the backend via
OtherProjectActiveErrorinapplication/backend/app/api/routers/pipelines.py. However, discovering which project currently owns the running pipeline is hard for a newcomer:ProjectsListPanelinapplication/ui/src/components/project-panel/projects-list-panel.component.tsx), only the currently-selected project shows an "Active" tag; if you're viewing a different project, the active one is buried in theotherProjectslist.A common instruction is: "disable the pipeline that's currently running, then enable my new project's pipeline." Today the teammate has to hunt for the running project first.
Proposed Solution
Make the active-pipeline project always visible and always pinned to the top of both the home page grid and the header dropdown, with inline enable/disable controls. Every project already carries an
active_pipeline: boolinProjectView(application/backend/app/api/schemas/project.py), so the data is available client-side without new endpoints.Functional Requirements
active_pipelineistrueshall be pinned to the top of the home page project grid and the top of the header project dropdown, regardless of the current sort/filter. Optionally: this project stands out with a glowing green box or play/pause button (indicating it is in use).Tagstyling already used inProjectsListPanel.POST .../pipeline:disableinapplication/backend/app/api/routers/pipelines.py).POST .../pipeline:enable). This already exists inProjectActionsMenu(application/ui/src/features/project/list/menu-actions/menu-actions.component.tsx) but shall be surfaced consistently on the home grid too.OtherProjectActiveErrorflow shall be surfaced via the already-presentEnablePipelineBlockedDialog(application/ui/src/components/enable-pipeline-blocked-dialog/), guiding the user to disable the currently active pipeline first.Affected Areas
application/ui/src/features/project/list/project-list.component.tsx,application/ui/src/components/project-panel/projects-list-panel.component.tsx,application/ui/src/features/project/list/menu-actions/menu-actions.component.tsx,application/ui/src/components/enable-pipeline-blocked-dialog/application/backend/app/api/routers/pipelines.pyAcceptance Criteria
and header dropdown.