Quickstart : validation du module de configuration
Ce guide valide de bout en bout les trois user stories de spec.md via la surface CLI décrite dans contracts/cli-config.md. À exécuter une fois le module implémenté (cf. tasks.md).
Prérequis
- Installation locale de Régine avec le module
configimplémenté (src/regine/config/,src/regine/cli/config_cmd.py). - Un répertoire temporaire et un répertoire de travail local vides, sur disque local.
- Un partage SMB accessible (réel ou simulé) pour les scénarios 2 et 5 ; un partage volontairement démonté pour le scénario 4.
Scénario 1 — Configuration initiale (User Story 1, P1)
regine config set-paths \
--temp-dir ~/regine/tmp \
--local-work-dir ~/regine/travail \
--archive-smb smb://nas.local/regine-archive
Résultat attendu : si ~/regine/tmp ou ~/regine/travail n'existent pas, Régine propose de les créer (accepter) ; le contexte est enregistré (regine config show affiche les trois chemins), et ~/regine/travail contient une base de données de travail initialisée (FR-006, SC-003).
Scénario 2 — Modification d'un chemin sans travail en cours (User Story 1, Acceptance Scenario 4)
regine config set-paths --temp-dir ~/regine/tmp2
Résultat attendu : le changement est appliqué sans erreur ; regine config show reflète le nouveau chemin ; les boîtiers déjà nommés (scénario 6) restent inchangés (SC-005).
Scénario 3 — Changement de répertoire de travail bloqué par un travail non réconcilié (Clarification n°1, FR-010, SC-006)
# Simuler un import/checkout en cours sous ~/regine/travail (non réconcilié), puis :
regine config set-paths --local-work-dir ~/regine/autre-travail
Résultat attendu : la commande échoue (code de sortie non-zéro) et indique précisément le(s) dossier(s) à réconcilier ou archiver avant de pouvoir changer de chemin — rien n'est déplacé ni perdu.
Scénario 4 — Assistance au montage SMB indisponible (User Story 2, P2)
# Démonter/débrancher le partage SMB configuré, puis déclencher une opération qui en a besoin :
regine config show
Résultat attendu : Régine détecte l'indisponibilité, déclenche le mécanisme de montage natif de l'OS (SC-002), puis, une fois le montage rétabli manuellement par l'utilisateur, une nouvelle invocation de la commande aboutit sans reconfiguration.
Scénario 5 — Nommer un boîtier à partir d'un import déjà effectué (User Story 3, P3)
# Après au moins un import ayant enregistré un boîtier (cf. specs/001-import-photos) :
regine config cameras list
regine config cameras rename --id 1 --nom "Fuji principal"
regine config cameras list
Résultat attendu : le boîtier apparaît d'abord comme (non nommé), puis porte le nom Fuji principal après renommage, sans qu'aucun nouvel import ni parcours du NAS n'ait été nécessaire (SC-004, SC-007).
Scénario 6 — Parcours volontaire du NAS pour un dossier archivé avant cette fonctionnalité (FR-012)
regine config cameras scan-nas
# Puis, après confirmation :
regine config cameras scan-nas --confirm
Résultat attendu : la première invocation avertit du coût potentiel et n'exécute rien (code non-zéro) ; la seconde, avec --confirm, parcourt l'archive et ajoute les boîtiers trouvés avec la source parcours_nas.
Scénario 7 — Configurer depuis la GUI, vérifier la parité avec la CLI (User Story 4, P4, extension du 2026-09-21)
uv run python -m regine_gui.app
Résultat attendu : l'onglet « Configuration » affiche les mêmes trois chemins et le même état SMB que regine config show (scénario 1) ; modifier un chemin depuis cet onglet puis lancer regine config show en CLI reflète immédiatement le changement (SC-008) ; tenter d'y reproduire le scénario 3 (changement de local-work-dir avec travail non réconcilié) échoue avec le même message d'erreur que la CLI, présenté clairement dans l'interface plutôt que comme une exception technique ; la liste des boîtiers de cet onglet correspond à regine config cameras list (scénario 5), et y nommer un boîtier produit le même résultat.
Scénario 8 — Réplication du contexte vers l'archive à l'archivage d'un dossier (User Story 5, FR-016)
# Après le scénario 5 (au moins un boîtier nommé) et un import/checkout suivi d'un archivage :
regine reconcile /Volumes/NAS/photos/2026/2026-08-15_Sortie --local-dest ~/regine/travail/2026-08-15_Sortie
Résultat attendu : en plus du comportement déjà couvert par specs/005-checkout-reconciliation, une copie de ~/regine/travail/contexte.sqlite3 apparaît à /Volumes/NAS/photos/.regine-contexte.sqlite3, reflétant les boîtiers nommés/catégories connues à cet instant.
Scénario 9 — Reprise sur une nouvelle machine (User Story 5, FR-017, SC-009/SC-010)
# Sur une installation "neuve" (nouveau HOME, donc nouveau ~/.regine), pointant vers la même archive :
regine config set-paths \
--temp-dir ~/regine/tmp \
--local-work-dir ~/regine/travail \
--archive-smb smb://nas.local/regine-archive
regine config cameras list
Résultat attendu : set-paths annonce la restauration du contexte depuis l'archive (« Contexte restauré depuis l'archive : N boîtier(s), N catégorie(s) ») ; cameras list affiche immédiatement les mêmes boîtiers nommés que sur l'ancienne installation (scénario 5), sans aucun nouvel import.
Scénario 10 — Restauration au premier checkout, si la configuration initiale n'a pas suffi (User Story 5, FR-017, Edge Case)
# Installation neuve configurée pendant que l'archive était inaccessible (restauration différée) :
regine checkout /Volumes/NAS/photos/2026/2026-08-15_Sortie --local-dest ~/regine/travail/2026-08-15_Sortie
regine config cameras list
Résultat attendu : le premier regine checkout réussi déclenche à son tour la restauration du contexte (si elle n'a pas déjà eu lieu) ; cameras list retrouve les boîtiers nommés de l'ancienne installation, au plus tard à ce moment.
Critères de sortie
Les dix scénarios ci-dessus, exécutés dans l'ordre sur un contexte propre, doivent tous produire le résultat attendu — les scénarios 1 à 6 et 8 à 10 sans intervention manuelle (uniquement via la CLI), le scénario 7 en validation manuelle de la GUI (cf. specs/006-gui-tri-consultation/research.md § 2 : pas de suite de tests automatisée pour l'interface elle-même). Tout écart doit être tracé comme régression avant de considérer la fonctionnalité prête pour /speckit-tasks → implémentation suivante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
|