Aller au contenu

PD-281 — Scénarios de tests contractuels

1. Références

  • Spécification : PD-281-specification.md
  • Epic : EPIC-XX

2. Matrice de couverture

ID Invariant ID Critère ID Test Couverture Commentaire
INV-281-01-discrimination CA-03 TC-NOM-01, TC-NOM-02, TC-NOM-03 Oui Vérifie inclusion status/mapping explicite et exclusion sinon.
INV-281-02-exclusion-classification CA-03, CA-05 TC-NOM-04 Oui Vérifie la liste contractuelle des exclusions explicites.
INV-281-03-completude-types-z CA-02, CA-08 TC-NOM-05, TC-NOM-06, TC-NOM-07 Oui (conditionnel pour DepositStatus) Couvre présence/valeurs exactes + règle conditionnelle DepositStatus.
INV-281-04-non-regression-anchor-entity CA-06 TC-NOM-10, TC-NR-01 Oui Contrôle stricte non-régression hors scope Anchor enum.
INV-281-05-idempotence CA-07 TC-NOM-09, TC-ERR-07 Oui Deux runs identiques => mêmes verdicts/artefacts fonctionnels.
INV-281-06-resultat-global CA-01, CA-04 TC-NOM-08 Oui verify-norm.sh SUCCESS + AUDIT-SYNTHESIS.md = 9/9 PASS.
INV-281-07-modele-etats-lint TC-NOM-11 Oui (portée) Vérifie que PD-281 n’introduit pas de validation de transitions métier.
INV-281-08-responsabilite-doc-only TC-NOM-12, TC-NR-03 Oui Vérifie périmètre de modification limité à ProbatioVault-doc.
CA-01 TC-NOM-08 Oui Critère global pipeline.
CA-02 TC-NOM-05, TC-NOM-06, TC-NOM-07 Oui Types Z requis et valeurs exactes.
CA-03 TC-NOM-01, TC-NOM-03, TC-NOM-04 Oui Fin des faux positifs non-status non mappés.
CA-04 TC-NOM-08 Oui Vérification explicite dans audit.
CA-05 TC-NOM-04 Oui Contrôle textuel anchored.enum_states des configs générées.
CA-06 TC-NOM-10, TC-NR-01, TC-NR-02 Oui Contrôles existants hors scope inchangés.
CA-07 TC-NOM-09 Oui Idempotence génération + vérification.
CA-08 TC-NOM-06, TC-NOM-07 Oui (précondition de vérité nécessaire) Couvre les deux branches de la règle conditionnelle.

3. Scénarios de test – Flux nominaux

TEST-ID: TC-NOM-01
Référence spec: INV-281-01, CA-03, §5.2

GIVEN
  - Jeu de faits conforme §5.1 contenant (entity_name=anchor_batch_event, column_name=event_type)
  - Aucune entrée de mapping explicite correspondante dans _z_enum_type_mappings
WHEN
  - La génération Z-lint est exécutée
THEN
  - Aucun Anchor enum check n’est produit pour ce couple
AND
  - Aucune entrée anchored.enum_states ne référence anchor_batch_event.event_type
TEST-ID: TC-NOM-02
Référence spec: INV-281-01, §5.2

GIVEN
  - Jeu de faits conforme §5.1 contenant (entity_name=anchor_batch, column_name=status)
WHEN
  - La génération Z-lint est exécutée
THEN
  - Un Anchor enum check est produit pour l’état d’ancrage de l’entité (anchor_batch_state ou mapping explicite)
AND
  - Le check est présent dans _generated-z-lint.yaml de la norme concernée
TEST-ID: TC-NOM-03
Référence spec: INV-281-01, CA-03, §5.2

GIVEN
  - Jeu de faits conforme §5.1 avec une colonne non-status
  - Mapping explicite présent dans _z_enum_type_mappings pour ce couple (entity_name, column_name)
WHEN
  - La génération Z-lint est exécutée
THEN
  - Un Anchor enum check est produit pour ce couple mappé explicitement
AND
  - Le check est traçable à la clé de mapping utilisée
TEST-ID: TC-NOM-04
Référence spec: INV-281-02, CA-03, CA-05, §5.2

