Document SARIF direct upload support: ingestion behavior, limits, and field compatibility
## Summary
Create a dedicated documentation page covering GitLab's SARIF 2.1.0 direct upload support, including ingestion behavior, limits, and compatibility details. This page should serve as the canonical reference for users integrating third-party SARIF-producing tools with GitLab's security scanning pipeline.
## Motivation
SARIF direct upload is now a first-class artifact type in GitLab (see #452042). Users need clear documentation on what is supported, what the ingestion limits are, and what happens when reports are malformed or partially unprocessable.
## Content to cover
### Overview
- What SARIF direct upload is and when to use it (vs. native GitLab scanners)
- Supported SARIF version: 2.1.0 only
- How to configure the CI artifact type (`sarif` artifact type in `.gitlab-ci.yml`)
### Ingestion behavior and thresholds
- **50% ingestion failure threshold** (!234268): when more than 50% of results in a SARIF report are unprocessable (missing `physicalLocation`, missing `ruleId`, or nil UUID components), the scan fails with a `report_error` rather than silently partially ingesting
- At or below 50% drop rate: partial ingestion proceeds with a warning surfaced in the scanner status / Security Profiles UX showing the exact drop count
- Above 50% drop rate: scan fails loudly with an error and drop count — this is intentional to surface likely configuration errors
| Drop rate | Result | Signal |
|-----------|--------|--------|
| 0% | All findings ingested | No message |
| 1–50% | Partial ingestion | Warning with drop count |
| >50% | Report fails (`report_error`) | Error with drop count |
### Limits
- Maximum runs per SARIF report (multi-run support via !230154)
- Plan limits (`plan_limits` migration from !227968)
- Any file size or result count limits
### Field mapping and compatibility
- How SARIF `result` fields map to GitLab vulnerability fields (severity, identifiers, location, details)
- Findings without a stable `physicalLocation` are dropped — document this behavior and how to avoid it
- Identifier stability requirements for deduplication
- SARIF suppression model vs. GitLab `vulnerability_flags`
- Severity level mapping from SARIF to GitLab severity scale
### Security policy integration
- How SARIF findings interact with approval/scan result policies
- Pipeline execution policy enforcement (`sarif` in `SUPPORTED_SCANNERS`)
- Vulnerability Management Policy scanner enum support
### MR security diff widget
- SARIF findings appear in the MR security diff widget (added in !230797)
### Known limitations / non-blocking follow-ups
- Cross-report-type deduplication with SAST/secret-detection findings (#592410) is not yet supported
## References
- Parent epic/issue: #452042
- Ingestion threshold MR: !234268
- Parser and ingestion: !227970
- Artifact type registration: !227968
- Multi-run support: !230154
- Ingestion health visibility: !230137
- Feature flag: !230156
- MR widget support: !230797
issue