diff --git a/Le-GUI-console-d-exploitation.md b/Le-GUI-console-d-exploitation.md index 72fe9f0..68742df 100644 --- a/Le-GUI-console-d-exploitation.md +++ b/Le-GUI-console-d-exploitation.md @@ -133,6 +133,46 @@ d'instance, devis de configuration des switches. --- +### La vue **Assistants** — l'ordre des gestes, pas seulement les gestes + +Les huit autres vues éditent le **plan**. Celle-ci conduit des **gestes**, et elle répond à un +trou précis : le `Makefile` porte **132 cibles documentées** qui disent chacune *ce qu'elle +fait*, et **aucune ne dit dans quel ordre**. Un exploitant devant un site neuf n'avait aucun +moyen d'apprendre, depuis la console, que `site-creer` précède `forge-amorcer`, que le premier +passage **s'arrête** sur une forge vide, ni que rien n'est « prêt » avant `valider`. Cette +connaissance vivait en prose dans les documents ; la console offrait des boutons sans séquence. + +**Dix-sept assistants, 126 étapes, et la totalité des 132 cibles.** Chaque cible documentée est +soit portée par un assistant, soit **exemptée avec son motif** — et `P83` refuse qu'une cible +échappe aux deux. Sans cette garde, la console cacherait un pouvoir que le moteur possède. + +**Le registre ne recopie pas le Makefile.** `docs/runbooks-construction.yml` déclare seulement +ce que le Makefile ne peut pas porter : l'**ordre**, la **nature** du geste, la **portée** et le +**pourquoi**. Le libellé de chaque étape est *lu dans le Makefile au moment de servir*. Une +cible renommée se voit donc immédiatement, elle ne s'invente pas — c'est la règle « une liste +qui suit une autre prend du retard », et la garde est écrite **en même temps** que la liste. + +**Trois natures, trois comportements** : + +| Nature | Ce que la console fait | +|---|---| +| `mesure` | n'écrit rien ; **toujours offerte**, même après un échec — mesurer pour comprendre est exactement ce qu'on fait ensuite | +| `écriture` | exige que l'étape précédente **non facultative** ait réussi ; sinon on bâtit sur un terrain non vérifié | +| `destructif` | exige d'**écrire `DETRUIRE`**, en plus du `CONFIRMER=true` que la cible réclame déjà | + +**Le navigateur ne nomme pas une commande, il nomme une place.** `/api/runbook-etape` ne lance +jamais « la cible que la page demande » : il lance ce que le registre déclare **à cet index-là**, +avec les seules variables déclarées. Une page compromise — ou simplement périmée — ne peut donc +pas réclamer `raser` depuis un assistant de mesure. L'index compte : « Le premier jour d'un +site » lance `site-deployer-tout` **deux fois**, et les deux places n'ont pas le même sens. + +**La portée décide, et elle se dérive.** Un assistant de site exige `materialiser`, un assistant +de locataire `configurer`, un assistant de poste **les deux**. Un assistant hors de portée reste +**visible et lisible** : savoir que le geste existe, et chez qui il se fait, fait partie du +métier. Ce qui est refusé, c'est de le lancer — et le refus dit sa raison. + +--- + ## ③ Pourquoi c'est transférable | Set-OPS | Équivalents ailleurs | @@ -168,5 +208,8 @@ saisie** — pas « le GUI de Set-OPS ». ## Pour aller plus loin *(dépôt)* - Lancer : `make inventaire-ui` ; le code : `scripts/inventory_gui.py`. - Ce que le GUI sait écrire (et la preuve) : `scripts/couverture_gui.py` (P19). +- Les assistants : `docs/runbooks-construction.yml`, lus par `scripts/runbooks.py` (P83). + Vérifier le registre sans lancer la console : `python3 scripts/runbooks.py verifier`, + et le lire en texte : `python3 scripts/runbooks.py lister`. - Le flux plan → apply : unité **[Infra as Code & idempotence](Infra-as-Code-et-idempotence)**. - La flotte : unité **[Multi-instance & fédération](Multi-instance-et-fédération)**.