Frontend Spike: Scanner status indicators for security profiles
## Overview This spike covers the frontend work required to display scanner status indicators for security profiles at the project level. The goal is to give AppSec teams clear visibility into the health and configuration state of scanners triggered by a security profile. ## Background When a security profile is applied to a project, there is currently no UI feedback on whether the triggered scans are running, failing, or stale. This spike explores how to surface that information in the frontend. ## Proposed Scanner Statuses (MVP) | Status | Description | |--------|-------------| | **Unconfigured** | No profile applied, scanner has been disabled or default state. | | **Active** | Profile applied and scans completing successfully. | | **Warning** | 1-2 consecutive scan failures (fixed threshold, not configurable). | | **Failed** | 3 consecutive scan failures (fixed threshold, not configurable). | | **Stale** | No scan activity in the past 90 days. | ## Implementation Plan * [x] Feature flag - https://gitlab.com/gitlab-org/gitlab/-/work_items/594052 * Introduce a new feature flag to gate all changes during development * Ensures no changes are visible to customers until the feature is ready to ship * [ ] UI changes - Table updates: Update the existing table to match the new design * Scanner health (Status): https://gitlab.com/gitlab-org/gitlab/-/work_items/594041 * Add more statuses. * Add precise scan count detail. * Last scan: * Display precise scan timing details. * Hovering over the last scan value will show a **tooltip** containing full scan timing information. * The tooltip will include a **button** — clicking it will open a **drawer** with the job details or options for troubleshooting the problem. * Actions column: * For scanners with any status **other than Unconfigured** will show a 3-dot menu containing two action buttons - "Troubleshoot failure" / "Disable". * For scanners with **Unconfigured** status will show a single "Apply default profile" button instead of the 3-dot menu. * [ ] GraphQL integration - * Consume the **new GraphQL fields** introduced by the backend
task