Release 0 (Crawl) - [SPM] Centralized Security Scanner Enablement
## Overview Release 0 is the MVC for Centralized Security Scanner Enablement. Ship what's mostly built. Low gap, low complexity. Deliver an immediately useful surface using existing data and infrastructure. **Parent epic:** https://gitlab.com/groups/gitlab-org/-/work_items/21299 **Full release breakdown (R0/R1/R2):** https://gitlab.com/gitlab-org/gitlab/-/work_items/595185 **Interlock issue:** https://gitlab.com/gitlab-org/gitlab/-/work_items/595472 **Design issue:** https://gitlab.com/gitlab-org/gitlab/-/work_items/593900 **Target:** Q2 ## Target Metrics **North Star:** ≥66% of active Ultimate accounts with ≥25% of push projects running 2+ scanners enabled via SPM enablement ([Tableau](https://10az.online.tableau.com/#/site/gitlab/views/ofAccountswith25ofPushProjectsusing3scanner/ofAccountswith25ofPushProjectsusingNScanners?:iid=1)) **End of Q2:** 1. ≥62% of active Ultimate accounts with ≥25% of push projects running 2+ scanners 2. ≥4% of active Ultimate accounts with scanners enabled via SPM flows ## Key Engineering Decisions (confirmed Apr 2026) * **Stat cards use Security Inventory as the data source.** Not profile-specific statistics. Building profile-only counters would duplicate all the work done for Security Inventory (new tables, aggregation, performance tuning) for a model we would eventually replace. Using Security Inventory avoids that and ensures the stat cards match what users see elsewhere. * **Scanner detail view shows all projects, not just profile-managed ones.** The "Profile" column is replaced with a "Source" column. Source values: Scan Profile, Security Execution Policy (SEP), Pipeline Execution Policy (PEP), Pipeline source (catch-all for CI YAML), No profile applied. * **"No profile applied" is the key nudge.** For unconfigured projects, Source shows "No profile applied" to drive users toward the wizard. This is the primary job to be done from this page. * **Scanner health definitions match Security Inventory.** Same Active / Needs Attention / Stale definitions across both surfaces to avoid trust-breaking mismatches. Profile-managed projects get richer color (e.g. "last 5 scans failed") via Nico's source attribution work. * **No cross-team dependencies** except Nico's profile source attribution work, which is already in flight. ## Scope ### Security Configuration Dashboard | Feature | Scope | |---------|-------| | Stat cards | Projects without coverage, Scanners enabled, Needs attention, Stale scans — sourced from Security Inventory | | Stat card 4 | Stale scans projects not scanned in 90+ days. Replaces "Scanner problems" which duplicated "Needs Attention" | | Scanner row overflow menu | Removed for MVC. No clear actions identified | | Confirmed scanners | Dependency Scanning, SAST, Secret Detection. Container Scanning not included in this release | | Scanner detail view | Per-scanner drill-down showing all projects with Source column, scanner health, last scan time, and Security Attributes column | | Default sort order | Failed \> Warning \> Stale \> Unconfigured \> Active (worst to best). Stat cards act as quick filters | | Security Attributes column | Included so users can visually confirm attribute-based filters are matching the expected projects | ### Enable Scanner Wizard | Feature | Scope | |---------|-------| | Setup goal | Quick Setup (recommended defaults, \~3 min) and Advanced Setup (\~9 min) entry point | | Project scope selection | Manual project / subgroup selection; max \~100 object IDs per mutation. Filters align with Security Inventory filters. All projects shown including fully-covered (wizard may be used to change a profile or add a scanner, not just initial enablement) | | Scanner + profile selection | Select scanners; Standard profile auto-assigned per scanner type; one profile per scanner per mutation call | | Apply progress | Email notification only — same rollup email mechanism as Security Attributes (summarizing project-level failures). No in-UI monitoring for Release 0. Revisit for Release 1 | | Wizard abandonment | Unsaved-changes modal when user navigates away mid-wizard. No saved/draft state — communicate that progress will be lost. @mfangman to design modal | | Object ID cap | No special treatment for MVC. Users can apply filters (e.g. "no scanner coverage") to find and select unconfigured projects on subsequent runs. Document in release notes | | Scale | Up to \~100 object IDs per apply operation | | Scan triggers (Review step) | Keep in profile preview only. Not surfaced inline | | Estimated CI impact | Removed for Release 0 and Release 1. Revisit in Release 2 | | Rollout plan display | Walk phase (stretch goal for crawl). Drop rollout time for initial release | | Post-confirmation destination | Page is good as is for Release 0. Future iterations: progress tracking (in progress vs. complete), real-time per-project monitoring | ### Scanner Details Page — "Apply" CTA | Decision | Detail | |----------|--------| | Destination | Send users directly to the Review Configuration step, pre-populated with unconfigured projects and the current scanner already selected. Skip project scope and scanner selection steps | | Button copy | "Apply for projects" is unclear. Placeholder for now. Candidates: "Enable for more projects," "Expand coverage." Finalize once design is in the issue | ### Pipeline Triggers | Feature | Scope | |---------|-------| | Trigger types | Push / MR events (existing pipeline-based scan injection) | ### Disablement Workflow Defer full disablement workflow. Design a disable affordance on the scanner details page as a stretch goal. Existing Security Inventory "disable scan profiles" action serves as interim workaround. Design principle: enablement should be prominent and easy; disablement should require deliberate action. Copy on any disable action should say "disable profile-based configuration" (not "disable scanner") to make clear it only affects profile-managed projects. ## Out of Scope for Release 0 * Release 1 (walk) * Release 2 (run) * Leveraging DAP --- ## Open Items * https://docs.google.com/document/d/12-UHjhTz8Gl5LZuQ9E3rFvIIKIBP9SbfhTQRFXkONS8/edit?tab=t.0
epic