Set-OPS-Public/docs/audit/protocole-operateur-independant.md
Daniel Allaire 5bc3bceac1
Some checks failed
verifier / verifier (push) Has been cancelled
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

200 lines
8.8 KiB
Markdown

# Protocole — épreuve de l'opérateur indépendant
> **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 |
| **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
```