PD-284 — Dossier de conformité Gate 5 (v1)¶
Date : 2026-03-13 Gate : AMBIGUITY (review plan d'implémentation) Itération : v1 P1 (Review) : Claude — PD-284-review-step5-v1.md P2 (Confrontation) : ChatGPT (via OpenCode, prompt condensé — dérogation Art. II) — confrontation-step5-v1
Écarts consolidés¶
| # | Type | Gravité P1 | Gravité P2 | Gravité retenue | Description |
|---|---|---|---|---|---|
| E-01 | Contradiction | MAJEUR | Bloquant | MAJEUR | HT-03 mitigation (lib tierce) viole code contract SSE (lib tierce interdite) |
| E-02 | Ambiguïté | MAJEUR | MAJEUR | MAJEUR | Mapping 7 états → 5 étapes visuelles absent du plan |
| E-03 | Couverture | MAJEUR | MAJEUR | MAJEUR | failure_reason (FAILED_TIMEOUT) non exploité par aucun composant |
| E-04 | Sécurité | MAJEUR | MAJEUR | MAJEUR | Absence purgeStale() au démarrage (learning PD-283/PD-262) |
| E-05 | Cadrage | MAJEUR | MAJEUR | MAJEUR | Section contraintes techniques absente (PD-80 statut, framework test, ESM/CJS) |
| E-06 | Testabilité | MAJEUR | Bloquant | MAJEUR | TC-NOM-13 exclu CI — CA-284-14 non vérifiable. Test proxy faisable. |
| E-07 | Hypothèse | MAJEUR | Bloquant | MAJEUR | Fail-open has_active_urgent_seal sur idempotence PD-80 non contractualisée |
| E-08 | Ambiguïté | MINEUR | MINEUR | MINEUR | Set<number> vs ring buffer pour cache FIFO |
| E-09 | Couverture | MINEUR | MINEUR | MINEUR | position_in_queue non exploité |
| E-10 | Architecture | MINEUR | MINEUR | MINEUR | Flux lecture tsa_token_ref SecureStore→ExpertPanel absent |
| E-11 | Complétude types | MINEUR | MINEUR | MINEUR | tsa_timestamp non typé dans seal-types |
| E-12 | Ambiguïté | MINEUR | MINEUR | MINEUR | degradation_flag inconnu : choix silencieux vs toast non tranché |
| E-13 | Tâche manquante | MINEUR | MINEUR | MINEUR | mode_expert préférence : tâche hors contrat |
Écarts P2 supplémentaires non retenus : - kSecAttrAccessibleWhenUnlockedThisDeviceOnly déjà couvert dans Plan §7 ligne 1. - merkle_root, blockchain_tx_hash, proof_url : plan §3 INV-284-11 confirme stockage Zustand state. Exploitation dans C10 ExpertPanel via EXPERT_FIELDS_BY_STATE. - FAILED_TIMEOUT traitement visuel : couvert par E-02 (mapping manquant).
Scoring v1¶
| Critère | Score | Justification |
|---|---|---|
| feasibility | 7.0 | E-01 impasse contractuelle si HT-03 invalidée (-1.5), E-05 cadrage technique absent (-0.5) |
| completeness | 7.0 | E-03/E-09/E-11 champs spec non couverts (-1.0), E-04 purgeStale (-0.5), E-13 mode_expert (-0.5) |
| coherence | 7.5 | E-02 mapping 7→5 (-1.0), E-08 Set/ring buffer (-0.25), E-10 flux tsa_token_ref (-0.25) |
| traceability | 8.0 | Mappings INV→CA→mécanisme→TC complets et corrects. E-07 hypothèse documentée (-0.5 atténuée par R-03) |
| Moyenne | 7.38 |
Verdict préliminaire¶
Moyenne 7.38 < 8.0 : 3 critères sous 8.0 (feasibility 7.0, completeness 7.0, coherence 7.5).
→ NON_CONFORME — 7 écarts MAJEUR à corriger.
Corrections requises (v2)¶
- E-01 : Ajouter clause contractuelle d'échappement dans le code contract
seal-sse-client: si HT-03 invalidée, lib nativereact-native-sseautorisée sous condition de wrapping fetch-compatible. - E-02 : Ajouter table de mapping explicite : RECEIVED/QUEUED_PRIORITY → Capture, TSA_PENDING → TSA, TSA_SEALED → TSA (complétée), ANCHOR_PENDING → Merkle, SEALED → Scellé, FAILED_TIMEOUT → overlay erreur sur étape courante.
- E-03 : Ajouter
failure_reasondans types C1, affichage dans C9 (message terminal) et C10 (mode expert). - E-04 : Ajouter
purgeStale()dans C12 et l'appeler au démarrage detriggerUrgentSeal()dans C7. - E-05 : Ajouter section §13 "Contraintes techniques" : PD-80 statut (dépendance STUB/TODO), framework Jest + RNTL, config ESM.
- E-06 : Ajouter test proxy CI pour CA-284-14 : vérifier nombre de re-renders <= N par événement SSE, via
jest.fn()wrapper sur les sélecteurs Zustand. - E-07 : Formaliser hypothèse H-284-07 : "PD-80 est idempotent sur POST /seals/urgent". Documenter comme hypothèse critique avec test de vérification à exécuter lors de l'intégration.
- E-08 : Retirer la mention
Set<number>du §4, uniformiser sur ring buffer (tableau circulaire). - E-09 : Ajouter
position_in_queuedans types C1, affichage dans C9 en état QUEUED_PRIORITY. - E-10 : Ajouter interface
getSensitiveArtifact(sealId, key)dans C12, documenter le flux lecture transitoire pour C10. - E-11 : Ajouter
tsa_timestampdans les interfaces C1 (SealEvent/ExpertFields). - E-12 : Trancher explicitement : flag inconnu = trace silencieuse (pas toast). Justification : ce n'est pas une erreur contrôlée §3 mais un cas conservateur.
- E-13 : Ajouter tâche explicite dans C10 ou un C16 minimal : création champ
mode_expert: booleandans store settings.