Aller au contenu

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