Story : PD-180 — Webhooks événements utilisateur
Date : 2026-03-07
1. Documents évalués
- PD-180-specification.md (auteur: ChatGPT gpt-5.3-codex)
- PD-180-tests.md (auteur: ChatGPT gpt-5.3-codex)
- PD-180-besoin.md (référence)
2. Sources d'analyse
- Review P1 (Claude) : 15 constats
- Confrontation P2 (ChatGPT) : 2 divergences, 10 zones d'ombre
3. Écarts identifiés
BLOQUANTS (4)
| ID | Type | Description | Source |
| ECT-01 | Ambiguïté | Codes HTTP de succès livraison non définis (200 seul ? 2xx ?) — impossible de déterminer DELIVERED vs RETRY | R-02 |
| ECT-02 | Contradiction | INV-07 (append-only, aucun DELETE) vs CA-08 (rétention 30j) — mutuellement contradictoires | R-03 |
| ECT-03 | SEC | Protection SSRF incomplète — URLs vers IP privées (RFC 1918, loopback, link-local) non bloquées | R-05 |
| ECT-04 | Ambiguïté | Canonicalisation JSON pour signature HMAC non définie — vérification non reproductible | R-06 |
MAJEURS (7)
| ID | Type | Description | Source |
| ECT-05 | Contradiction | ERR-05/ERR-06 décrivent comportement récepteur, pas émetteur | R-01 |
| ECT-06 | Incohérence | 6 tests d'invariants (TC-INV-*) dans la matrice sans scénario GWT | R-04 |
| ECT-07 | Hypothèse | Race condition rotation secret vs worker BullMQ ayant lu l'ancien secret | R-09 |
| ECT-08 | Ambiguïté | INV-01 (zero-knowledge) non vérifiable sans schéma JSON contractuel du payload | R-10 |
| ECT-09 | Ambiguïté | Encodage data.hash non spécifié (hex/base64/base64url) — impact signature | R-12 |
| ECT-10 | Ambiguïté | Politique retry: seules 4 tentatives sur 10 ont un délai défini | R-13 |
| ECT-11 | SEC | Secret HMAC sans longueur minimale ni exigence CSPRNG — brute-force possible | R-14 |
MINEURS (4)
| ID | Type | Description | Source |
| ECT-12 | Ambiguïté | Code quota dépassé: "409 ou 422" — contrat doit fixer un seul code | R-07 |
| ECT-13 | Contradiction | État DELETED "terminal" mais "résolution manuelle" mentionnée | R-08 |
| ECT-14 | Ambiguïté | Fenêtre rate-limit: glissante vs fixe non définie | R-11 |
| ECT-15 | Incohérence | TC-NEG-01 teste ftp:/javascript: non spécifiés dans INV-04 | R-15 |
4. Scoring par critère
| Critère | Écarts assignés | Score |
| completeness | ECT-01 (BLOQ), ECT-09 (MAJ), ECT-10 (MAJ), ECT-11 (MAJ) | 10 - 2 - 3 = 5.0 |
| testability | ECT-06 (MAJ), ECT-08 (MAJ), ECT-15 (MIN) | 10 - 2 - 0.25 = 7.75 |
| clarity | ECT-02 (BLOQ), ECT-04 (BLOQ), ECT-05 (MAJ), ECT-07 (MAJ), ECT-12 (MIN), ECT-13 (MIN) | 10 - 4 - 2 - 0.5 = 3.5 |
| traceability | ECT-03 (BLOQ), ECT-14 (MIN) | 10 - 2 - 0.25 = 7.75 |
Moyenne : (5.0 + 7.75 + 3.5 + 7.75) / 4 = 6.0
5. Verdict attendu
- Moyenne 6.0 < 7 → NON_CONFORME
- completeness 5.0 < 6 → NON_CONFORME (score < 6 = NON_CONFORME systématique)
- clarity 3.5 < 6 → NON_CONFORME