Project

General

Profile

Actions

Feature #46

closed
RA

Feature #24: Implémenter un hook pour la création automatique de tickets Redmine depuis les scans Trivy et Semgrep

Domaine & application : SecurityFinding, normalisation Trivy/Semgrep, clé de dédup et format de ticket

Feature #46: Domaine & application : SecurityFinding, normalisation Trivy/Semgrep, clé de dédup et format de ticket

Added by Redmine Admin about 2 months ago. Updated about 2 months ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/11/2026
Due date:
% Done:

0%

Estimated time:
spec_ref:

Spec = la description + critères d'acceptation de ce ticket (issu de la décomposition de #24, validée PO). Unité hexagonale domaine+application : SecurityFinding, normaliseurs Trivy/Semgrep, clé de dédup, format ticket, use case CreateTicketsFromScan via port abstrait. Aucune dépendance. Prêt pour backend-dev.

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
preprod_url:
deployed_at:
branch:
feat/46-security-finding-domain
pr_url:
https://github.com/omdev-tech/PipeLiner-Client/pull/23
security_key:
severity:
paused:

Description

Couches domain + application de `api/` : modèle de domaine commun `SecurityFinding` + logique métier indépendante de Redmine et du transport HTTP. Normaliseurs purs `from_trivy(report)` / `from_semgrep(report)` → liste de `SecurityFinding`. Calcul de la clé de dédup : Trivy `CVE-{id}` ou `{paquet}@{version}_CVE-{id}` ; Semgrep `{fichier}:{ligne}_{rule-id}`. Formatage du ticket (titre + description complète : sévérité, extrait code, lien CVE, recommandations). Cas d'usage `CreateTicketsFromScan` orchestrant normalisation → décision dédup vs régression via un **port abstrait** (pas d'impl Redmine ici). TDD.

## Critères d'acceptation
- `SecurityFinding` + normaliseurs couvrent les 2 formats de rapport.
- Clé de dédup correcte (Trivy `CVE-{id}`/`{paquet}@{version}_CVE-{id}` ; Semgrep `{fichier}:{ligne}_{rule-id}`).
- Format de ticket conforme aux exemples (titre + description complète).
- `CreateTicketsFromScan` décide dédup vs régression via un port abstrait.
- Tests unitaires verts (normalisation, clé, format) ; `ruff check .` + `mypy src` passent.

Estimation : M. Dépendances : aucune.


Files

qa-46-preuve-technique.txt (3.78 KB) qa-46-preuve-technique.txt Redmine Admin, 06/11/2026 06:50 PM
Actions

Also available in: PDF Atom