PD-273 — Confrontation Gate 3 (CONFORMITY_CHECK)¶
Contexte¶
Confrontation des conclusions de la review P1 (Claude) par P2. Documents analysés : PD-273-specification.md, PD-273-tests.md, PD-273-review-step3.md.
Analyse des écarts identifiés par P1¶
Point 1 — Ambiguïtés terminologiques (P1: BLOQUANT)¶
Verdict P2 : FAUX POSITIF — Reclassé MINEUR
La review signale que les "3 checks ciblés" ne sont pas identifiés de manière déterministe. Or le besoin (PD-273-besoin.md) et la spec (section 5 flux F1/F2/F3) identifient nominativement les 3 checks : - check_audit_trigger_update_delete - check_audit_signature_sign - check_destruction_sequence
Ces noms apparaissent dans les flux nominaux, les critères d'acceptation (CA-273-01/02/03) et les scénarios de tests (TC-NOM-273-01/02/03). L'identification est déterministe. La terminologie "checks ciblés" est un raccourci pour ces 3 checks nominatifs — pas une ambiguïté.
Point 2 — Contradiction INV-273-01 vs TC-NOM-273-04 (P1: BLOQUANT)¶
Verdict P2 : PARTIELLEMENT VALIDE — Reclassé MINEUR
Le test TC-NOM-273-04 vérifie "le comptage des checks ciblés en statut OK est exactement 3/3". Combiné avec TC-NOM-273-01/02/03 qui vérifient nominativement chaque check, la couverture est complète. Le TC-NOM-273-04 est un test de cardinalité en complément des tests nominatifs. L'ensemble des 4 tests couvre l'invariant. Pas de contradiction, mais une observation valide sur l'incomplétude du TC-NOM-273-04 pris isolément.
Point 3 — Invariants non testables (INV-273-03/04/05) (P1: BLOQUANT)¶
Verdict P2 : FAUX POSITIF — Reclassé NON APPLICABLE
Les invariants INV-273-03/04/05 utilisent "DOIT être reconnue par l'audit formel". Dans le contexte ProbatioVault, "l'audit formel" = exécution du Prolog pv_audit_compliance.pl. La "reconnaissance" = le check Prolog retourne ok. Ce n'est pas subjectif — c'est un programme déterministe. Les CA-273-01/02/03 et TC-NOM-273-01/02/03 testent exactement cela.
Point 4 — Dépendance baseline H-273-01 (P1: BLOQUANT)¶
Verdict P2 : VALIDE — Confirmé MAJEUR (pas BLOQUANT)
L'hypothèse H-273-01 est effectivement une dépendance. Mais c'est une hypothèse documentée explicitement (section 9) avec son impact. La baseline est vérifiable par exécution du rapport PV-AUDIT-001 avant les modifications. Reclassé MAJEUR car le besoin documente précisément les 3 checks PARTIEL et les 21 OK.
Point 5 — Stack technique non contrainte (P1: MAJEUR)¶
Verdict P2 : FAUX POSITIF
La spec section 10.1 identifie NestJS + TypeORM + PostgreSQL. Les modifications portent sur des fichiers Prolog + Python (extract-facts.py) + éventuellement TypeScript backend. Le périmètre est l'alignement conformité formelle, pas une feature backend classique. La stack est suffisamment contrainte.
Point 6 — Timestamps hors périmètre (P1: MAJEUR)¶
Verdict P2 : FAUX POSITIF
Les "timestamps" mentionnés dans l'observabilité des tests (section 8) sont des métadonnées de traçabilité du rapport d'audit, pas des exigences de performance. Aucune latence ou throughput n'est contractualisé.
Point 7 — Test TC-NOM-273-06 non déterministe (P1: MAJEUR)¶
Verdict P2 : PARTIELLEMENT VALIDE — Confirmé MINEUR
Le test vérifie l'observabilité des transitions. La condition est : exécuter 2 runs successifs et comparer les statuts. C'est déterministe mais nécessite un setup en 2 phases. Acceptable pour un test contractuel GWT.
Point 8 — Export probatoire non spécifié (P1: MAJEUR)¶
Verdict P2 : FAUX POSITIF
L'export probatoire mentionné dans les tests (section 8) décrit les observables nécessaires, pas une exigence d'implémentation. Le rapport Prolog (run_audit.) produit déjà un output structuré.
Point 9 — Contournement ERR-273-03 (P1: MAJEUR)¶
Verdict P2 : FAUX POSITIF
L'INV-273-07 garantit que toute exigence non testable est classée hors périmètre. C'est un garde-fou de robustesse contractuelle, pas un trou de conformité. Le critère est objectif : "vérifiable automatiquement" = testable par Prolog/Jest.
Point 10 — Bornes non testées (P1: MAJEUR)¶
Verdict P2 : FAUX POSITIF
Le TC-NEG-273-02 teste explicitement "Baseline incohérente (!=3 PARTIEL ciblés ou !=21 non ciblés OK)" — c'est exactement la vérification des bornes contractuelles.
Synthèse de la confrontation¶
| # | Écart P1 | Gravité P1 | Verdict P2 | Gravité finale |
|---|---|---|---|---|
| 1 | Ambiguïtés terminologiques | BLOQUANT | FAUX POSITIF | - |
| 2 | Contradiction INV/test | BLOQUANT | PARTIELLEMENT VALIDE | MINEUR |
| 3 | Invariants non testables | BLOQUANT | FAUX POSITIF | - |
| 4 | Dépendance baseline | BLOQUANT | VALIDE | MAJEUR |
| 5 | Stack non contrainte | MAJEUR | FAUX POSITIF | - |
| 6 | Timestamps hors périmètre | MAJEUR | FAUX POSITIF | - |
| 7 | Test non déterministe | MAJEUR | PARTIELLEMENT VALIDE | MINEUR |
| 8 | Export probatoire | MAJEUR | FAUX POSITIF | - |
| 9 | Contournement ERR-273-03 | MAJEUR | FAUX POSITIF | - |
| 10 | Bornes non testées | MAJEUR | FAUX POSITIF | - |
Écarts confirmés : 0 BLOQUANT, 1 MAJEUR, 2 MINEURS Faux positifs : 7/10
Conclusion : La review P1 a surestimé la gravité de plusieurs points en ne prenant pas en compte le contexte ProbatioVault (audit formel = Prolog déterministe). Les 3 checks ciblés sont nominativement identifiés dans la spec. La seule observation substantielle est la dépendance à la baseline (H-273-01), qui est correctement documentée comme hypothèse.