Apparence
A2 — Masquage / archivage de flux
🆕 Évolution proposée — n'existe ni en v1 ni dans la v2 spécifiée
Statut : 🟢 prêt à spécifier. Devient obligatoire si A3bis est retenu (voir plus bas).
En une phrase
Un flux devenu inutile ne peut aujourd'hui que rester visible ou être détruit avec tout son historique de tests. La proposition : pouvoir le retirer de la vue sans l'effacer.
Constat
Le statut « Obsolète » existe déjà — et ne sert à rien. Il affiche un badge gris et permet de filtrer, mais :
- rien n'est masqué par défaut : le flux obsolète continue de figurer dans les écrans et de peser dans le taux d'avancement ;
- pire, il est recopié dans chaque nouvelle campagne : l'activation ne filtre pas sur le statut.
Le seul moyen de le faire réellement disparaître est de le supprimer — ce qui emporte au passage ses étapes, ses anomalies et ses preuves. Autrement dit : on ne peut pas nettoyer un référentiel sans détruire de l'historique de recette.
Références au code v1. tests.statut ∈ {Draft, À rédiger, Validé, Obsolète} (001_initial_schema.sql:164, data/campaignData.js). Badge : SynthesePage.jsx:686 ; filtre en correspondance exacte : SynthesePage.jsx:327. activate_campaign (migration 043) copie tous les tests dont campaign_id_snapshot IS NULL, sans filtrer sur le statut.
Proposition — séparer « où en est la rédaction » de « fait-il partie du périmètre »
Deux informations sont aujourd'hui écrasées dans un seul champ. Il faut les distinguer :
| Question | Porté par | Valeurs |
|---|---|---|
| Où en est la rédaction de ce flux ? | le statut actuel | Draft → À rédiger → Validé |
| Ce flux fait-il encore partie du périmètre ? | nouveau : archivé ou non | archivé / actif |
Ne pas surcharger un même champ avec deux sémantiques — c'est précisément ce qui rend « Obsolète » inexploitable aujourd'hui.
Champs archivedAt / archivedBy (nullables) sur tests — et, si le masquage d'une branche entière est voulu, sur modules / functionalities / scenarios. Le champ statut est inchangé.
Règles
- Un flux archivé est exclu par défaut de la Synthèse — avec une bascule « Afficher les éléments archivés », comme TestRail.
- Il est exclu des futurs périmètres de campagne et des dénominateurs de couverture — sinon le % d'avancement reste plafonné artificiellement.
- Jamais rétroactif : les campagnes déjà exécutées conservent le flux et ses résultats — l'historique reste intact.
- Réversible (désarchivage). La suppression définitive reste possible mais réservée à l'admin, avec le même écran d'impact qu'aujourd'hui (F3).
Impact
Quasi nul si la décision est prise maintenant — c'est une information supplémentaire portée par chaque flux. Prise plus tard, elle oblige à reprendre tous les écrans de consultation pour y ajouter le filtre, avec un risque d'oubli à chaque endroit manqué.
🔗 Dépendance forte avec A3bis : dans le modèle retenu, un flux déjà testé ne peut plus être supprimé → l'archivage devient le seul moyen de le sortir du référentiel. A2 cesse alors d'être une option pour devenir un prérequis.
Deux champs nullables sur tests (et optionnellement sur les trois niveaux supérieurs de la hiérarchie). Chaque query de lecture doit filtrer archivedAt === null par défaut, avec un paramètre d'inclusion explicite pour la bascule d'affichage.
Droits
| Action | Rôles |
|---|---|
| Archiver / désarchiver | admin + consultant |
| Supprimer définitivement | admin |
Aligné marché
- Zephyr Scale : archivage réversible — retire le cas de la bibliothèque active sans le supprimer, réintégrable à tout moment.
- TestRail : état masquable avec bascule d'affichage et rétention avant suppression définitive (7 / 14 / 30 jours, paramétré par l'administrateur).
À trancher — Q21
- Durée de rétention avant suppression définitive (TestRail propose 7 / 14 / 30 jours) ?
- Un flux archivé doit-il rester visible dans les campagnes déjà exécutées ? Recommandation : oui — l'historique ne se réécrit pas.