Set-OPS-Public/docs/catalogue-services.md

323 lines
19 KiB
Markdown
Raw Normal View History

# Catalogue des services
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
> **Pour qui :** le **mainteneur** — ce que le moteur sait déployer, sous quel nom de groupe, et jusqu'où c'est éprouvé.
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
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
Ce document nomme les services que le moteur **sait déployer**, et la règle qui lie un
groupe à son playbook :
```text
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
groupe opérationnel -> playbooks/groupes/<groupe>.yml (P04 le prouve)
```
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
Le **rôle porte le nom du groupe** : `serveur_keycloak`, `client_pki`. Il n'y a pas de nom
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
court séparé. Seule exception, `serveur_durci` : un groupe dont le playbook **compose dix
rôles** de durcissement, et dans cet ordre — `hardening_packages`, `sysctl_hardening`,
`core_dumps`, `unattended_upgrades`, `apparmor`, `auditd`, `fail2ban_ssh`, `journald`,
`ssh_hardening`, `nftables_baseline` — plutôt qu'un rôle homonyme.
La nomenclature des VM et des VMID est documentée dans `docs/nomenclature-vm.md`.
Un service central peut partager un hôte avec d'autres services de la même fonction opérationnelle (plusieurs applications par VM). La relation stricte est entre groupe et playbook, pas entre groupe et VM.
> Modèle à jour : chaque service est une **application** (`instance/plan/applications.yml`). Voir `docs/plan-et-generation.md`.
## État d'implémentation des rôles
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
> **Mise à jour (2026-09-06), vérifiée groupe par groupe contre `roles/` et
> `playbooks/groupes/`.** Les **40 groupes** `serveur_*` / `client_*` du tableau ci-dessous
> ont **tous** leur rôle et leur playbook — 40 fichiers dans `playbooks/groupes/`, 40 noms
> distincts cités ici. Aucune capacité annoncée n'est un point d'ancrage vide.
>
> *(Le chiffre lu ici jusqu'au 2026-09-06 était 29, mesuré le 2026-08-18 : le catalogue a
> grandi de onze groupes — site, runners, résolveur, artefacts — sans que la phrase suive.
> C'est ce genre d'écart que la preuve **P57** garde désormais.)*
**Éprouvés sur VM réelles.** Le 2026-08-13, la flotte a été **reconstruite depuis zéro** —
43 groupes, 0 échec, 37 minutes. L'épreuve a été **rejouée deux fois le 2026-09-02**, sur
un dépôt qui avait beaucoup bougé depuis : 15/15 hôtes puis 14/14, 0 échec, `make valider`
à 0 échec sur 13 hôtes. Ce n'est donc plus « du code validé » : chaque rôle a repris une
machine nue et l'a menée à l'état voulu — et il l'a refait après coup.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
Ce que la reconstruction couvre, par capacité :
| Capacité | Rôles | Ce qui est éprouvé |
|---|---|---|
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
| Socle et durcissement | `serveur_debian`, `serveur_durci` (dix rôles composés) | clone du gabarit doré → machine conforme |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| Confiance | `serveur_step_ca`, `client_pki` | mTLS avec SAN dérivés du plan, renouvellement |
| Noms | `serveur_powerdns`, `client_resolveur` | autoritaire interne + résolveur local |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| Identité | `serveur_openldap`, `serveur_keycloak` | LDAPS, SSO OIDC, **fédération LDAP automatisée** (`tasks/federation-ldap.yml`), exposé par le plan (`auth.<domaine>`) |
| Passerelle SSO | `serveur_oauth2_proxy` | SSO devant une app sans OIDC natif (éprouvé sur Icinga Web 2) |
| Données | `serveur_postgresql`, `serveur_redis` | bases et comptes dérivés du registre, TLS `verify-full` |
| Courriel | `serveur_postfix`, `serveur_dovecot`, `serveur_rspamd` | SMTP→LDAP→LMTP→IMAP, antispam, DKIM |
| Edge | `serveur_nginx` | terminaison TLS, publication des `expose:` du plan |
| Observabilité | `serveur_prometheus`, `serveur_loki`, `serveur_grafana` | métriques, journaux, tableaux sous SSO |
| Supervision | `serveur_icinga`, `serveur_icingaweb2` | Icinga 2 + IcingaDB + Web 2 + BPM, au SSO |
| Forge | `serveur_forgejo` | Git + PostgreSQL + SSO OIDC |
| Collaboration | `serveur_nextcloud`, `serveur_collabora` (**natif**, plus de conteneur) | déployés par la reconstruction, base et client OIDC dérivés du plan — **usage** (dépôt de fichier, édition partagée) non consigné comme preuve |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| Plateforme webapp | `serveur_web_frontal`, `serveur_web_dorsal` | sites statiques et webapps natives (venv + systemd + nginx), **zéro conteneur** |
| Sauvegardes | `serveur_backup`, `client_backup` | restic hors-nœud, **restauration éprouvée** (2026-08-12 : la donnée revient) |
2026-08-23 11:58:10 -04:00
| Exploitation | `serveur_ops` | le poste depuis lequel l'ecosysteme se reconstruit : Ansible epingle, genome clone depuis **sa propre forge**, cle SSH propre — **sans** la voute ni son mot de passe |
| Source d'artefacts | `serveur_artefacts`, `client_artefacts` | cache apt de l'ecosysteme (apt-cacher-ng) : les paquets viennent de chez soi, pas de six serveurs etrangers — **mode hors ligne** pour prouver ce que le cache detient vraiment |
runner : `serveur_ops_tenant` — le runner d'un tenant recoit enfin sa voute La doctrine des runners decrit trois portees depuis le 2026-08-22 : calculer plan -> inventaire aucune voute serveur_ops configurer roles sur ses machines voute du TENANT <- revendiquee, jamais recue materialiser creer/detruire des VM voute du SITE serveur_ops_site La deuxieme ligne etait un trou. RIEN ne deposait jamais la voute d'un tenant sur son runner. Un runner pouvait deriver son inventaire et ne rien pouvoir en faire : chaque role qui demande un secret echouait sur son assertion, et l'echec ne disait pas qu'il manquait un FICHIER, seulement que les valeurs etaient vides. Decouvert en preparant la reconstruction de Chezlepro. Le runner du SITE peut materialiser ses quinze machines ; il ne peut pas les configurer, parce que Chezlepro a sa PROPRE autorite de certification — donc `client_pki` y reclame un secret de Chezlepro. Le runner du site ne l'a pas, et NE DOIT PAS l'avoir : c'est la ligne qui rend l'hebergement mutualise defendable. `serveur_ops_tenant` est le symetrique exact de `serveur_ops_site` : un MARQUEUR, pas un installateur. Il depose la voute `decrypt: false`, puis RELIT l'en-tete du fichier depose — une voute dechiffree par accident est une fuite silencieuse. Le dossier d'inventaire (`principal` ou `production`) se DECOUVRE sur la machine plutot que d'etre ecrit. Pourquoi un role a part et non une option de `serveur_ops` : donner sa voute a un runner est un POUVOIR, pas un reglage. Le declarer au plan force a repondre a « cette machine a-t-elle le droit de configurer cet ecosysteme ? » — une option activee par defaut y repondrait a notre place. CHEZLEPRO LISAIT ENCORE SON GENOME CHEZ PATIENT 0. Trouve au passage, et bloquant pour la reconstruction : `serveur_ops_forge_amont` pointait sur `10.29.16.11` — la forge de patient 0, l'amont d'avant que le site ait la sienne. D-81 a tranche depuis. Laisse tel quel, Chezlepro se serait reconstruit depuis un moteur perime, sur un reseau que le decoupage en zones a de toute facon deplace. Corrige vers la forge du site, PAR SON IP — `forge.genese.internal` appartient a la zone souveraine du site, et un tenant ne resout que la sienne ; le certificat SERVI porte bien `IP Address:10.0.33.11`. La racine de l'AC du site est desormais versionnee a cote de la carte de la fabric a laquelle elle appartient, et son chemin se DERIVE du symlink `underlay.yml` : il vaut depuis le poste comme depuis un runner. Le role est inscrit dans les quatre registres qui l'exigeaient — couches de deploiement, graphe des dependances, catalogue des services, carte d'orientation. Ce sont les preuves P08, P38 et P48 qui l'ont reclame, chacune a son tour. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 15:30:51 -04:00
| Runner de tenant | `serveur_ops_tenant` | le pouvoir de **configurer** : la voute de l'ecosysteme, deposee CHIFFREE sur son propre runner. Sans elle un runner calcule son inventaire et ne peut rien en faire — chaque role qui demande un secret echoue sur son assertion. N'atteint ni la fabric ni la frontiere |
| Runner de site | `serveur_ops_site` | le pouvoir de **materialiser** : creer et detruire des VM sur la fabric. Detient la voute du SITE, chiffree, et n'entre JAMAIS chez un tenant — reserve a l'ecosysteme de l'hebergeur |
| Resolution | `serveur_resolveur`, `client_resolveur` | UN resolveur recursif par tenant (Unbound), qui recurse depuis la racine et delegue la zone souveraine a PowerDNS. Remplace les N demons locaux d'avant le 2026-08-24 |
| Cache du site | `serveur_cache_site` | designe LE cache que les ecosystemes voisins prennent comme amont : Debian telecharge une fois pour toute la fabric, et le cache ne voit que des requetes agregees. Reserve a l'ecosysteme de l'hebergeur |
forge du site : le marqueur manquant — le genome n etait ouvert a personne MEME PATRON QUE serveur_artefacts + serveur_cache_site : un installateur, un marqueur. Le site rend DEUX services a ses locataires pendant leur jeunesse, les PAQUETS et le GENOME. Le premier etait declare, le second ne l etait pas — alors que D-81 fait de cette forge l autorite dont tout ecosysteme se reproduit. Mesure sur ops-01, premiere machine de la reconstruction de Chezlepro : cache du SITE 10.0.33.21:3142 : OK forge du SITE 10.0.33.11:443 : BLOQUE Le plan du tenant declarait pourtant lire son genome a cette adresse. UNE DEPENDANCE DECLAREE CHEZ LE CONSOMMATEUR, SANS FLUX CHEZ LE FOURNISSEUR — et rien ne le signalait : la garde de matrice de resoudre_flux ne verifie que les paires role->role, jamais un pair symbolique comme voisins_site. POURQUOI UN ROLE A PART : ajouter cet ingress a serveur_forgejo aurait ouvert LA FORGE DE CHAQUE TENANT a ses voisins. La responsabilite appartient a une machine precise, pas au logiciel qu elle fait tourner. Il verifie que la forge ECOUTE vraiment : sans ca il attribuerait l autorite du genome a un port muet, et l ecosysteme venu s y reproduire attendrait sans savoir pourquoi — ce qui est exactement arrive, quinze minutes durant. TROIS GARDES ONT TRAVAILLE : le catalogue a refuse un role qu il ne nomme pas, la carte a corrige ses deux chiffres, et P49 a exige la regeneration du registre. P33 a impose partage: true — le marqueur emprunte l ecoute de serveur_forgejo. Frontiere : 4 objets crees, 0 retire. Verifie depuis ops-01 : 443 OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
2026-08-28 16:15:42 -04:00
| Forge du genome du site | `serveur_forge_site` | designe LA forge dont les ecosystemes de ce site se reproduisent (D-81), et l'ouvre a eux. Marqueur : `serveur_forgejo` installe. |
resolveur du site : le troisieme service prete pendant la jeunesse d un tenant Apres les paquets (serveur_cache_site) et le genome (serveur_forge_site), les NOMS. Meme patron : un installateur, un marqueur. CE QUE CA CORRIGE, mesure sur infra-pki-01, premiere machine a porter l autorite de Chezlepro : DNS BLOQUE un tenant resout chez lui, sa requete ne sort pas 443 sortant OK par adresse apt via le cache OK le mandataire resout a sa place apt s en sortait ; TOUT LE RESTE ETAIT AVEUGLE AUX NOMS. Versionner la cle de signature Smallstep a fait passer une tache et l echec s est deplace d un cran : le depot lui-meme devait etre joint par son nom. POURQUOI PAS L UNBOUND DE LA FRONTIERE : il tourne sur le boitier sans etre un service gere, et le plan du site l avait deja ecrit une fois — un processus n est pas un service. site-dns-01 est deploye par le moteur et verifie par le harnais. OU VIT LA DERIVATION : dans site_inventaire.py, qui connait le plan du site ET le registre des tenants. Le role tourne sur une machine qui n a aucune raison de lire la carte de l hebergeur — la derivation appartient a qui detient les deux sources. PIEGE DE FILTRE, ATTRAPE EN LE BRANCHANT : _supernets_voisins() EXCLUT l instance montee (personne n est son propre voisin). Le site sert TOUS ceux qu il heberge — y compris celui qu on deploie. Reutilise tel quel, il privait de resolution le seul tenant en cours de montage. On reutilise donc la DECOUVERTE partagee sans son filtre : deux recensements divergent, deux filtres non. Le marqueur verifie deux choses : que le resolveur ECOUTE, et que sa liste d autorisation ADMET reellement les tenants. Sans la seconde, la panne chez le locataire ressemblerait a un DNS mort alors que c est une ACL. make verifier : vert. make prouver : CONFORME, 55 OK, 0 echec, 0 saute. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
2026-08-30 12:37:33 -04:00
| Resolveur du site | `serveur_resolveur_site` | designe LE resolveur que les ecosystemes de ce site interrogent tant qu'ils n'ont pas le leur. Marqueur : `serveur_resolveur` installe. |
| Depot de sauvegarde du site | `serveur_backup_site` | designe LE depot ou les ecosystemes de ce site posent leur etat tant qu'ils n'ont pas le leur. Marqueur : `serveur_backup` installe. |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| Agents de flotte | `client_metrique`, `client_journal`, `client_smtp` | collecte et relais sur toute la flotte |
*Rôles retirés (2026-07-04, supersédés ou hors conception)* : `serveur_sendmail`
(→ Postfix), `client_dns` (→ plancher `/etc/hosts` + `client_resolveur`), `client_ldap`
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
(login LDAP au niveau OS, hors design).
> **Ce que « éprouvé » ne dit pas.** La reconstruction prouve que le moteur mène une
> machine nue à l'état voulu. Elle ne dit rien de la tenue d'un service sous charge, ni de
> sa mise à jour dans le temps — deux questions distinctes, et non traitées ici.
## Services centraux
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
Le playbook est toujours `playbooks/groupes/<groupe>.yml`, et le rôle porte le nom du
groupe : la table ne répète donc ni l'un ni l'autre.
| Service | Groupe |
| --- | --- |
| Socle Debian | `serveur_debian` |
| Durcissement (compose onze rôles) | `serveur_durci` |
| step-ca (AC interne + ACME) | `serveur_step_ca` |
| PowerDNS (autoritaire interne) | `serveur_powerdns` |
| OpenLDAP (source de vérité des identités) | `serveur_openldap` |
| Keycloak (SSO OIDC, fédéré à l'annuaire) | `serveur_keycloak` |
| oauth2-proxy (SSO devant une app sans OIDC natif) | `serveur_oauth2_proxy` |
| PostgreSQL | `serveur_postgresql` |
| Redis | `serveur_redis` |
| NGINX — edge : TLS, mandataire inverse, WAF | `serveur_nginx` |
| Postfix (MTA) | `serveur_postfix` |
| Dovecot (mailstore IMAP/LMTP) | `serveur_dovecot` |
| rspamd (antispam, DKIM) | `serveur_rspamd` |
| Prometheus | `serveur_prometheus` |
| Loki | `serveur_loki` |
| Grafana | `serveur_grafana` |
| Icinga 2 + IcingaDB | `serveur_icinga` |
| Icinga Web 2 (+ module BPM) | `serveur_icingaweb2` |
| Forgejo | `serveur_forgejo` |
| Nextcloud | `serveur_nextcloud` |
| Collabora | `serveur_collabora` |
| Dépôt de sauvegarde restic | `serveur_backup` |
## Couche applicative web
La couche applicative web est distincte de l'edge `serveur_nginx` :
- `serveur_nginx` est l'edge : mandataire inverse, terminaison TLS, WAF ; il reçoit le trafic externe et le route.
- `serveur_web_frontal` est la couche présentation web (UI, rendu, assets), servie *derrière* l'edge.
- `serveur_web_dorsal` est la couche application web (API, traitement), consommée par les frontaux.
Le « web » de ces deux groupes est implicite par leur position derrière `serveur_nginx`. Le jour où un service dorsal n'est pas web (worker batch, file, démon), créer un groupe dédié plutôt que d'élargir `serveur_web_dorsal`.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| Couche | Groupe | Ce que le rôle pose |
| --- | --- | --- |
| Présentation web (sites statiques) | `serveur_web_frontal` | nginx + contenu tiré d'un dépôt git souverain (Forgejo), en-têtes de sécurité |
| Application web (webapps dynamiques) | `serveur_web_dorsal` | runtime + service systemd + nginx local — venv/paquets, **zéro conteneur** |
Les deux rôles sont **codifiés depuis les spikes du 2026-07-05** (site Alliance Boréale
pour le frontal ; monregistraire — FastAPI + uvicorn + SQLite — pour le dorsal), et
`web-frontal-01` / `web-dorsal-01` sont **actifs** dans le plan de référence.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
L'exposition ne passe pas par une dépendance de groupe mais par le **plan** : le champ
`expose:` d'une application fait dériver le vhost de l'edge, les SAN de son certificat et
le plancher `/etc/hosts`. Une seule ligne au plan, aucune recopie.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
> **Lacune nommée** : la dépendance causale `serveur_web_frontal` → `serveur_nginx` n'est
> toujours **pas déclarée** dans `docs/dependances-groupes.yml`. Le déploiement d'un
> frontal n'est donc pas refusé quand l'edge est absent — il aboutit à un site que rien ne
> publie. À déclarer.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
## Hôtes du plan de référence
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
Les quatorze hôtes de l'écosystème de référence, **tous à l'état `actif`**, tels que les
déclare `instance/plan/applications.yml`. Un modèle plus petit en porte moins : cette
table décrit une répartition éprouvée, pas un minimum requis.
| Hôte | Applications |
| --- | --- |
| `infra-pki-01` | step-ca |
| `infra-dns-01` | PowerDNS |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| `infra-edge-01` | NGINX (edge) |
| `edge-mta-01` | Postfix, rspamd |
| `infra-mail-01` | Dovecot |
| `idm-01` | OpenLDAP, Keycloak |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| `data-sql-01` | PostgreSQL, Redis |
| `obs-01` | Prometheus, Loki, Grafana |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| `mon-01` | Icinga 2, Icinga Web 2, oauth2-proxy |
| `forge-01` | Forgejo |
| `collab-01` | Nextcloud, Collabora |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| `web-frontal-01` | site statique |
| `web-dorsal-01` | webapp native |
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
| `ops-01` | runner de l'écosystème (`serveur_ops`, `serveur_ops_tenant`) |
> `ops-01` manquait de cette table jusqu'au 2026-09-06, alors que le compte annoncé
> ci-dessus le comptait : quatorze hôtes, treize lignes. C'est le nœud depuis lequel
> l'écosystème se reconstruit **sans le poste de l'exploitant** — la pièce la moins visible
> et la plus structurante de la reconstruction autonome.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
Le courriel occupe **deux** hôtes, et ce n'est pas un détail de taille : `edge-mta-01`
porte ce qui parle à l'extérieur (Postfix, rspamd), `infra-mail-01` ce qui détient les
boîtes (Dovecot). La coupure suit l'exposition, pas le logiciel.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
## Intégrations clientes
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| Intégration | Groupe | Posée sur |
| --- | --- | --- |
| Confiance PKI / ACME | `client_pki` | **tout hôte** (universelle) |
| Métriques Prometheus | `client_metrique` | **tout hôte** (universelle) |
| Journaux vers Loki | `client_journal` | **tout hôte** (universelle) |
| Résolution locale (Unbound) | `client_resolveur` | **tout hôte** (universelle) |
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
| Source d'artefacts (cache apt) | `client_artefacts` | **tout hôte** (universelle) |
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
| Relais SMTP | `client_smtp` | déclaré par hôte, dans le plan |
| Sauvegarde restic | `client_backup` | déclaré par hôte — **obligatoire pour tout détenteur d'état** (P36) |
**Universelle** ne veut pas dire recopiée : une intégration marquée `universelle: true`
dans son `meta/` est posée sur chaque hôte par dérivation, avec l'exemption dérivée du
service rendu (P26 : un hôte n'est pas client de ce qu'il sert). Aucune ligne à écrire
dans le plan.
> **`client_supervision` n'existe pas.** Ce catalogue l'a longtemps annoncé ; il n'a
> jamais eu ni rôle ni playbook, et rien ne l'attend. La supervision s'exerce **sans agent
> sur les hôtes** : contrôles actifs depuis le cœur (`hostalive`) et résultats **passifs
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
> poussés par l'API** par celui qui détient la vérité de terrain. Le nom est retiré plutôt
> que réservé : une case vide dans un catalogue se lit comme une promesse.
> **Qui rapporte l'état des sauvegardes a changé le 2026-09-02.** Tant que le dépôt vivait
> dans l'écosystème, il était le seul à voir ce qui était réellement arrivé, et il
> rapportait pour tout le monde. Depuis que les écosystèmes déposent chez leur **hébergeur**
> — qui héberge des octets chiffrés côté client et ne peut pas les juger — **chaque nœud
> vérifie son propre dépôt distant** et le rapporte lui-même. La vérification suit la clé,
> pas le stockage. `serveur_icinga` se branche sur les deux modèles ; `backup-01` a été
> retiré du plan de Chezlepro, sa VM détruite.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
## Ordre de déploiement — le raisonnement
> **L'ordre exécutable n'est pas ici.** Il vit dans `docs/couches-deploiement.yml` et
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
> `docs/dependances-groupes.yml`, que P08 prouve cohérents (40 groupes classés, aucun
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
> cycle, aucune arête en arrière) et que `make reconstruire` suit. Ce qui suit en est le
> **raisonnement**, utile pour comprendre pourquoi cet ordre-là — et pour placer un
> service nouveau. Les phases sont franchies : les « intégrations à prévoir » ci-dessous
> sont posées.
L'ordre ci-dessous privilégie les dépendances structurantes avant les applications.
### Phase 1 - Fondations transversales
1. `serveur_powerdns`
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
- Service central : DNS interne **autoritaire** de la zone souveraine. La *résolution*
est une couche distincte (`serveur_resolveur` / `client_resolveur`, Unbound), et le
**plancher `/etc/hosts`** posé par `hosts_statiques` précède les deux — c'est lui qui
permet à l'écosystème de se résoudre DNS éteint. Trois couches, pas un choix de design
(`docs/dns-interne.md`).
- Raison : les autres intégrations auront besoin de noms stables plutôt que d'adresses IP.
2. `serveur_step_ca`
- Service central : autorité de certification interne et ACME.
- Intégration à prévoir : `client_pki`.
- Raison : les autres services auront besoin de certificats fiables avant d'être exposés proprement.
3. `serveur_nginx`
- Service central : reverse proxy, terminaison TLS, publication HTTP(S), WAF.
- Intégration à prévoir : publication des services HTTP derrière le proxy.
- Raison : plusieurs services seront consommés par navigateur ou API et doivent passer par un point d'entrée cohérent.
4. `serveur_postfix`
- Service central : MTA (courriel entrant + sortant interne) + relais SMTP.
- Intégration à prévoir : `client_smtp`.
- Raison : les notifications, réinitialisations de mot de passe et alertes doivent fonctionner tôt.
### Phase 2 - Données et identité
5. `serveur_postgresql`
- Service central : base de données relationnelle partagée.
- Intégration à prévoir : bases dédiées par application, comptes applicatifs et sauvegardes.
- Raison : Keycloak, Grafana, Icinga Web 2, Forgejo et Nextcloud peuvent dépendre de PostgreSQL.
6. `serveur_openldap`
- Service central : annuaire interne (source de vérité des identités).
- Consommateurs : Keycloak (fédération/SSO), courriel (Postfix/Dovecot), apps.
- Raison : l'annuaire doit exister avant l'identité fédérée et le courriel.
7. `serveur_keycloak`
- Service central : SSO/OIDC/SAML.
- Intégration à prévoir : applications web derrière `serveur_nginx`.
- Raison : les applications devraient être branchées au SSO dès leur arrivée plutôt qu'après coup.
### Phase 3 - Observabilité minimale
8. `serveur_prometheus`
- Service central : métriques.
- Intégration à prévoir : `client_metrique`.
- Raison : les prochains services doivent être mesurables dès leur déploiement.
9. `serveur_loki`
- Service central : journaux centralisés.
- Intégration à prévoir : `client_journal`.
- Raison : les journaux centralisés accélèrent le diagnostic des services suivants.
10. `serveur_grafana`
- Service central : tableaux de bord.
- Intégration à prévoir : datasources Prometheus et Loki, authentification Keycloak.
- Raison : Grafana consolide les métriques et journaux après leur mise en place.
### Phase 4 - Supervision active
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
11. `serveur_icinga`, puis `serveur_icingaweb2`
- Service central : supervision active, interface web et vues métiers (BPM).
- Intégrations : PostgreSQL, NGINX, et le SSO **via `serveur_oauth2_proxy`** — Icinga Web 2 n'a pas d'OIDC natif.
- Rien à poser sur les hôtes supervisés : contrôles actifs depuis le cœur, résultats passifs poussés par l'API.
- Raison : ces composants forment une même capacité de supervision et cohabitent sur `mon-01`.
### Phase 5 - Services applicatifs internes
12. `serveur_redis`
- Service central : cache et files internes.
- Intégration à prévoir : Nextcloud et autres applications qui en ont besoin.
- Raison : Redis est une dépendance applicative, pas une fondation globale.
13. `serveur_forgejo`
- Service central : forge Git.
- Intégration à prévoir : PostgreSQL, NGINX, Keycloak, SMTP, sauvegardes.
- Raison : la forge devient plus utile après SSO, TLS, SMTP et observabilité.
14. `serveur_nextcloud`
- Service central : collaboration fichiers.
- Intégration à prévoir : PostgreSQL, Redis, NGINX, Keycloak, SMTP, sauvegardes.
- Raison : Nextcloud dépend de plusieurs fondations et doit arriver après elles.
15. `serveur_collabora`
- Service central : édition documentaire en ligne.
- Intégration à prévoir : Nextcloud, NGINX, certificats.
- Raison : Collabora est une extension de Nextcloud et doit venir après lui.
## Règles d'intégration
- Tout service exposé en HTTP(S) doit prévoir son intégration avec `serveur_nginx`.
- Tout service avec authentification humaine doit prévoir son intégration avec `serveur_keycloak`, sauf justification contraire.
- Tout service générant des alertes ou notifications doit prévoir `client_smtp`.
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
- Toute VM de service rejoint `client_pki`, `client_metrique`, `client_journal`, `client_resolveur` et `client_artefacts` — **par dérivation, sans rien écrire** (les cinq intégrations marquées `universelle: true`, P26). La supervision, elle, ne pose rien sur l'hôte.
catalogue : la carte des services avait quatre mois de retard sur le moteur `catalogue-services.md` est le document qu'on lit pour savoir ce que Set-OPS FAIT : l'hebergeur d'un second site, un futur client, un mainteneur qui arrive. Verifie role par role contre roles/, voici ce qu'il disait de faux. - « Capacites futures encore a implementer : collaboration (Nextcloud/Collabora) et couche web (frontal/dorsal) » — les quatre roles existent, collab-01, web-frontal-01 et web-dorsal-01 sont ACTIFS, et les deux roles web sont codifies depuis les spikes du 2026-07-05. - « La federation LDAP n'est pas automatisee dans le role ; Keycloak n'est pas expose » — serveur_keycloak/tasks/federation-ldap.yml existe, et le plan declare `expose: auth.<domaine>`. - `infra-mail-01` : « Sendmail MTA » — c'est Dovecot ; Sendmail est retire depuis le 2026-07-04. La table des hotes datait d'avant la separation edge-mta / mailstore. - `client_supervision` annonce comme integration — n'a JAMAIS eu ni role ni playbook. La supervision ne pose rien sur les hotes : controles actifs depuis le coeur, resultats passifs pousses par l'API (c'est backup-01 qui rapporte l'etat de ses depots). - Une colonne « Role » decorative inventait des noms (`nextcloud`, `client_metriques`) : le role porte le nom du GROUPE. Colonne retiree. Et NEUF roles vivants ne figuraient dans aucune table — le socle, toute la pile courriel, les sauvegardes, Icinga Web 2, oauth2-proxy, Unbound. Deux (`serveur_backup`, `client_backup`) n'etaient nommes NULLE PART. P38 — CE QUE P31 NE POUVAIT PAS VOIR. P31 verifie que tout est nomme et atteignable, pas qu'un document dise vrai : une carte peut etre complete et perimee. P38 confronte le catalogue au code dans les deux sens, et c'est la TABLE qui fait foi des deux cotes : tout role figure dans une ligne de table (la prose ne suffit pas — la pile courriel y etait racontee et introuvable pour qui lit un index), et tout groupe cite en table existe reellement (role, ou playbook de groupe pour `serveur_durci`, qui en compose onze). Deux exemptions nommees : la prose peut citer les roles RETIRES, sinon on ne peut plus ecrire d'ou l'on vient ; et P38 ne juge pas si une description est JUSTE — cela se revoit contre le CHANGELOG, le mecaniser serait se mentir. EPROUVEE EN NEGATIF : rejouee contre la version d'avant, elle echoue en nommant les neuf roles absents et les trois cases fantomes. Le catalogue dit aussi desormais ou il s'arrete : la reconstruction prouve qu'une machine nue atteint l'etat voulu, pas la tenue sous charge ; et l'usage reel de Nextcloud n'est pas consigne comme preuve. Lacune nommee au passage : la dependance causale serveur_web_frontal -> serveur_nginx n'est toujours pas declaree. make prouver : 38 OK, 0 echec, 0 saute. make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 11:07:59 -04:00
- Tout hôte qui **détient de l'état** doit porter `client_backup` (P36 le refuse sinon).
- Tout service utilisant un certificat interne doit dépendre de `client_pki`.
- Tout rôle serveur doit documenter ses ports, secrets, sauvegardes, dépendances et groupes clients associés.
Les groupes clients peuvent être ajoutés aux VM existantes quand le service central correspondant est réellement disponible.
## Dépendances causales
Les dépendances exécutables sont déclarées dans `docs/dependances-groupes.yml`.
Le runbook DNS initial est dans `docs/dns-interne.md`.
Ce fichier sert à deux usages :
- bloquer le déploiement d'un groupe tant que ses prérequis actifs ne sont pas présents ;
- fournir une source exploitable pour les futurs modèles de supervision.
Un hôte peut porter un groupe client à l'état planifié. Le déploiement est refusé tant que le groupe serveur requis n'a pas au moins un hôte actif.