GIVEN
  - Jeu de faits conforme §5.1 incluant les couples:
    - anchor_batch_event.event_type
    - key_envelope.envelope_type
    - legal_access_event.event_type
    - legal_mandate.validation_status
    - deposit.document_category
WHEN
  - La génération Z-lint est exécutée
THEN
  - Aucun Anchor enum check n’est généré pour chacun des 5 couples
AND
  - Les sections anchored.enum_states des _generated-z-lint.yaml n’incluent aucun de ces couples
TEST-ID: TC-NOM-05
Référence spec: INV-281-03, CA-02, §5.3

GIVEN
  - Les fichiers cibles .zed existent et sont accessibles:
    - RFC_3161.zed
    - NF_Z42_013.zed
    - ISO_14641.zed
    - PV_PRE.zed
WHEN
  - Les types Z et leurs valeurs sont vérifiés
THEN
  - TimestampBatchStatus existe dans RFC_3161.zed avec exactement:
    OPEN, SEALED, TIMESTAMPED, FAILED
  - AnchorBatchStatus existe dans NF_Z42_013.zed avec exactement:
    PENDING, BUILDING, SUBMITTED, PENDING_FINALITY, FINALIZED, FAILED
  - AnchorBatchStatus existe dans ISO_14641.zed avec exactement:
    PENDING, BUILDING, SUBMITTED, PENDING_FINALITY, FINALIZED, FAILED
  - LegalReKeyStatus existe dans PV_PRE.zed avec exactement:
    ACTIVE, REVOKED, EXPIRED, COMPLETED, DESTROYED
AND
  - Aucun écart de nom, casse, cardinalité ou valeur n’est observé
TEST-ID: TC-NOM-06
Référence spec: INV-281-03, CA-08, §5.3 (règle conditionnelle)

GIVEN
  - La source de vérité atteste l’existence de deposit.status comme colonne lifecycle
WHEN
  - Les types Z obligatoires sont vérifiés
THEN
  - DepositStatus est présent dans NF_Z42_013.zed
  - DepositStatus est présent dans ISO_14641.zed
AND
  - L’absence de DepositStatus dans l’un des deux fichiers entraîne non-conformité
TEST-ID: TC-NOM-07
Référence spec: INV-281-03, CA-08, §5.3 (règle conditionnelle)

GIVEN
  - La source de vérité atteste l’absence de deposit.status
WHEN
  - Les exigences de types Z de la story sont vérifiées
THEN
  - DepositStatus n’est pas exigé par le verdict PD-281
AND
  - Aucun échec n’est déclaré pour “DepositStatus manquant”
TEST-ID: TC-NOM-08
Référence spec: INV-281-06, CA-01, CA-04, §5.4

GIVEN
  - Artefacts régénérés et environnement de run stable
WHEN
  - verify-norm.sh est exécuté sur les 9 normes cibles
THEN
  - Le statut global est SUCCESS
  - Le nombre d’échecs Z-lint est 0
AND
  - AUDIT-SYNTHESIS.md affiche exactement “Z-lint 9/9 PASS”
TEST-ID: TC-NOM-09
Référence spec: INV-281-05, CA-07, §5.2, §5.4

GIVEN
  - Entrées identiques (faits extraits, mappings, .zed, scripts) entre deux exécutions
WHEN
  - Génération + vérification sont exécutées deux fois consécutivement
THEN
  - Le verdict global est identique entre run #1 et run #2
  - Le statut Z-lint est identique entre run #1 et run #2
AND
  - Les artefacts fonctionnels produits sont équivalents (aucune divergence de fond)
TEST-ID: TC-NOM-10
Référence spec: INV-281-04, CA-06

GIVEN
  - Un baseline de référence des checks Anchor entity et contrôles non ciblés
WHEN
  - Les artefacts PD-281 sont régénérés
THEN
  - Les checks Anchor entity restent inchangés
AND
  - Aucun contrôle hors scope Anchor enum n’est modifié
TEST-ID: TC-NOM-11
Référence spec: INV-281-07, §5.5

GIVEN
  - Le périmètre PD-281 est appliqué tel que spécifié
WHEN
  - Les artefacts de lint et de vérification sont inspectés
THEN
  - Aucune règle de transitions métier internes d’enum n’est introduite par PD-281
