PD-281 — Scenarios de tests contractuels
1. References
- Specification : PD-281-specification.md
- Epic : EPIC-XX
2. Matrice de couverture
| ID Invariant | ID Critere | ID Test | Couverture | Commentaire |
| INV-281-01-discrimination | CA-03 | TC-NOM-01 | Oui | Seuls status et mappings explicites declenchent Anchor enum. |
| INV-281-02-exclusion-classification | CA-03 | TC-NOM-02 | Oui | Les colonnes de classification explicites restent exclues. |
| INV-281-03-completude-types-z | CA-02 | TC-NOM-03 | Oui | Les 4 types Z obligatoires existent avec valeurs exactes. |
| INV-281-03-completude-types-z | CA-08 | TC-NOM-04 | Oui | Branche conditionnelle: deposit.status present => DepositStatus requis. |
| INV-281-03-completude-types-z | CA-08 | TC-NOM-05 | Oui | Branche inverse: deposit.status absent => DepositStatus non exige. |
| INV-281-04-non-regression-anchor-entity | CA-06 | TC-NOM-08 | Oui | Les checks Anchor entity restent strictement inchanges. |
| INV-281-05-idempotence | CA-07 | TC-NOM-07 | Oui | Deux runs identiques donnent memes resultats observables. |
| INV-281-06-resultat-global | CA-01 | TC-NOM-06 | Oui | verify-norm.sh en SUCCESS avec 0 echec Z-lint. |
| INV-281-06-resultat-global | CA-04 | TC-NOM-06 | Oui | AUDIT-SYNTHESIS.md affiche 9/9 PASS. |
| INV-281-06-resultat-global | CA-05 | TC-NOM-06 | Oui | Les _generated-z-lint.yaml ne contiennent plus de faux positifs cibles. |
| INV-281-07-modele-etats-lint | N/A | TC-INV-07 | Oui | Verifie absence d'exigence de transitions metier dans le scope QA. |
| INV-281-08-responsabilite-doc-only | N/A | TC-INV-08 | Oui | Les modifications restent dans le perimetre ProbatioVault-doc documentaire. |
3. Scenarios de test - Flux nominaux
TEST-ID: TC-NOM-01
Reference spec: INV-281-01, CA-03
GIVEN
- Jeu de faits valide (§5.1) contenant:
- `anchor_batch.status`
- `anchor_batch_event.event_type`
- `key_envelope.envelope_type`
- Mapping `_z_enum_type_mappings` connu et stable pour le run
WHEN
- Generation des `_generated-z-lint.yaml`
THEN
- Un check Anchor enum existe pour `anchor_batch.status` (ou son mapping explicite)
- Aucun check Anchor enum n'existe pour les colonnes non `status` non mappees
AND
- Le resultat est tracable dans les sections `anchored.enum_states`
TEST-ID: TC-NOM-02
Reference spec: INV-281-02, CA-03, CA-05
GIVEN
- Jeu de faits valide incluant les 5 exclusions contractuelles:
- `anchor_batch_event.event_type`
- `key_envelope.envelope_type`
- `legal_access_event.event_type`
- `legal_mandate.validation_status`
- `deposit.document_category`
WHEN
- Generation des `_generated-z-lint.yaml`
THEN
- Aucun de ces 5 couples n'apparait dans `anchored.enum_states`
AND
- Le controle est strict (0 occurrence, non approxime)
TEST-ID: TC-NOM-03
Reference spec: INV-281-03, CA-02
GIVEN
- Les fichiers cibles existent:
- `RFC_3161.zed`
- `NF_Z42_013.zed`
- `ISO_14641.zed`
- `PV_PRE.zed`
WHEN
- Verification statique des types et valeurs enum
THEN
- `TimestampBatchStatus` existe dans `RFC_3161.zed` avec EXACTEMENT `OPEN`,`SEALED`,`TIMESTAMPED`,`FAILED`
- `AnchorBatchStatus` existe dans `NF_Z42_013.zed` et `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
- Aucune valeur manquante, extra, ou differemment cased
TEST-ID: TC-NOM-04
Reference spec: INV-281-03, CA-08 (branche conditionnelle vraie)
GIVEN
- La source de verite confirme `deposit.status` present (preuve versionnee)
WHEN
- Verification des types Z dans `NF_Z42_013.zed` et `ISO_14641.zed`
THEN
- `DepositStatus` est present dans les 2 fichiers
AND
- L'absence dans l'un des deux entraine un verdict de non-conformite
TEST-ID: TC-NOM-05
Reference spec: INV-281-03, CA-08 (branche conditionnelle fausse)
GIVEN
- La source de verite confirme `deposit.status` absent (preuve versionnee)
WHEN
- Verification des exigences de la story PD-281
THEN
- Aucune exigence `DepositStatus` n'est appliquee
AND
- L'absence de `DepositStatus` ne peut pas etre classee en non-conformite PD-281
TEST-ID: TC-NOM-06
Reference spec: INV-281-06, CA-01, CA-04, CA-05
GIVEN
- Artefacts regeneres depuis une entree valide et stable
WHEN
- Execution de `verify-norm.sh` sur le lot des 9 normes cibles
THEN
- Le statut global est `SUCCESS`
- Le nombre d'echecs Z-lint est 0
- `AUDIT-SYNTHESIS.md` affiche `9/9 PASS` pour Z-lint
AND
- Les `_generated-z-lint.yaml` ne contiennent plus les faux positifs identifies
TEST-ID: TC-NOM-07
Reference spec: INV-281-05, CA-07
GIVEN
- Meme commit, meme entree, meme environnement d'execution
WHEN
- Generation + verification executees 2 fois consecutivement
THEN
- Meme verdict global entre run#1 et run#2
- Meme statut Z-lint (`9/9 PASS` attendu)
AND
- Meme contenu fonctionnel des artefacts (diff vide ou equivalence canonique definie)
TEST-ID: TC-NOM-08
Reference spec: INV-281-04, CA-06
GIVEN
- Baseline pre-PD-281 des checks Anchor entity et controles non cibles
WHEN
- Regeneration post-PD-281 puis comparaison baseline/post
THEN
- Les checks Anchor entity sont strictement identiques
- Les controles hors scope Anchor enum restent inchanges
AND
- Toute derive est classee non-conformite de non-regression
4. Scenarios de test - Cas d'erreur
TEST-ID: TC-ERR-01
Reference spec: ERR-281-01, §5.1
GIVEN
- Au moins une donnee invalide de §5.1 (regex/longueur/format)
WHEN
- Generation ou verification est lancee
THEN
- Verdict `FAIL lint`
- Cause explicite tracee avec la donnee en erreur
- Aucun verdict de conformite ne peut etre prononce
TEST-ID: TC-ERR-02
Reference spec: ERR-281-02
GIVEN
- Une colonne non-`status`, non mappee, apparait dans un Anchor enum check genere
WHEN
- Controle de conformite Z-lint est evalue
THEN
- Classement en non-conformite majeure (faux positif)
- Story refusee
- Cause rattachee a la regle de discrimination
TEST-ID: TC-ERR-03
Reference spec: ERR-281-03
GIVEN
- Un type Z requis par §5.3 est absent de son fichier `.zed`
WHEN
- `verify-norm.sh` est execute
THEN
- Echec de verification
- Motif explicite `type Z manquant`
- Story non acceptee
TEST-ID: TC-ERR-04
Reference spec: ERR-281-04
GIVEN
- Run complet effectue
WHEN
- Le statut final de `verify-norm.sh` est different de `SUCCESS`
THEN
- Story non acceptee
- Le resultat est marque non conforme sans interpretation manuelle
TEST-ID: TC-ERR-05
Reference spec: ERR-281-05
GIVEN
- Run complet effectue
WHEN
- `AUDIT-SYNTHESIS.md` n'affiche pas exactement `9/9 PASS` pour Z-lint
THEN
- Story non acceptee
- Ecart de reporting trace comme bloquant
TEST-ID: TC-ERR-06
Reference spec: ERR-281-06
GIVEN
- Comparaison baseline/post des checks Anchor entity
WHEN
- Une difference est detectee hors scope
THEN
- Story non acceptee
- Ecart qualifie en regression
TEST-ID: TC-ERR-07
Reference spec: ERR-281-07
GIVEN
- Deux runs consecutifs a entree identique
WHEN
- Les verdicts ou artefacts divergent
THEN
- Story non acceptee
- Ecart qualifie non-idempotent
5. Tests d'invariants (non negociables)
| Invariant | Test(s) dedies | Observable | Commentaire |
| INV-281-01-discrimination | TC-NOM-01, TC-ERR-02 | Presence check uniquement pour status/mapping explicite | Elimine faux positifs structurels. |
| INV-281-02-exclusion-classification | TC-NOM-02 | 0 occurrence des 5 exclusions dans anchored.enum_states | Exclusion stricte et non-regressive. |
| INV-281-03-completude-types-z | TC-NOM-03, TC-NOM-04, TC-NOM-05, TC-ERR-03 | Types/valeurs exacts et branche conditionnelle respectee | Couvre completude + condition DepositStatus. |
| INV-281-04-non-regression-anchor-entity | TC-NOM-08, TC-ERR-06 | Diff baseline/post strictement nul sur Anchor entity | Protection des controles existants. |
| INV-281-05-idempotence | TC-NOM-07, TC-ERR-07 | Verdict et artefacts fonctionnels stables sur 2 runs | Determinisme du pipeline. |
| INV-281-06-resultat-global | TC-NOM-06, TC-ERR-04, TC-ERR-05 | SUCCESS, 0 echec Z-lint, 9/9 PASS | Objectif contractuel principal. |
| INV-281-07-modele-etats-lint | TC-INV-07 | Aucune exigence de transition metier dans le verdict PD-281 | Scope de controle borne a l'ancrage/types. |
| INV-281-08-responsabilite-doc-only | TC-INV-08 | Modifs limitees aux artefacts documentaires ProbatioVault-doc | Respect du perimetre technique impose. |
TEST-ID: TC-INV-07
Reference spec: INV-281-07
GIVEN
- Dossier de preuve PD-281 constitue
WHEN
- Revue des controles appliques pour la story
THEN
- Aucun test n'exige de transitions metier entre valeurs enum
AND
- Toute tentative d'ajout de contrainte de transition est classee hors perimetre PD-281
TEST-ID: TC-INV-08
Reference spec: INV-281-08
GIVEN
- Liste des fichiers modifies par le changement PD-281
WHEN
- Verification du perimetre des modifications
THEN
- Seuls scripts/configs `.zed`/YAML/MD du perimetre documentaire cible sont modifies
AND
- Aucune modification de code backend TypeORM n'est incluse
6. Tests de non-regression
| Test ID | Objet | Observable | Commentaire |
| TC-NR-01 | Exclusions explicites historiques | Les 5 couples exclus restent absents apres regeneration | Evite retour des faux positifs connus. |
| TC-NR-02 | Check Anchor entity | Sortie Anchor entity strictement identique baseline/post | Garantit orthogonalite Anchor entity vs Anchor enum. |
| TC-NR-03 | Normes non cibles par l'ajustement enum | Aucun ecart inattendu sur controles hors scope Anchor enum | Controle de stabilite transverse. |
7. Tests negatifs et adversariaux
| Test ID | Entree invalide / abus | Resultat attendu | Observable |
| TC-NEG-01 | entity_name invalide (9bad_name, taille >64) | FAIL lint immediat | Cause explicite sur format §5.1. |
| TC-NEG-02 | column_name invalide (Status, status-1) | FAIL lint immediat | Rejet regex/case §5.1. |
| TC-NEG-03 | enum_value invalide (open, A-B) | FAIL lint immediat | Rejet jeu de caracteres/case. |
| TC-NEG-04 | zed_file_path sans suffixe .zed | FAIL lint immediat | Rejet contrainte chemin. |
| TC-NEG-05 | generated_config_path sans suffixe _generated-z-lint.yaml | FAIL lint immediat | Rejet contrainte chemin genere. |
| TC-NEG-06 | norm_id hors ensemble ferme | FAIL lint immediat | Rejet de scope de run. |
| TC-NEG-07 | Colonne de classification injectee comme faux status logique | Non-conformite majeure si check enum produit | Detection faux positif structurel. |
8. Observabilite requise pour les tests
- Etat systeme : contenu des
.zed, _generated-z-lint.yaml, et AUDIT-SYNTHESIS.md avant/apres run. - Reponse API : NON APPLICABLE sur ce perimetre documentaire; observable remplace par statuts de commandes (
SUCCESS/FAIL). - Journal d'audit : traces d'execution de
verify-norm.sh avec motifs explicites en cas d'echec. - Evenement signe / horodate : NON APPLICABLE; horodatage des runs et artefacts versionnes requis pour rejouabilite.
- Export probatoire : dossier de preuve incluant artefacts generes, diff baseline/post, et resultat du double run idempotence.
9. Regles non testables
| Regle | Raison | Impact |
Application stricte de CA-08 sur l'etat reel du SI (deposit.status existe/absent) | La specification indique que cette donnee reste a confirmer; sans source de verite figee, le verdict ne peut etre absolument tranche sur un run donne | Majeur |
| Verification exacte de "9 normes cibles" par nom | La liste definitive des 9 normes est signalee "a confirmer" en entree; seule la cardinalite 9 est testable en l'etat | Majeur |
| Evaluation des transitions metier internes des enums | Explicitement hors perimetre PD-281 (INV-281-07) | Mineur |
10. Verdict QA
- ⚠️ Testable partiellement (avec reserves listees)
Reserve principale: le contrat est majoritairement testable de facon deterministe (discrimination, completude, non-regression, resultat global, idempotence), mais le verdict strict sur la branche conditionnelle DepositStatus et sur l'inventaire nominal des 9 normes reste bloque tant que les donnees d'entree marquees "a confirmer" ne sont pas figees.