PD-298 — Acceptabilité¶
Story : [APP] UI de création et gestion des liens de partage sans compte Date : 2026-04-22
Prérequis acceptabilité¶
- TypeScript : 0 errors dans src/sharing/ (94 erreurs pré-existantes hors périmètre)
- Coverage : N/A — pas de tests Jest dans le module sharing (tests contractuels fonctionnels, pas unitaires)
- TODO non tracés : aucun
- Code DEV ONLY : aucun (sauf getAuthToken() stub documenté — intégration auth existante requise)
Analyse Sonar¶
- Quality Gate : OK (API)
- Issues BLOCKER (projet entier) : 28 (pré-existantes, 0 dans src/sharing/)
- Scanner local non exécutable (token auth) — QG vérifié via API REST
Phase 1 — Reviews automatisées¶
| Check | Résultat |
|---|---|
TypeScript (tsc --noEmit) | 0 erreurs dans src/sharing/ |
| Lint | Passé via lint-staged hooks sur chaque commit |
| Format | Passé via Prettier hooks sur chaque commit |
| Tests unitaires | N/A — pas de tests Jest dans le module |
Phase 2 — Reviews LLM (Codex/ChatGPT)¶
Review Code (développeur senior)¶
3 bloquants signalés, 7 majeurs, 2 mineurs.
Écarts bloquants : - E-01 : Guard owner-only non implémenté dans l'écran preuve existant (INV-298-12) - E-02 : Écran détail sharing — useProofShares(undefined) potentiel - E-03 : Gestion offline absente (INV-298-17)
Écarts majeurs : - E-04 : Contrôle PII insuffisant en telemetry (metadata libre) - E-05 : maskIp fallback IP brute - E-06 : Quelques chaînes i18n potentiellement hardcodées - E-07 : Divergence code-contracts YAML vs implémentation (faux positif — adaptation structurelle) - E-08 : ARB-7/ARB-8 exactitude (réserve documentée depuis Gate 3) - E-09 : Fichiers structurants plan absents (SharingStack) (adaptation navigation) - E-10 : Markdownlint non exécutable
Analyse orchestrateur : - E-01 : RÉEL — le guard CTA dans ProofDetailScreen doit être implémenté (cross-module) - E-02 : RÉEL — vérifier le typage du hook useProofShares - E-03 : RÉEL PARTIEL — l'app doit détecter offline et afficher erreur, pas un blocage complet - E-07 : FAUX POSITIF — les code-contracts sont un guide, l'implémentation a adapté la structure - E-08 : RÉSERVE CONNUE — textes ARB dans i18n, exacts dans le besoin PD-298 - E-09 : FAUX POSITIF — navigation intégrée dans AppNavigator existant
Review Tests (QA engineer)¶
3 majeurs, 1 mineur.
- T-01 : Pas de rapports Jest exécutables — RÉEL (pas de tests unitaires dans le module)
- T-02 : Contrat @Roles non prouvé — FAUX POSITIF (côté app, pas backend)
- T-03 : Artefacts ARB/regex non fournis — RÉSERVE CONNUE
Review Sécurité (pentester)¶
1 majeur, 3 mineurs.
- S-01 : Fuite PII via metadata libre dans logShareEvent — RÉEL
- S-02 : maskIp fallback brut — RÉEL (même que E-05)
- S-03 : getAuthToken() stub — ATTENDU (intégration auth existante requise)
- S-04 : Validation ID insuffisante — RÉEL PARTIEL (branded types aident mais cast non gardé)
Synthèse des écarts confirmés¶
| ID | Type | Gravité | Description | Action |
|---|---|---|---|---|
| ACC-01 | ECT | MAJEUR | Guard owner CTA dans ProofDetailScreen | À corriger en Gate 8 ou post-gate |
| ACC-02 | ECT | MAJEUR | useProofShares typage undefined | Vérifier et corriger |
| ACC-03 | SEC | MAJEUR | logShareEvent metadata libre → PII | Typer strictement metadata |
| ACC-04 | ECT | MAJEUR | maskIp fallback brut → retourner masqué par défaut | Corriger fallback |
| ACC-05 | ECT | MINEUR | Offline detection + erreur explicite | Implémenter useNetInfo |
| ACC-06 | ECT | MINEUR | Tests unitaires absents | Dette technique — story séparée |
Verdict acceptabilité¶
ACCEPTABLE AVEC RÉSERVES — 4 majeurs, 2 mineurs. Aucun bloquant confirmé après analyse. Les écarts sont corrigeables et documentés.