Feature #70
closedTag scan tickets by severity (vuln-{severity} token + severity custom field) — extends #24
0%
conversation:scan-severity-tagging
Description
**Lié à :** #24 (hook scan→ticket, livré) · **Surface :** Client-Dashboard `api/` (domain + infrastructure)
Enrichir les tickets créés par le hook scan→ticket (#46/#47) avec la **sévérité tagguée**, filtrable :
1. **Token greppable dans la description** (pattern `bf-disagree`) : `SecurityFinding.ticket_description` ajoute un token `vuln-critical` | `vuln-high` | `vuln-medium` | `vuln-low` (selon `severity`), pour que la liste du dashboard affiche une puce de sévérité + filtre.
2. **Champ custom Redmine `severity` (id 13, liste critical/high/medium/low)** : l'adaptateur `RedmineScanTicketAdapter.create_ticket` pose ce champ = `finding.severity.value.lower()` à la création.
3. **Activer `security_key` (id 12)** : `infrastructure/config.py` → `redmine_security_key_field_id` défaut **12** ; ajouter `redmine_severity_field_id` défaut **13**. L'adaptateur pose les deux champs custom à la création.
## Critères d'acceptation
- Token `vuln-{severity}` dans la description (greppable, multi-tenant).
- À la création : champ custom `severity` (13) = sévérité, `security_key` (12) = clé de dédup.
- Config : `redmine_security_key_field_id=12`, `redmine_severity_field_id=13` par défaut.
- TDD respx (token + les 2 champs custom dans le payload). Gate vert : pytest ×2, ruff, mypy.