Protocole d'épreuve de l'opérateur indépendant (AFF-002)
AFF-002 (« Set-OPS s'exploite sans aucune IA ») était ✅ par inspection : ses écarts bloquants soldés et le parcours relu, mais jamais exécutée par un opérateur qui n'est pas l'auteur. Aucune commande locale ne peut la prouver. Ajoute le protocole de l'épreuve humaine : départ à froid depuis le modèle public `socle`, sur la grappe Proxmox de l'opérateur. Règle du silence (N0 journalise / N1 déblocage après 30 min, consigné comme défaut / N2 arrêt sécurité), interdits (aucune IA, aucun dépôt privé, aucune lecture de docs/audit/ qui divulguerait les pièges connus), critères R1→R6 fixés d'avance, périmètre matériel, gabarit de rapport. Le registre peut perdre : la redescente d'AFF-002 en 🟡 ou ❌ selon le verdict est explicitement prévue. Le protocole ne nomme personne — il est réutilisable, et l'identité de l'opérateur vit dans son rapport, sous réserve de consentement. Validé : prouver.py --verifier → CONFORME 16/16. Aucun code touché. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
8348a5173b
commit
ea2d490e20
4 changed files with 230 additions and 1 deletions
24
CHANGELOG.md
24
CHANGELOG.md
|
|
@ -1,5 +1,29 @@
|
|||
# CHANGELOG — Set-OPS
|
||||
|
||||
## 2026-07-21
|
||||
|
||||
### Ajouté
|
||||
- **Protocole d'épreuve de l'opérateur indépendant** (`docs/audit/protocole-operateur-independant.md`).
|
||||
Met **AFF-002** (« Set-OPS s'exploite entièrement à la main, sans aucune IA ») à l'épreuve
|
||||
d'un sysadmin qui n'est pas l'auteur, sur sa propre grappe Proxmox, à froid depuis le modèle
|
||||
public `socle`. Définit : la **règle du silence** (l'observateur journalise, n'aide pas ; trois
|
||||
niveaux N0/N1/N2), les **interdits** (aucune IA, aucun accès aux dépôts privés, aucune lecture
|
||||
de `docs/audit/` qui divulguerait les pièges connus), les **critères de réussite R1→R6 fixés
|
||||
d'avance**, le périmètre matériel et la sécurité, et le **gabarit de rapport**
|
||||
(`operateur-independant-AAAA-MM-JJ.md`). Le registre peut **perdre** : le protocole prévoit
|
||||
explicitement la redescente d'AFF-002 en 🟡 ou ❌ selon le verdict.
|
||||
|
||||
### Modifié
|
||||
- **`docs/audit/affirmations.md`** — nouvelle limite consignée : **AFF-002 est ✅ *par
|
||||
inspection*, pas par démonstration**. Ses écarts bloquants sont soldés, mais aucun opérateur
|
||||
indépendant ne l'a exécutée ; ✅ y signifie « plus aucun défaut connu ». Renvoi vers le
|
||||
protocole.
|
||||
- **`docs/audit/README.md`** — « Les trois pièces » → « Les pièces » : ajout du protocole comme
|
||||
quatrième pièce du dispositif (l'épreuve humaine, hors harnais automatisable).
|
||||
|
||||
Validé : `python3 scripts/prouver.py --verifier` → **CONFORME 16/16** (voûte exportée) ;
|
||||
équilibre des blocs de code du nouveau document vérifié. Aucun code touché.
|
||||
|
||||
## 2026-07-20
|
||||
|
||||
### Modifié
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@
|
|||
Ce dossier contient le dispositif qui garde Set-OPS **honnête** : il ne doit jamais
|
||||
affirmer plus que ce qu'il prouve.
|
||||
|
||||
## Les trois pièces
|
||||
## Les pièces
|
||||
|
||||
| Fichier | Rôle |
|
||||
|---|---|
|
||||
| [`affirmations.md`](affirmations.md) | **Le registre** : chaque affirmation publique du dépôt (README, AGENTS, QUICKSTART, docs, wiki, aide `make`, GUI) tracée vers une commande de preuve et un statut (✅/🟡/❌/⚪), plus le **journal des traitements** (ce qui a été corrigé, quand, comment). |
|
||||
| `scripts/prouver.py` | **Le harnais** : un orchestrateur mince qui **rejoue** les preuves automatisables du registre en appelant l'outillage existant (les mêmes scripts que `make verifier`). Il ne réimplémente aucune validation. |
|
||||
| `preuve-AAAA-MM-JJ.md` | **La pièce justificative** : le rapport horodaté produit par `make prouver`. Rejouable et présentable (audit, certification, revue). |
|
||||
| [`protocole-operateur-independant.md`](protocole-operateur-independant.md) | **L'épreuve humaine** : le protocole qui met AFF-002 (« exploitable sans IA ») à l'épreuve d'un sysadmin qui n'est pas l'auteur. Aucune commande locale ne peut prouver cette affirmation ; produit un rapport `operateur-independant-AAAA-MM-JJ.md`. |
|
||||
|
||||
## Produire une preuve
|
||||
|
||||
|
|
|
|||
|
|
@ -374,6 +374,13 @@ couvert indirectement par P03), AFF-051 (autorité d'`AGENTS.md`), AFF-073/075 (
|
|||
|
||||
## Limites de cet audit
|
||||
|
||||
- **AFF-002 est ✅ *par inspection*, pas par démonstration.** Ses écarts bloquants ont été
|
||||
soldés (parcours QUICKSTART, `make verifier`) et le parcours relu de bout en bout, mais
|
||||
**aucun opérateur indépendant ne l'a jamais exécuté**. ✅ signifie ici « 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. Épreuve prévue :
|
||||
[`protocole-operateur-independant.md`](protocole-operateur-independant.md) — son rapport
|
||||
fera foi, y compris s'il fait redescendre AFF-002 en 🟡 ou ❌.
|
||||
- **Hors production** : toute affirmation nécessitant une VM, Proxmox, le réseau ou la
|
||||
flotte vivante (`make valider`, `make deployer*`, `make creer-vm`, `--check` réel, les
|
||||
très nombreux « **prouvé sur VM réelles** » du `CHANGELOG.md`) est marquée ⚪ ou 🟡 —
|
||||
|
|
|
|||
197
docs/audit/protocole-operateur-independant.md
Normal file
197
docs/audit/protocole-operateur-independant.md
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
# Protocole — épreuve de l'opérateur indépendant
|
||||
|
||||
É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 `modele-debian13` visible dans Proxmox |
|
||||
| **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
|
||||
```
|
||||
Loading…
Reference in a new issue