filiation : nommer l'insemination, et rendre a l'humain l'acte d'emancipation
La parente est la seule exception au zero-confiance, et elle est asymetrique : un ecosysteme neuf ne peut pas s'amorcer lui-meme. Le SITE materialise le terrain et amorce `ops-01` ; le tenant acheve le reste. Ce geste n'avait pas de nom, et un geste sans nom ne se borne pas. LE PARTAGE D'INTELLIGENCE QUI LE REND POSSIBLE, plus net que « le SITE ignore les roles » : les deux runners portent le meme moteur et n'en consomment pas la meme face. Le SITE lit `meta/flux.yml` — ce que les roles exigent du RESEAU — et en tire SDN, pare-feu Proxmox, frontiere. Le tenant lit tasks/templates/integration — ce qu'ils exigent de la MACHINE. C'est ce partage qui permet au SITE de poser les bonnes regles sans jamais lire la configuration d'un tenant. LE COUPLAGE EXISTAIT DEJA, NON DECLARE. `creer-vm` exige `_instance-requise` : le runner du SITE a du basculer son symlink `instance` sur OPS-Chezlepro pour materialiser ses VM, alors que son plan pose `serveur_ops_instance: ""`. Rien ne borne sur quels tenants il porte ni jusqu'a quand. L'EMANCIPATION EXIGE LA GOUVERNE D'UN HUMAIN. J'avais propose une condition d'extinction MESUREE — le lien se ferme quand la machine constate l'autonomie. Erreur symetrique de celle qu'on corrigeait, et le document disait deja pourquoi. Le fruit de l'emancipation est livre a quelqu'un ; sans quelqu'un pour le recevoir, il n'y a pas de livraison, seulement un lien qui tombe. Une emancipation automatique serait une expulsion. Quatre lignes distinctes : le moteur porte le lien, la machine INSTRUIT, l'humain ACTE, la machine PROUVE. DEUX LIMITES NOMMEES PLUTOT QUE TUES. Qui est le parent ? D-81 vide patient 0 de sa raison d'etre — plus un seul lecteur depuis le 26 — et la machine hors flotte qu'il existe pour remplacer alimente la forge qui fait autorite : le SPOF n'a pas ete elimine, il a ete promu. Trois issues posees, aucune tranchee, aucune bloquante. La separation des voutes est ORGANISATIONNELLE, pas cryptographique : les fichiers sont separes (site-ops-01 ne detient que underlay.vault.yml) mais un seul mot de passe ouvre les trois. make prouver : CONFORME, 52 OK, 0 echec. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
This commit is contained in:
parent
35853ff5fb
commit
c6f2cb1dd9
2 changed files with 198 additions and 12 deletions
70
CHANGELOG.md
70
CHANGELOG.md
|
|
@ -1,5 +1,75 @@
|
|||
# CHANGELOG — Set-OPS
|
||||
|
||||
## 2026-08-28 — L'insémination : la parenté est la seule exception au zéro-confiance
|
||||
|
||||
**52 preuves.** Entre tenants, la frontière refuse tout ce qui n'est pas déclaré. Mais un
|
||||
écosystème neuf **ne peut pas s'amorcer lui-même** : quelqu'un doit poser sa première
|
||||
machine. Ce geste n'avait pas de nom, et un geste sans nom ne se borne pas.
|
||||
|
||||
```
|
||||
le SITE matérialise VNets, VM, routes, flux — le terrain
|
||||
le SITE amorce ops-01 la première machine, et elle seule
|
||||
le TENANT achève ses autres machines, ses rôles, ses intégrations
|
||||
```
|
||||
|
||||
**Le partage d'intelligence qui le rend possible**, et qui est plus net que « le SITE ignore
|
||||
les rôles » : les deux runners portent le même moteur, et n'en consomment pas la même face.
|
||||
Le SITE lit `roles/*/meta/flux.yml` — ce que les rôles exigent du **réseau** — et en tire le
|
||||
SDN, le pare-feu Proxmox, la frontière. Le tenant lit `tasks/`, `templates/`,
|
||||
`meta/integration.yml` — ce qu'ils exigent de la **machine**. *C'est ce partage qui permet
|
||||
au SITE de poser les bonnes règles sans jamais lire la configuration d'un tenant ni détenir
|
||||
sa voûte.*
|
||||
|
||||
### Le couplage existait déjà, sans être déclaré
|
||||
|
||||
`make creer-vm` exige `_instance-requise`. Pour matérialiser les VM de Chezlepro, le runner
|
||||
du SITE a donc dû basculer son symlink `instance` sur le dépôt de Chezlepro — alors que son
|
||||
plan pose `serveur_ops_instance: ""` et que la doctrine dit qu'un SITE n'a pas de plan monté
|
||||
par ce lien. Mesuré sur la machine :
|
||||
|
||||
```
|
||||
/opt/setops/Set-OPS-public/instance -> ../OPS-Chezlepro (27 août 21:52)
|
||||
```
|
||||
|
||||
Rien ne borne sur quels tenants ce lien porte, ni jusqu'à quand. *Le déclarer, c'est le
|
||||
rendre limitable ; le taire ne l'a jamais empêché.*
|
||||
|
||||
### L'émancipation exige la gouverne d'un humain
|
||||
|
||||
J'avais proposé une **condition d'extinction mesurée** : le lien se ferme quand la machine
|
||||
constate que le tenant se reproduit sans son parent. C'était l'erreur symétrique de celle
|
||||
qu'on corrigeait, et ce document disait déjà pourquoi — *« chaque émancipation est une
|
||||
décision du client, jamais une rupture technique »*.
|
||||
|
||||
**Le fruit de l'émancipation est livré à quelqu'un.** Sans quelqu'un pour le recevoir, il
|
||||
n'y a pas de livraison : seulement un lien qui tombe. *Une émancipation qui se déclencherait
|
||||
toute seule ne serait pas une émancipation, ce serait une expulsion.*
|
||||
|
||||
D'où quatre lignes qui ne se confondent pas : le moteur porte le **lien**, la machine
|
||||
produit le **constat d'aptitude** — elle instruit, elle n'agit pas —, **l'humain** pose
|
||||
l'**acte** sous `CONFIRMER=true`, et la machine **prouve** ensuite que le lien est coupé.
|
||||
C'est la forme des autres gestes lourds d'ici : `raser` exige son nom d'instance, le mot de
|
||||
passe de la voûte se tape à l'exécution. **L'émancipation est le deuxième objet de cette
|
||||
liste.**
|
||||
|
||||
### Deux limites nommées plutôt que tues
|
||||
|
||||
**Qui est le parent ?** D-81 donne l'autorité du génome à la forge du SITE. Conséquence non
|
||||
écrite : patient 0, dont la raison d'être est *« porter les dépôts qui fabriquent les
|
||||
écosystèmes, et les servir à ses enfants »*, n'a plus un seul lecteur — Chezlepro était le
|
||||
dernier, corrigé le 26. Et la machine hors flotte qu'il existe pour remplacer alimente
|
||||
désormais la forge qui fait autorité : le point unique de défaillance n'a pas été éliminé,
|
||||
**il a été promu**. Trois issues sont posées dans le document ; aucune n'est tranchée, et
|
||||
aucune ne bloque la reconstruction en cours.
|
||||
|
||||
**La séparation des voûtes est organisationnelle, pas cryptographique.** Les fichiers sont
|
||||
bien séparés — vérifié sur `site-ops-01`, qui ne détient que `underlay.vault.yml`. Mais un
|
||||
**seul mot de passe** ouvre la voûte du site et celles des tenants. « Deux pouvoirs, aucun
|
||||
omnipotent » décrit la répartition des fichiers, pas celle des clés.
|
||||
|
||||
*Un document qui nomme ce qu'il n'a pas encore résolu vaut mieux qu'un document dont on
|
||||
découvrira le trou en s'appuyant dessus.*
|
||||
|
||||
## 2026-08-27 — P52 : matérialiser n'exige pas d'entrer chez le tenant
|
||||
|
||||
**52 preuves.** `creer-vm` confirmait son succès en attendant une réponse SSH. Le runner du
|
||||
|
|
|
|||
|
|
@ -66,18 +66,80 @@ soi dès le premier jour.
|
|||
| **identité** (LDAP/SSO) | le plus intime | mutualiser l'annuaire, c'est confier ses gens |
|
||||
| **la voûte** | **jamais** | les secrets ne se mutualisent pas, à aucun âge |
|
||||
|
||||
## Ce que l'émancipation doit prouver
|
||||
## L'insémination — le premier lien, et le seul que le SITE ait le droit d'avoir
|
||||
|
||||
Basculer une déclaration ne suffit pas. Une émancipation est un **acte outillé** en trois
|
||||
temps :
|
||||
Entre tenants, le zéro-confiance est le défaut : la frontière refuse tout ce qui n'est pas
|
||||
déclaré, et c'est cette règle qui rend l'hébergement mutualisé défendable. **La parenté est
|
||||
la seule exception, et elle est asymétrique** : un écosystème neuf ne peut pas s'amorcer
|
||||
lui-même. Quelqu'un doit poser sa première machine et lui donner de quoi continuer.
|
||||
|
||||
1. **déclarer** — lever le drapeau au plan, déployer le service chez soi ;
|
||||
2. **migrer l'état** — le génome, les sauvegardes, les certificats existants ;
|
||||
3. **prouver que le lien est coupé** — et c'est le temps qu'on oublie.
|
||||
Ce geste s'appelle l'**insémination** :
|
||||
|
||||
Sans cette troisième preuve, on croirait s'être émancipé en restant dépendant sans le
|
||||
savoir. C'est exactement le défaut que ce dépôt traque partout ailleurs : un vert sur un
|
||||
périmètre vide. Une émancipation non prouvée est une émancipation non faite.
|
||||
```
|
||||
le SITE matérialise VNets, VM, routes, flux — le terrain
|
||||
le SITE amorce ops-01 la première machine, et elle seule
|
||||
le TENANT achève ses autres machines, ses rôles, ses intégrations
|
||||
```
|
||||
|
||||
**Le partage d'intelligence qui le rend possible.** Les deux runners portent le même
|
||||
moteur ; ils n'en consomment pas la même face :
|
||||
|
||||
| | ce qu'il lit du moteur | ce qu'il en fait |
|
||||
|---|---|---|
|
||||
| runner du **SITE** | `roles/*/meta/flux.yml` — la face **réseau** des rôles | SDN, pare-feu Proxmox, frontière OPNsense |
|
||||
| runner du **TENANT** | `tasks/`, `templates/`, `meta/integration.yml` — la face **machine** | configure ses services |
|
||||
|
||||
C'est ce partage qui permet au SITE de poser les bonnes règles pour un tenant **sans jamais
|
||||
lire sa configuration ni détenir sa voûte**. Il sait de quoi les rôles ont besoin sur le
|
||||
fil ; il ignore ce qu'ils font sur la machine.
|
||||
|
||||
**Ce que le lien doit être, pour ne pas devenir un pouvoir permanent :**
|
||||
|
||||
- **étroit** — vers le seul `ops-01` du tenant, jamais vers ses autres machines ;
|
||||
- **déclaré** — dans `meta/flux.yml`, comme tout le reste, pour que la frontière et
|
||||
`nftables` le connaissent au lieu de le subir ;
|
||||
- **borné par un acte**, et cet acte appartient à un humain (voir ci-dessous).
|
||||
|
||||
> **Ce qui existe déjà sans être déclaré, au 2026-08-28.** `make creer-vm` exige
|
||||
> `_instance-requise` : pour matérialiser les VM d'un tenant, le runner du SITE doit
|
||||
> basculer son symlink `instance` sur le dépôt de ce tenant — alors que son plan pose
|
||||
> `serveur_ops_instance: ""` et que la doctrine dit qu'un SITE n'a pas de plan monté par ce
|
||||
> lien. Le couplage est donc **déjà là**, et rien ne borne sur quels tenants il porte ni
|
||||
> jusqu'à quand. Le déclarer, c'est le rendre limitable ; le taire ne l'a jamais empêché.
|
||||
|
||||
## Ce que l'émancipation exige — et de qui
|
||||
|
||||
Basculer une déclaration ne suffit pas. Mais l'erreur symétrique est plus tentante encore :
|
||||
faire de l'émancipation un **automatisme**, que la machine déclencherait dès qu'elle
|
||||
constate que le tenant se reproduit sans son parent.
|
||||
|
||||
**L'émancipation exige toujours la gouverne d'un humain.** Le fruit de l'émancipation est
|
||||
livré à quelqu'un — un client qui reprend ses clés, sa forge, son écosystème. Sans
|
||||
quelqu'un pour le recevoir, il n'y a pas de livraison : seulement un lien qui tombe. *Une
|
||||
émancipation qui se déclencherait toute seule ne serait pas une émancipation, ce serait une
|
||||
expulsion.*
|
||||
|
||||
C'est déjà la forme des gestes lourds de ce dépôt : `raser` exige `CONFIRMER=true` et le
|
||||
nom de l'instance ; le mot de passe de la voûte se tape à l'exécution — « le seul objet que
|
||||
la reproduction exige d'un humain ». **L'émancipation est le deuxième objet de cette
|
||||
liste.**
|
||||
|
||||
D'où la répartition, qui ne se confond pas :
|
||||
|
||||
| | qui l'exécute |
|
||||
|---|---|
|
||||
| **le lien de filiation** — déclaré, étroit, visible au plan | le moteur |
|
||||
| **le constat d'aptitude** — « ce tenant se reproduit sans son parent » | la machine — elle **instruit**, elle n'agit pas |
|
||||
| **l'acte d'émancipation** — retirer le lien, remettre les clés | **l'humain**, garde `CONFIRMER=true` |
|
||||
| **la preuve que le lien est coupé** | la machine, **après** l'acte |
|
||||
|
||||
La quatrième ligne est celle qu'on oublie, et c'est elle qui décide si les trois autres ont
|
||||
servi. Sans elle, on croirait s'être émancipé en restant dépendant sans le savoir —
|
||||
exactement le défaut que ce dépôt traque partout ailleurs : un vert sur un périmètre vide.
|
||||
**Une émancipation non prouvée est une émancipation non faite.**
|
||||
|
||||
*L'instrument de la quatrième ligne n'existe pas encore. C'est la pièce manquante nommée
|
||||
au bas de ce document.*
|
||||
|
||||
## Forme attendue d'une déclaration
|
||||
|
||||
|
|
@ -93,9 +155,63 @@ l'état de son écosystème d'un coup d'œil plutôt qu'en fouillant chaque rôl
|
|||
le drapeau est levé sans que l'amont soit nommé : emprunter sans dire à qui, c'est ne rien
|
||||
déclarer du tout.
|
||||
|
||||
## État au 2026-08-24
|
||||
## Qui est le parent ? — dilemme ouvert au 2026-08-28
|
||||
|
||||
Ce document décrit la filiation sans dire **de qui** un écosystème descend. La question
|
||||
n'est plus théorique depuis que les runners savent reconstruire : chaque écosystème rebâti
|
||||
grave sa réponse dans son plan (`serveur_ops_forge_amont`), et N réponses différentes font
|
||||
N lignées qu'on ne saura plus rapprocher.
|
||||
|
||||
La chaîne réelle, mesurée :
|
||||
|
||||
```
|
||||
poste de l'exploitant ──push──▶ eregion.chezlepro.ca:2222
|
||||
= forge.alliance-boreale.ca ◀── HORS FLOTTE
|
||||
│ git bundle │ miroir 8 h
|
||||
▼ ▼
|
||||
forge du SITE ★ autorité (D-81) forge de patient 0 ★ « la forge mère »
|
||||
│ │
|
||||
▼ ▼
|
||||
les tenants du site (plus aucun lecteur)
|
||||
```
|
||||
|
||||
Trois faits qui ne tiennent pas ensemble :
|
||||
|
||||
1. **Patient 0 ne sert plus personne.** Chezlepro était son dernier lecteur, corrigé le
|
||||
2026-08-26 vers la forge du site. Son dépôt affirme toujours sa raison d'être — *« porter
|
||||
les dépôts qui fabriquent les écosystèmes, et les servir à ses enfants »*.
|
||||
2. **Le point unique de défaillance n'a pas été éliminé, il a été promu.** Patient 0 existe
|
||||
explicitement pour remplacer une machine hors flotte que Set-OPS ne déploie ni ne prouve
|
||||
— or c'est de cette machine que la forge faisant autorité tire son contenu.
|
||||
3. **Le parent est locataire de son enfant.** Patient 0 est un tenant de la fabric d'un
|
||||
site qui descend de lui. L'ancêtre ne peut pas être le chemin de reprise de son hôte.
|
||||
|
||||
Trois issues, à trancher par l'exploitant — et par lui seul, comme toute émancipation :
|
||||
|
||||
| issue | ce qu'elle impose |
|
||||
|---|---|
|
||||
| **patient 0 redevient la source** ; chaque forge de SITE en miroite | le rendre atteignable depuis **tout** site — il vit aujourd'hui dans la fabric d'un seul |
|
||||
| **le SITE est la source** ; patient 0 devient une **référence**, non un ancêtre | assumer que la racine est le poste + la machine hors flotte, donc l'intégrer à la flotte ou la remplacer |
|
||||
| **pas de racine — une famille de pairs** ; D-81 se restreint à « autorité pour les tenants d'un site » | bâtir non pas une hiérarchie mais une **preuve de convergence** entre toutes les copies vivantes |
|
||||
|
||||
*Aucune n'est bloquante pour la reconstruction en cours : les tenants pointent déjà sur la
|
||||
forge de leur site, ce qui reste vrai dans les trois.*
|
||||
|
||||
## État au 2026-08-28
|
||||
|
||||
Seule la forge porte cette déclaration complète (`serveur_ops`). Les autres services
|
||||
mutualisés le sont par des mécanismes antérieurs, cohérents mais non uniformes. Les
|
||||
aligner sur la forme ci-dessus reste à faire — et l'instrument de preuve de l'étape 3
|
||||
n'existe pas encore.
|
||||
aligner sur la forme ci-dessus reste à faire.
|
||||
|
||||
**Les deux pièces manquantes**, l'une et l'autre nommées plus haut :
|
||||
|
||||
- le **lien d'insémination** n'est pas déclaré — il existe pourtant, par le symlink
|
||||
`instance` du runner du SITE, sans borne ni visibilité ;
|
||||
- l'**instrument de preuve** de la dernière ligne — « le lien est coupé » — n'existe pas.
|
||||
Tant qu'il manque, aucune émancipation ne peut être déclarée faite.
|
||||
|
||||
**Une limite mesurée le 2026-08-28, à connaître avant de s'appuyer sur cette frontière :**
|
||||
la séparation des voûtes est **organisationnelle, pas cryptographique**. Les fichiers sont
|
||||
bien séparés — le runner du SITE ne détient que `underlay.vault.yml`, vérifié sur la
|
||||
machine — mais **un seul mot de passe ouvre la voûte du site et celles des tenants**. « Deux
|
||||
pouvoirs, aucun omnipotent » décrit donc la répartition des fichiers, pas celle des clés.
|
||||
|
|
|
|||
Loading…
Reference in a new issue