# Veylant IA — Sprint 12 Feedback Backlog

**Collecte :** 2026-05-19 → 2026-05-30 (2 sessions pilotes, 2 clients)
**Responsable :** David (Product) + Marie (Customer Success)

---

## Clients pilotes

| Client | Secteur | Users actifs | Contact |
|--------|---------|-------------|---------|
| **Client A — TechVision ESN** | ESN / IT Services | 50 | Thomas L. (IT Manager) |
| **Client B — RH Conseil** | Cabinet RH | 20 | Sophie M. (DPO) |

---

## NPS pilote (avant Sprint 12)

| Client | Score NPS | Verbatim |
|--------|-----------|---------|
| Client A | 7/10 | "Utile au quotidien mais les erreurs 429 sans info de retry cassent notre workflow CI/CD." |
| Client B | 6/10 | "La démo playground ne charge pas depuis notre poste (CORS bloqué). Le message d'erreur 403 ne dit pas quel modèle est autorisé." |

**Objectif post-Sprint 12 :** NPS ≥ 8/10 pour les deux clients.

---

## Session 1 — Client A (TechVision ESN, 2026-05-19)

### Participants : Thomas L. (IT Manager), 3 devs

### Bugs remontés

| Priorité | Titre | Description | Story |
|----------|-------|-------------|-------|
| 🔴 MUST | 429 sans Retry-After | Les scripts CI de Thomas frappent le rate limit. Sans header `Retry-After`, le backoff exponentiel ne sait pas combien attendre → retry storm. RFC 6585 viole. | E11-09 |
| 🔴 MUST | Latence p99 non visible | "On ne sait pas si on est proches du SLA 500ms." Aucune recording rule Prometheus → dashboard vide. | E2-12 |
| 🟡 SHOULD | Playground trop lent à charger | Page met 3s (CDN swagger-ui lent depuis leur réseau d'entreprise). | E8-15 |

### Demandes UX

| Priorité | Titre | Description | Story |
|----------|-------|-------------|-------|
| 🟡 SHOULD | X-Request-Id dans les erreurs | "Impossible de corréler les 429 avec nos logs sans le request ID dans la réponse d'erreur." | E11-10 |
| 🟢 COULD | Header Accept-Language | "Si l'API pouvait adapter le message d'erreur en français pour les end-users..." | — |
| ⚫ WON'T | SDK Python natif | Hors scope V1 — utiliser le SDK OpenAI avec `base_url` suffit. | — |

---

## Session 2 — Client B (RH Conseil, 2026-05-26)

### Participants : Sophie M. (DPO), Karim B. (Dev lead)

### Bugs remontés

| Priorité | Titre | Description | Story |
|----------|-------|-------------|-------|
| 🔴 MUST | CORS bloqué — dashboard React | Le dashboard React de Karim sur `localhost:3000` est bloqué par la politique CORS. Aucun `Access-Control-Allow-Origin` dans les réponses. | E11-09 |
| 🔴 MUST | CSP bloque Swagger UI | La Content-Security-Policy bloquait le chargement de `unpkg.com/swagger-ui-dist` (CDN externe non autorisé par CSP `connect-src 'self'`). → **Corrigé :** la route `/docs` utilise désormais une CSP dédiée avec `script-src 'self' 'unsafe-inline' unpkg.com`. | E11-09 |
| 🔴 MUST | Message 403 opaque | "Le message 'model X is not available for your role' ne dit pas quels modèles sont autorisés. Karim a passé 20 min à chercher." | E11-10 |
| 🟡 SHOULD | Playground inaccessible sans compte | Sophie veut montrer la démo PII à sa direction sans créer de comptes. | E8-15 |

### Demandes UX

| Priorité | Titre | Description | Story |
|----------|-------|-------------|-------|
| 🟡 SHOULD | Export logs CSV plus rapide | "Le CSV prend 8s pour 10k lignes. Acceptable, mais un indicateur de progression aiderait." | — |
| 🟢 COULD | Webhook sur alert rate limit | "On préférerait recevoir un webhook Slack plutôt que de poller les métriques." | — |
| 🟢 COULD | Entrée RGPD: champ `sous-traitants UE/hors-UE` | Pour distinguer AWS eu-west vs AWS us-east dans les transferts hors-UE. | — |
| ⚫ WON'T | SSO ADFS pour RH Conseil | Keycloak SAML supporte ADFS — mais délai de 3 semaines pour le projet client. | — |

---

## Tableau MoSCoW consolidé

| Priorité | Item | Sprint | Status |
|----------|------|--------|--------|
| 🔴 MUST | Retry-After sur 429 (RFC 6585) | S12 | ✅ Résolu — E11-09 |
| 🔴 MUST | CORS middleware pour le dashboard React | S12 | ✅ Résolu — E11-09 |
| 🔴 MUST | CSP correcte (API vs Docs vs Playground) | S12 | ✅ Résolu — E11-09 |
| 🔴 MUST | Message 403 avec liste des modèles autorisés | S12 | ✅ Résolu — E11-10 |
| 🔴 MUST | X-Request-Id dans les réponses d'erreur | S12 | ✅ Résolu — E11-10 |
| 🔴 MUST | Recording rules Prometheus (p99, p95, error rate) | S12 | ✅ Résolu — E2-12 |
| 🔴 MUST | Playground public (no auth) | S12 | ✅ Résolu — E8-15 |
| 🟡 SHOULD | Améliorer vitesse de chargement Playground | S13 | 📋 Backlog |
| 🟡 SHOULD | Indicateur de progression export CSV | S13 | 📋 Backlog |
| 🟡 SHOULD | Webhook Slack sur alert rate limit | S13 | 📋 Backlog |
| 🟢 COULD | Header Accept-Language sur messages d'erreur | S14 | 📋 Backlog |
| 🟢 COULD | Champ sous-traitants UE/hors-UE dans RGPD registry | S14 | 📋 Backlog |
| ⚫ WON'T | SDK Python natif Veylant | V2 | ❌ Hors scope |
| ⚫ WON'T | Intégration ADFS spécifique RH Conseil | V2 | ❌ Hors scope |

---

## Actions immédiates post-sprint

- [ ] **Client A :** Envoyer release notes Sprint 12 avec focus sur Retry-After + recording rules Prometheus
- [ ] **Client B :** Mettre à jour les headers CORS en production avec leur domaine dashboard (PR config.yaml)
- [ ] **Les deux :** Invitation au Sprint 13 Review (date cible : 2026-06-21)
- [ ] **NPS de suivi :** Relancer les deux clients J+7 après déploiement Sprint 12