AND
  - Les vérifications portent uniquement sur ancrage/présence de types Z
TEST-ID: TC-NOM-12
Référence spec: INV-281-08

GIVEN
  - Un diff complet des changements de la story
WHEN
  - Les chemins modifiés sont vérifiés
THEN
  - Tous les changements sont limités au projet ProbatioVault-doc (scripts, .zed, configs générées, docs)
AND
  - Aucune modification d’entité TypeORM backend n’est présente

4. Scénarios de test – Cas d’erreur

TEST-ID: TC-ERR-01
Référence spec: ERR-281-01, §5.1

GIVEN
  - Une entrée non conforme aux formats contractuels §5.1 (regex, longueur, casse, extension, etc.)
WHEN
  - La vérification lint est exécutée
THEN
  - Le contrôle échoue en FAIL lint
  - La cause explicite est tracée avec le champ invalide
AND
  - Aucun verdict SUCCESS n’est possible tant que l’entrée invalide persiste
TEST-ID: TC-ERR-02
Référence spec: ERR-281-02, INV-281-02

GIVEN
  - Une configuration générée contenant un Anchor enum check pour une colonne non-status non mappée
WHEN
  - Le contrôle de conformité PD-281 est exécuté
THEN
  - Le résultat est non-conformité majeure (faux positif)
AND
  - La story est refusée
TEST-ID: TC-ERR-03
Référence spec: ERR-281-03, INV-281-03

GIVEN
  - Une colonne status requérant un type Z
  - Le type Z attendu absent du .zed cible
WHEN
  - verify-norm.sh est exécuté
THEN
  - La vérification échoue
  - Le motif “type Z manquant” est explicite
AND
  - Le verdict de story est non accepté
TEST-ID: TC-ERR-04
Référence spec: ERR-281-04, CA-01

GIVEN
  - Exécution complète sur les 9 normes
WHEN
  - verify-norm.sh retourne un statut différent de SUCCESS
THEN
  - La story est non acceptée
AND
  - Le rapport indique l’échec global de pipeline
TEST-ID: TC-ERR-05
Référence spec: ERR-281-05, CA-04

GIVEN
  - verify-norm.sh exécuté
WHEN
  - AUDIT-SYNTHESIS.md n’affiche pas “Z-lint 9/9 PASS”
THEN
  - La story est non acceptée
AND
  - Le motif de non-conformité est la divergence d’observable audit
TEST-ID: TC-ERR-06
Référence spec: ERR-281-06, INV-281-04, CA-06

GIVEN
  - Un baseline de checks Anchor entity avant PD-281
WHEN
  - Une divergence Anchor entity est détectée après PD-281
THEN
  - La story est non acceptée
AND
  - La régression hors scope est catégorisée bloquante
TEST-ID: TC-ERR-07
Référence spec: ERR-281-07, INV-281-05, CA-07

GIVEN
  - Deux runs successifs à entrées identiques
WHEN
  - Le verdict global ou l’état Z-lint diffère entre les runs
THEN
  - La story est non acceptée
AND
  - Le défaut est classé non-idempotence pipeline

5. Tests d’invariants (non négociables)

Invariant Test(s) dédiés Observable Commentaire
INV-281-01-discrimination TC-NOM-01, TC-NOM-02, TC-NOM-03 Présence/absence de checks Anchor enum selon status/mapping Couvre les deux branches et le cas mapping explicite.
INV-281-02-exclusion-classification TC-NOM-04, TC-ERR-02 Aucune occurrence des 5 couples exclus dans anchored.enum_states Zéro faux positif autorisé.
INV-281-03-completude-types-z TC-NOM-05, TC-NOM-06, TC-NOM-07, TC-ERR-03 Types Z présents avec valeurs exactes, règle DepositStatus conforme Conditionnel testable via deux préconditions explicites.
INV-281-04-non-regression-anchor-entity TC-NOM-10, TC-ERR-06 Diff avant/après inchangé sur Anchor entity Non-régression stricte.
INV-281-05-idempotence TC-NOM-09, TC-ERR-07 Même verdict et même statut Z-lint sur deux runs identiques Déterminisme exigé.
INV-281-06-resultat-global TC-NOM-08, TC-ERR-04, TC-ERR-05 SUCCESS + 9/9 PASS Double observable (commande + audit).
INV-281-07-modele-etats-lint TC-NOM-11 Absence de règles de transitions métier dans le périmètre PD-281 Vérification de portée contractuelle.
INV-281-08-responsabilite-doc-only TC-NOM-12 Chemins modifiés limités à ProbatioVault-doc Contrôle de périmètre technique imposé.

