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).