PD-105 — Confrontation Gate 5 (AMBIGUITY)¶
Date : 2026-02-10 Auteur : Claude (orchestrateur) Rôle : Validation indépendante des écarts identifiés par ChatGPT
Résumé¶
La review ChatGPT a identifié 11 écarts : - 3 BLOQUANTS - 7 MAJEURS - 1 MINEUR
Cette confrontation analyse chaque écart pour confirmer ou contester sa validité.
Analyse des écarts¶
ECT-PLAN-01 : Toast en foreground pour silent (BLOQUANT)¶
Écart ChatGPT : Le plan §2.4 mentionne "Affiche in-app toast (alert)" en foreground sans conditionner au type de notification.
Analyse : - Le plan dit effectivement "Affiche in-app toast (alert)" mais le contexte est ambigu - Le flow §2.4 liste les actions du handler foreground sans distinguer silent vs alert - INV-105-05 interdit toute alerte pour les silent notifications
Verdict : ✅ CONFIRMÉ — Le plan doit expliciter que le toast ne s'affiche QUE pour les notifications alert, jamais pour silent.
ECT-PLAN-02 : Retry backoff sans reprise ultérieure (MAJEUR)¶
Écart ChatGPT : Le plan ne couvre que "backoff exponentiel (3 tentatives)" sans mécanisme de reprise au prochain cycle.
Analyse : - ERR-105-01 exige "reessayer au prochain cycle d'activation app/session" - Le plan §5 ne mentionne que "Retry avec backoff exponentiel (3 tentatives)" - La reprise différée n'est pas documentée
Verdict : ✅ CONFIRMÉ — Écart de couverture réel.
ECT-PLAN-03 : UUID non explicitement v4 (MAJEUR)¶
Écart ChatGPT : Le plan parle de "UUID" sans préciser "UUID v4".
Analyse : - INV-105-08 exige explicitement "UUID v4" - Le plan §2.3 et §3 mentionnent "UUID" sans qualifier v4 - Le code contracts §types.NotificationRecord.id spécifie bien "format: UUID v4"
Verdict : ⚠️ PARTIELLEMENT CONFIRMÉ — Le code contracts corrige l'ambiguïté du plan. L'écart existe dans le plan mais est résolu par les code contracts.
ECT-PLAN-04 : Observabilité UUID v4 insuffisante (BLOQUANT)¶
Écart ChatGPT : Pas de point d'observabilité pour vérifier "v4".
Analyse : - L'observable "SQLite" est effectivement insuffisant pour prouver le format v4 - Cependant, le code contracts définit des preconditions sur save() exigeant UUID v4 - Un test unitaire peut valider le format, mais ce n'est pas documenté dans le plan
Verdict : ⚠️ PARTIELLEMENT CONFIRMÉ — L'observabilité est implicite via les tests unitaires, mais devrait être explicite dans le plan.
ECT-PLAN-05 : Atomicité badge non garantie (MAJEUR)¶
Écart ChatGPT : Pas de propriétés de sérialisation pour les mises à jour concurrentes du badge.
Analyse : - 3 handlers peuvent mettre à jour le badge : foreground, background, killed - Aucune mention de mutex, queue ou sérialisation - Risque de race condition réel
Verdict : ✅ CONFIRMÉ — Le plan devrait mentionner la stratégie de sérialisation.
ECT-PLAN-06 : Déduplication non définie (MAJEUR)¶
Écart ChatGPT : Pas de mécanisme d'idempotence à la réception.
Analyse : - APNs peut envoyer des retries - Le plan ne mentionne pas de vérification de doublon par notificationId - INV-105-08 exige un "identifiant unique global"
Verdict : ✅ CONFIRMÉ — La déduplication par notificationId devrait être explicite.
ECT-PLAN-07 : Bypass possible des filtres (MAJEUR)¶
Écart ChatGPT : Pas de garde-fou architectural empêchant un appel direct à APNs sans classifier/sanitize.
Analyse : - Le plan décrit un flux nominal avec classifier → sanitize → dispatch - Aucune contrainte architecturale (interface unique, visibilité private) n'est mentionnée - Un développeur pourrait théoriquement appeler APNsClient.send() directement
Verdict : ⚠️ PARTIELLEMENT CONFIRMÉ — Risque théorique mais mitigé par l'architecture NestJS (injection de dépendances, module boundaries). La contrainte pourrait être renforcée.
ECT-PLAN-08 : Métrique livraison non définie (MAJEUR)¶
Écart ChatGPT : "APNs feedback" n'est pas une définition suffisante de la métrique de livraison.
Analyse : - CA-105-09 exige "taux de livraison APNs >= 99%" - H-105-05 mentionne "acknowledgement APNs + instrumentation backend" - Le plan dit "APNs feedback + compteur succès/échecs" sans définir précisément
Verdict : ✅ CONFIRMÉ — La définition de la métrique devrait être plus précise (succès = APNs response 200, échec = 4xx/5xx, etc.)
ECT-PLAN-09 : INV-105-13 mal mappé (BLOQUANT)¶
Écart ChatGPT : Le code contract associe INV-105-13 (EAS obligatoire) à permission_prompt.
Analyse : - INV-105-13 porte sur la validation CI/CD, pas sur le composant permission_prompt - Le code contracts §invariants_mapping.INV-105-13 pointe vers permission_prompt - C'est une erreur de mapping évidente
Verdict : ✅ CONFIRMÉ — Le mapping est incorrect. INV-105-13 devrait pointer vers la configuration CI/CD (.gitlab-ci.yml).
ECT-PLAN-10 : notification-center sans code contract (MAJEUR)¶
Écart ChatGPT : Le module notification-center du plan n'a pas de code contract explicite.
Analyse : - Le plan §1.1 définit notification-center (NotificationCenterScreen, NotificationDetailScreen) - Les code contracts §frontend.notification_center existent bien et définissent les composants - L'écart est factuellemnt incorrect
Verdict : ❌ REJETÉ — Le code contract existe dans le fichier YAML §frontend.notification_center.
ECT-PLAN-11 : Signatures manquantes notification_store (MINEUR)¶
Écart ChatGPT : Les méthodes de notification_store n'ont pas de signatures.
Analyse : - Le code contracts §frontend.notification_store.methods définit effectivement addNotification, markAsRead, computeBadge sans signatures - Les autres composants ont des signatures explicites
Verdict : ✅ CONFIRMÉ — Incohérence mineure dans la documentation des code contracts.
Synthèse¶
| ID | Description | Verdict | Gravité finale |
|---|---|---|---|
| ECT-PLAN-01 | Toast foreground non conditionné | CONFIRMÉ | BLOQUANT |
| ECT-PLAN-02 | Reprise différée absente | CONFIRMÉ | MAJEUR |
| ECT-PLAN-03 | UUID v4 non explicite | PARTIELLEMENT CONFIRMÉ | MINEUR (résolu par code contracts) |
| ECT-PLAN-04 | Observabilité UUID v4 | PARTIELLEMENT CONFIRMÉ | MAJEUR |
| ECT-PLAN-05 | Atomicité badge | CONFIRMÉ | MAJEUR |
| ECT-PLAN-06 | Déduplication absente | CONFIRMÉ | MAJEUR |
| ECT-PLAN-07 | Bypass filtres possible | PARTIELLEMENT CONFIRMÉ | MINEUR (mitigé par architecture) |
| ECT-PLAN-08 | Métrique livraison floue | CONFIRMÉ | MAJEUR |
| ECT-PLAN-09 | INV-105-13 mal mappé | CONFIRMÉ | BLOQUANT |
| ECT-PLAN-10 | notification-center sans contract | REJETÉ | — |
| ECT-PLAN-11 | Signatures manquantes | CONFIRMÉ | MINEUR |
Écarts confirmés : 8 (sur 11) Écarts rejetés : 1 Écarts partiellement confirmés : 2
Bloquants confirmés : 2 (ECT-PLAN-01, ECT-PLAN-09) Majeurs confirmés : 5 (ECT-PLAN-02, ECT-PLAN-04, ECT-PLAN-05, ECT-PLAN-06, ECT-PLAN-08) Mineurs confirmés : 3 (ECT-PLAN-03, ECT-PLAN-07, ECT-PLAN-11)
Recommandation¶
Avec 2 écarts bloquants confirmés, le verdict préliminaire est NON_CONFORME.
Corrections requises avant passage au verdict final : 1. ECT-PLAN-01 : Expliciter la condition sur le type de notification pour le toast foreground 2. ECT-PLAN-09 : Corriger le mapping INV-105-13 dans les code contracts