6. Tests de non-régression

Test ID Objet Observable Commentaire
TC-NR-01 Anchor entity inchangé Comparatif avant/après des checks Anchor entity strictement identique Bloquant si divergence.
TC-NR-02 Contrôles non ciblés inchangés Aucun changement des règles hors scope Anchor enum Garantit isolation de la correction.
TC-NR-03 Périmètre de modification doc-only Diff de fichiers limité à ProbatioVault-doc Empêche impact backend/infra hors périmètre.
TC-NR-04 Idempotence exécutions Run #1 == Run #2 sur verdicts et statuts Z-lint Fiabilité de pipeline.

7. Tests négatifs et adversariaux

Test ID Entrée invalide / abus Résultat attendu Observable
TC-NEG-01 entity_name non conforme regex (AnchorBatch, 1batch, longueur > 64) FAIL lint avec cause explicite Message d’erreur ciblant entity_name.
TC-NEG-02 column_name non conforme (Status, status-1, longueur > 64) FAIL lint avec cause explicite Message d’erreur ciblant column_name.
TC-NEG-03 enum_value non conforme (open, _OPEN, longueur > 64) FAIL lint avec cause explicite Message d’erreur ciblant enum_value.
TC-NEG-04 z_type_name non conforme (timestampBatchStatus, TS, caractères non autorisés) FAIL lint avec cause explicite Message d’erreur ciblant z_type_name.
TC-NEG-05 norm_id hors ensemble fermé (iso-99999) FAIL lint Rejet explicite “norm_id hors cible”.
TC-NEG-06 zed_file_path sans extension .zed ou avec espaces de tête/fin FAIL lint Rejet explicite du chemin invalide.
TC-NEG-07 generated_config_path sans suffixe _generated-z-lint.yaml FAIL lint Rejet explicite du chemin invalide.
TC-NEG-08 Injection d’un faux positif manuel dans anchored.enum_states pour event_type Non-conformité majeure Détection lors contrôle CA-03/CA-05.
TC-NEG-09 Suppression d’une valeur enum requise dans un type Z Échec vérification type Z Motif “valeurs exactes non respectées”.
TC-NEG-10 Exécution sur environnement non stable entre run #1 et #2 (entrées altérées) Test invalide (précondition non respectée) Journal de préconditions non satisfaites.

8. Observabilité requise pour les tests

  • État système : snapshot des artefacts avant/après (_generated-z-lint.yaml, .zed, AUDIT-SYNTHESIS.md) avec horodatage de run.
  • Réponse API : non applicable (périmètre documentaire/scripts locaux).
  • Journal d’audit : sortie complète de verify-norm.sh, motifs FAIL explicites, statut par norme.
  • Événement signé / horodaté : horodatage des runs et identifiant de pipeline/commit pour preuve de reproductibilité.
  • Export probatoire : paquet de preuves contenant résultats de run, extraits des configs générées, extraits .zed, et matrice de couverture remplie.

9. Règles non testables

Règle Raison Impact
Référence épique exacte Spécification indique “A clarifier (reference epique non fournie)”; absence d’identifiant officiel vérifiable Mineur
Validation CA-08 en environnement réel unique La branche à appliquer dépend d’une source de vérité deposit.status explicitement “à confirmer” Majeur
“Liste définitive des 9 normes (noms exacts)” La cardinalité est testable (9), mais les noms exacts ne sont pas fournis dans l’entrée Majeur

10. Verdict QA

  • ⚠️ Testable partiellement (avec réserves listées)

Motif:

  • Le corpus est largement testable et automatisable (invariants, CAs, erreurs, non-régression, adversarial).
  • Les réserves bloquantes pour une validation intégrale concernent uniquement les éléments explicitement non fournis/à confirmer (source de vérité deposit.status, liste nominale exacte des 9 normes, référence épique exacte).