| Non-conformité Spec | Spec §5.3, §6 / Plan §2.1 (étape 5), §4 (CA-279-04), §6 | La garde legal_lock=true est contractuellement définie en HTTP 409, alors que le plan impose HTTP 423. | Rupture de contrat API et non-conformité directe aux cas d’erreur spécifiés. | BLOQUANT |
| Non-conformité Spec | Spec §5.5 (routes protégées), INV-279-10 / Plan §2.3, §11 | Le plan décrit une exclusion implicite à l’inclusion batch via filtre d’éligibilité (status=EXPIRED) sans preuve d’un rejet explicite 409 à l’inclusion POST /destruction/batches. | Risque de contournement fonctionnel et non-respect de l’exigence de rejet explicite/auditable à l’inclusion. | BLOQUANT |
| Test irréalisable | Document de tests fourni / Exigence axe 3 (TC-* observables) / Plan §5 | Le document de tests fourni ne contient pas les scénarios TC-* exécutables et points d’observabilité détaillés; il contient surtout des traces d’outillage et une affirmation de couverture. | Audit externe non reproductible; impossibilité de vérifier la réalisabilité contractuelle des tests. | BLOQUANT |
| Couverture manquante | Invariant INV-279-11 (Spec §4) / Plan §3, §4 | L’invariant contractuel d’idempotence (INV-279-11) n’est pas mappé comme tel dans la matrice d’invariants; il est déplacé vers un critère ajouté (CA-279-13) hors canon. | Perte de traçabilité invariant→mécanisme et fragilité en gate contractuel. | MAJEUR |
| Non-conformité Spec | Spec §4 (INV-279-11), §7 / Plan §3 (INV-279-11 renommé, INV-279-12 ajouté) | Le plan renumérote/redéfinit les invariants (INV-279-11 devient destruction checkpoint, INV-279-12 est ajouté) par rapport au corpus canonique. | Dérive contractuelle et ambiguïté d’audit sur les obligations non négociables. | MAJEUR |
| Hypothèse implicite | Spec §3, §4 (INV-279-04), §5.1 / Plan §3 (INV-279-04), §2.4 | Le plan substitue lifecycle_log par integrity_journal_entries sans formaliser l’équivalence contractuelle des deux artefacts. | Ambiguïté de preuve de traçabilité; risque de rejet d’audit tiers. | MAJEUR |
| Non-conformité Spec | Spec §2 (Inclus/Exclu), §5.7 / Plan §8 (HT-279-02), §9 (V3), Code contracts migration-ddl | Le plan introduit l’ajout de colonne geo_copy_count dans la migration PD-279 alors que la stratégie DDL canonique ne liste que RESTITUTED, restituted_at, restitution_deadline. | Extension de périmètre technique non contractualisée, avec impact schéma et dépendance amont implicite. | MAJEUR |
| Code Contract — Invariant | Code contracts state-machine-extension, tests / Spec §4 | Les code contracts incluent des invariants non issus du set canonique (ex. INV-279-12) et des contraintes de test non contractuelles comme invariants (couverture >= 80%). | Non-respect de la règle “invariants du code contract ⊆ invariants spec”; dérive normative. | MAJEUR |
| Code Contract — Complétude | Spec §5.5 (DELETE /documents/:id) / Plan §2.3, §11 / Code contracts destruction-guard-extension | Le périmètre DELETE est présent dans le plan mais absent des fichiers/interfaces couverts dans les code contracts de garde destruction. | Zone fonctionnelle sans contrat de code explicite, traçabilité incomplète. | MAJEUR |
| Contrainte technique non documentée | Exigence §7 (contraintes techniques) / Plan global | Absence d’un inventaire explicite des dépendances inter-PD avec statut formalisé DONE/TODO/STUB. | Visibilité de dépendances incomplète pour gouvernance et planification d’exécution. | MINEUR |
| Contrainte technique non documentée | Exigence §7 (framework test) / Plan §12 | Le choix explicite Jest ou Vitest n’est pas déclaré de façon normative. | Ambiguïté de runner de test pour exécution contractuelle reproductible. | MINEUR |
| Contrainte technique non documentée | Exigence §7 (compat ESM/CJS) / Plan global | Aucune documentation de compatibilité ESM-only/CJS ni adaptation du runner. | Risque d’échec pipeline/tests lié au chargement modules non anticipé. | MAJEUR |
| Contrainte technique non documentée | Exigence §7 (variables CI) / Plan global | Variables CI requises pour intégration (ex. DATABASE_URL, CI=true) non documentées. | Reproductibilité CI incomplète et exécution d’intégration non garantie. | MINEUR |
| ## 3. Synthèse | | | | |
| - Nombre d’écarts par gravité : BLOQUANT=3, MAJEUR=7, MINEUR=3 | | | | |
| - Points critiques : | | | | |
- Non-conformité HTTP contractuelle (legal_lock: 423 vs 409). | | | | |
| - Contrôle destruction à l’inclusion batch non démontré en rejet explicite 409. | | | | |
| - Artefact de tests fourni non auditable/rejouable pour validation contractuelle. | | | | |
| ## 4. Verdict de la revue | | | | |
| - Statut : ⛔ Rejeté | | | | |
| - Motif synthétique : Le plan présente des écarts contractuels directs (codes HTTP, contrôle cross-module), une traçabilité invariants/codes contracts non canonique, et un artefact de tests non exploitable pour audit tiers. | | | | |