Set-OPS-Public/docs/audit/protocole-operateur-independant.md

201 lines
8.8 KiB
Markdown
Raw Normal View History

# Protocole — épreuve de l'opérateur indépendant
preuve : P34 — chaque document declare son lecteur (D-74) La refonte de ce matin posait une convention. Une convention qu'on n'outille pas tient tant que quelqu'un y pense : c'est le raisonnement de D-70, applique au corpus documentaire. Etat de depart mesure : 2 documents sur 34 declaraient leur lecteur. Les 32 autres disaient leur SUJET — ce qui avait enfoui le runbook de reprise le plus utile du depot au §6 de autorisation.md. Les 38 le declarent desormais, lecteur determine document par document et non colle au gabarit : l'exploitant (devis, migration de tenant, cycle de vie, gabarit d'or), le mainteneur (conceptions, registres, carte), le lecteur externe (ecosysteme-chezlepro), l'agent IA (MISE-A-JOUR-CODEX-CLAUDE). Deux exemptions DERIVEES, pas listees — un chemin en dur aurait vieilli a la premiere page ajoutee : un document qui s'annonce genere, et un fragment sans titre. Les 13 exemptes verifies un par un ; aucun document ecrit a la main n'est exempte par accident. La preuve ne lit que l'EN-TETE, ce qui empeche frontiere-opnsense.md et plan-et-generation.md — qui parlent de generation dans leur corps — d'etre exemptes a tort. Eprouvee dans les deux sens. Elle a echoue seule des sa premiere execution en nommant deux documents que mon inventaire avait manques (docs/audit/). Puis test negatif delibere : declaration retiree de meta-classe.md -> ECHEC la nommant ; restauree -> OK. Ce qu'elle ne teste pas : que le lecteur declare soit le BON. Ca se juge en revue ; elle garantit qu'on a du y penser. P01–P34. Comptes perimes corriges au passage (AGENTS.md et devis-services.md annoncaient encore 30 preuves). Verifie : prouver.py 0 (34 OK), plan-recette inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 07:53:04 -04:00
> **Pour qui :** qui **fait passer l'épreuve** — et l'opérateur indépendant qui s'y prête.
> Le mainteneur n'y intervient pas : c'est tout l'objet du protocole.
Épreuve empirique de l'affirmation **AFF-002** : *« Set-OPS s'exploite entièrement à la
main — la doc, `make` et le GUI suffisent, sans aucune IA »* (README:9 ; `AGENTS.md`
principe 10).
> **Pourquoi cette épreuve existe.** En phase 5, AFF-002 est passée 🟡 → ✅ **par
> inspection** : ses écarts bloquants ont été soldés et le parcours relu de bout en bout.
> Aucun opérateur indépendant ne l'a jamais exécuté. Tant que ce test n'a pas eu lieu,
> ✅ signifie « plus aucun défaut connu », pas « démontré ». C'est la seule affirmation
> du registre qu'aucune commande locale ne peut prouver : elle exige un humain qui n'est
> pas l'auteur.
## Ce que l'épreuve mesure
**Mesuré** : ce que le dépôt public transmet, seul, à un sysadmin compétent qui ne
connaît pas Set-OPS — depuis `QUICKSTART.md`, sur sa propre grappe Proxmox, du dépôt nu
jusqu'à un socle déployé.
**Non mesuré** : les modèles assemblés (dépôt privé `Set-OPS-modeles`), les services
hors socle, l'ergonomie du GUI au-delà de son ouverture, la tenue en exploitation dans
la durée.
## Rôles
| Rôle | Qui | Mandat |
|---|---|---|
| **Opérateur** | un sysadmin qui n'est pas l'auteur | Seul acteur. Exécute, décide, se débloque. |
| **Observateur** | l'auteur / mainteneur du dépôt | Journalise. **N'aide pas.** Ne touche à rien. |
Le protocole est **réutilisable** : il ne nomme personne. L'identité de l'opérateur d'une
session donnée est portée par son rapport, sous la réserve de consentement ci-dessous.
## La règle du silence
C'est le cœur du protocole, et la partie difficile.
> **Chaque fois que l'observateur a envie d'intervenir, c'est un défaut de
> documentation. Il le note, il se tait.**
Un opérateur débloqué par l'auteur ne prouve rien — sinon que l'auteur sait. Ce qu'on
mesure est exactement ce qui reste quand l'auteur est absent.
Trois niveaux d'intervention, décidés d'avance :
| Niveau | Déclencheur | Effet |
|---|---|---|
| **N0 — silence** | Défaut. C'est l'état par défaut. | Rien n'est dit. Le chrono du blocage tourne. |
| **N1 — déblocage minimal** | L'opérateur est bloqué **> 30 min** sur une même étape et le demande. | Réponse la plus courte possible, sans contexte ni leçon. **Consigné comme défaut**, gravité proportionnelle au temps perdu. |
| **N2 — arrêt sécurité** | Risque de détruire quelque chose de réel (VM, données, réseau hors périmètre). | Interruption immédiate. **N'est pas un défaut.** |
L'observateur journalise aussi ses **démangeaisons** : chaque fois qu'il a voulu parler
mais que l'opérateur s'est débloqué seul. Même sans N1, c'est un signal de faiblesse
documentaire.
## Interdits pour l'opérateur
- **Aucune IA** — pas de Claude, ChatGPT, Copilot ou équivalent, à aucune étape.
- **Aucune question à l'auteur**, hors N1 formalisé et N2.
- **Aucun accès** aux dépôts privés (`Set-OPS-modeles`, `OPS-*`).
- **Aucune lecture de `docs/audit/`** — le registre décrit les pièges connus. Le lire,
c'est connaître les réponses de l'examen.
**Autorisé** : toute la documentation publique du dépôt, `man`, et le web pour ce qui
n'est pas Set-OPS (Debian, Ansible, Proxmox, nginx…). C'est le comportement réel d'un
sysadmin.
## Ce que l'auteur fournit
**Uniquement l'URL du dépôt public**, et ce protocole.
Rien d'autre. En particulier, l'auteur ne prépare **ni** le jeton API Proxmox, **ni** les
clés SSH, **ni** le mot de passe Vault, **ni** le moindre fichier d'instance : ce sont
les prérequis de `QUICKSTART.md` §0, et savoir les produire fait partie de l'épreuve.
## Périmètre matériel et sécurité
L'opérateur part sur **sa propre grappe Proxmox**.
- [ ] Confirmer **avant de commencer** que le périmètre n'est pas de la production
Technolibre : nœud dédié, ou à défaut plage VMID + stockage réservés à l'épreuve.
- [ ] Noter la plage VMID retenue : `____________`
- [ ] `make nettoyer-modele CONFIRMER=true` est **destructif** — il s'applique à la VM
modèle, jamais à autre chose. Vérifier la cible avant.
- [ ] Prévoir la remise en état : suppression des VM créées en fin d'épreuve.
## Critères de réussite — fixés d'avance
Binaires, vérifiables, définis **avant** le début. On ne les renégocie pas en cours.
| # | Critère | Vérification |
|---|---|---|
| **R1** | Instance créée depuis `socle`, plan renseigné à ses valeurs | `make inventaire-verifier` → rc=0 |
documentation : la tournee des 74 documents, parce qu un balayage ne lit pas La revision a commence par un balayage par motifs — chemins morts, cibles make absentes, comptes derives. Il a trouve une trentaine d ecarts et rate presque tout le reste : un motif ne voit que ce qui s exprime en motif. make hote-planifier en est l exemple. La cible EXISTE, donc le controle passait au vert. C est une cible depreciee qui refuse et sort en 2, recommandee par AGENTS.md, et qui contredit la REGLE D OR du meme fichier trois ecrans plus haut. Il fallait lire pour la voir. 74 documents lus un par un. 66 corriges, 8 exacts. CE QUI ETAIT FRANCHEMENT FAUX AGENTS.md, la source d autorite, annoncait la flotte pas encore executee contre des VM reelles. Elle a ete rasee et remontee depuis zero trois fois. ecosysteme-chezlepro.md, le document montre a un client, portait la meme phrase : il se sous-vendait gravement. courriel-conception.md s ouvrait sur aucun role n est encore ecrit, au-dessus de son propre paragraphe 1 qui les nomme. autorisation.md se terminait sur rien n est construit alors qu il rapporte des mesures datees du role en fonctionnement. hebergeur-exploitation.md disait rien n est fait d un depot qui existe. filiation-emancipation.md se contredisait a deux ecrans de distance. DES MODELES DECRITS D APRES UN MONDE ANTERIEUR Le resolveur : cinq documents decrivaient un Unbound par VM en opt-in, trois le donnaient en exemple d integration FACULTATIVE — il est universel depuis le 2026-08-24. L adressage de nomenclature-vm.md : reseau unique, VLAN 11-15, VMID a cinq chiffres. Le nommage SDN de sdn-evpn.md contre le code : c est le wiki qui avait raison. CE QUI CASSE AU PREMIER ESSAI Le nom du gabarit dore etait faux a quatre endroits, dont la procedure qui le FABRIQUE et le critere R2 de l epreuve d operateur independant. preparer-un-site-hebergeur.md avertissait qu une VM faite a la main serait detruite : raser derive du plan, il ne la detruira jamais — le risque est l inverse. Un mot de passe d essai en clair dans un depot public. DEUX PREUVES ETENDUES, ET UNE QUI SE TROMPAIT ELLE-MEME P57 couvre les groupes : elle a signale aussitot 29 groupes annonces au-dessus d un tableau qui en cite 40. P29 confronte le tableau de authentification.md aux declarations reelles : 12 annonces, 21 reels. Et P57 imposait un chiffre faux — 56 preuves alors que le depot en porte 57, la conditionnelle vivant hors de tout comptage. Un garde-fou qui fait respecter une erreur ajoute l assurance a l erreur. CE QUI RESTE, ET QU AUCUNE PREUVE NE TIENT Deux comptes trouves a la main. Et une lacune reelle : rien ne garde les meta/acces.yml — ni qu un service web-sso en porte un, ni que le groupe qu il nomme existe. P29 tient les positions d authentification, personne ne tient les habilitations. make prouver : CONFORME, 56 OK, 0 echec, 1 saute. 0 lien mort. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-06 16:18:23 -04:00
| **R2** | Golden template Debian 13 construit et converti en template Proxmox | `make verifier-modele` OK ; template visible dans Proxmox **sous le nom que `make config` a enregistré** (`proxmox_clone_source_nom`, `modeleSetOPS` par défaut) |
| **R3** | Au moins une VM créée depuis le plan | `make creer-vm HOTE=…` OK ; VM jointe par Ansible (`ansible -m ping`) |
| **R4** | Cet hôte déployé selon ses groupes | `make deployer HOTE=…` → rc=0 |
| **R5** | Validation globale du dépôt passée par l'opérateur | `make verifier` → rc=0 |
| **R6** | Socle complet déployé (tous les hôtes du modèle `socle` actifs et déployés) | `make deployer` sur chaque hôte → rc=0 |
**Verdict :**
- **Réussite démontrée** — R1→R6 atteints, **zéro N1**.
- **Réussite avec défauts** — R1→R5 atteints, avec N1 consignés. ← *résultat attendu*
- **Échec** — blocage qu'aucune documentation ni l'opérateur seul ne résout.
> Un test où l'opérateur ne bloque jamais est un test mal conçu ou mal observé. Les
> défauts sont le produit livrable, pas l'accident.
## Cadence
Deux séances d'environ 4 h, ou une journée. **Plafond horaire fixé d'avance** pour que
l'épreuve ne s'étire pas : au-delà, on arrête et on consigne l'état atteint — un
plafond dépassé est lui-même un résultat.
## Conséquence sur le registre
Le registre doit pouvoir **perdre**. C'est la condition pour qu'il vaille quelque chose.
| Verdict | Effet sur AFF-002 |
|---|---|
| Réussite démontrée | ✅ **confirmée empiriquement** — la mention « par inspection » tombe |
| Réussite avec défauts | **✅ → 🟡** jusqu'à correction des défauts consignés, puis re-test des étapes touchées |
| Échec | **✅ → ❌**, avec le blocage nommé comme écart |
Le rapport rejoint `docs/audit/` et devient la preuve rejouable d'AFF-002 : *rejouer*
signifie ici refaire passer l'épreuve à un nouvel opérateur indépendant.
## Nommage et consentement
« Volontaire pour participer » ne vaut pas « d'accord pour être nommé ». **Avant toute
publication** du rapport, valider avec l'opérateur **et** avec Technolibre ce qui peut
être cité : nom, organisation, ou anonymat (« un sysadmin indépendant »). Par défaut, et
tant que la réponse n'est pas obtenue : anonyme.
---
# Annexe — gabarit de rapport
À copier vers `docs/audit/operateur-independant-AAAA-MM-JJ.md` et remplir pendant
l'épreuve, pas après.
```markdown
# Épreuve de l'opérateur indépendant — AAAA-MM-JJ
- **Opérateur** : (nom ou « sysadmin indépendant » — cf. consentement)
- **Observateur** : Daniel Allaire
- **Dépôt testé** : Set-OPS-public @ <sha>
- **Matériel** : grappe Proxmox de l'opérateur, <n> nœud(s), plage VMID <…>
- **Début / fin** : <hh:mm> → <hh:mm> (<durée>)
- **Consentement de nommage** : obtenu / en attente / anonymat demandé
## Verdict
<Réussite démontrée | Réussite avec défauts | Échec>
| Critère | Atteint | Note |
|---|---|---|
| R1 inventaire-verifier | ☐ | |
| R2 golden template | ☐ | |
| R3 VM créée | ☐ | |
| R4 hôte déployé | ☐ | |
| R5 make verifier | ☐ | |
| R6 socle complet | ☐ | |
**Interventions N1** : <n> · **Démangeaisons N0** : <n> · **N2** : <n>
## Grille d'observation
| # | Heure | Étape QUICKSTART | Attendu par l'opérateur | Survenu | Débloqué seul ? | Blocage | Fichier à corriger |
|---|---|---|---|---|---|---|---|
| 1 | | §_ | | | O / N / **N1** | __ min | |
| 2 | | | | | | | |
## Défauts consignés
| ID | Gravité | Étape | Description | Correctif proposé | Fichier |
|---|---|---|---|---|---|
| D1 | bloquant / majeur / mineur | | | | |
Gravité : **bloquant** = N1 nécessaire ou critère non atteint · **majeur** = > 15 min
perdues, débloqué seul · **mineur** = friction, hésitation, formulation trompeuse.
## Verbatim de l'opérateur
> (citations brutes — les hésitations à voix haute valent de l'or ; ne pas les lisser)
## Ce que l'épreuve n'a pas couvert
<modèles assemblés, services hors socle, GUI, tenue dans la durée…>
## Suites
- [ ] Corriger D<n> …
- [ ] Mettre à jour AFF-002 dans `affirmations.md` (→ ✅ confirmée / 🟡 / ❌)
- [ ] Entrée `CHANGELOG.md`
- [ ] Re-test des étapes touchées par les correctifs
```