Les planches d’ancrage · série II · feuille 16 / 19

Gardiens et agents

VOS GARDIENS ET VOS AGENTS — quatre trônes chargés, aucun dépouillement

Planche 16 · Gardiens et agents
9 pièces · 3 bâties · 3 partielles · 3 absentes · 0 non établies
Planche 16 — Gardiens et agents

ouvrir la planche en plein écran → · 9 pièces · 11 traverses · 8 marges

La thèse une ligne, écrite dans la matière

Les quatre cardinaux sont bien chargés, dans les deux tableaux, au commit — mais le quorum « trois sur quatre » n'est dépouillé nulle part dans le système servi : le vote de Keli part sur le bus sans aucun abonné, le seul compteur réel vit dans un paquet qu'aucun routeur n'importe, et le 4ᵉ pôle n'existe ni à l'API ni dans son propre gabarit. La non-concentration est une déclaration, pas un mécanisme.

ce que la figure ancre
La figure des « quatre trônes » ancre une vraie fonction, et elle est arithmétique, pas décorative : un seuil n'a aucun sens sans son dénominateur. À 4 trônes avec un seuil de 3, aucun pôle ne peut imposer seul ET aucun pôle n'est superflu (deux suffisent à bloquer) — c'est exactement la non-concentration. Au MÊME seuil de 3 mais avec 3 trônes, le quorum devient l'unanimité : chaque pôle gagne un veto absolu, soit la concentration maximale. La figure enseigne donc, à qui ne connaît pas le système, que supprimer un pôle d'une quaternité n'affaiblit pas un peu sa garantie : il l'INVERSE. C'est ce qui rend le défaut du gabarit grave et non cosmétique. Mais la figure ne devient une fonction que si quelqu'un compte. Ici personne ne compte : le seuil 3 est déclaré 1072 fois côté frontend (30 fois complet), imprimé dans l'enveloppe de propose_decision (canon_sovereignty.py:148), asserté par deux tests — et dépouillé dans aucun chemin atteignable. Aujourd'hui la figure ancre donc une leçon sur les GABARITS, pas un mécanisme de gouvernance.

la même figure, ailleurs
C'est la troisième fois que la MÊME figure se rejoue, et c'est ça qui fait comprendre vite : une arité canonique reproduite incomplètement dans un document secondaire fabrique une fausse arité à l'échelle. (1) La quaternité 4 → le gabarit ORCHESTRATOR_GUEIDE annonçait 3 clés, et 1042 modules portent aujourd'hui une quaternité à trois pôles. (2) L'arbre 8+1 → l'ancienne formule « S1-S5 + S7-S9 » confondait S6 avec l'empaqueteur et escamotait une branche ; CLAUDE.md a dû poser « NE PLUS RE-ARBITRER » et adosser la vérité à arbre_canon.py tenu par 12 tests. (3) Les neuf domaines du catalogue d'agents → encore S6 qui disparaît, remplacé par S0 Communication (agents-database.js:625-635), et le livre reprend la substitution. Trois échelles, un seul mécanisme : le gabarit est le vecteur, pas la négligence. Et la contre-mesure est la même aux trois : une source unique en code, tenue par un cliquet qui ne peut que baisser — ce que arbre_canon.py fait pour l'arbre et audit_quaternite_cardinale.py pour les cardinaux, et que personne ne fait encore pour les neuf domaines du catalogue.

Les marges 8 arbitrages ouverts, entiers
  • Deux registres sur cinq n'ont PAS été mesurés dans cette passe : Type 1 (assistants-fils avec mémoire/caractère/rôle) et Type 5 (rôles usager définis sur mesure). La thèse « les cinq registres existent et se tiennent séparés » reste donc NON_ETABLI à 2/5 : elle n'est vérifiée que pour 2, 3 et 4.
  • Les « neuf domaines » du catalogue ne sont PAS les neuf sphères. Mesuré à agents-database.js:625-635 : Personnel, Entreprise, Institutions, Creation, Communaute, Communication, Formation, MonEquipe, Durabilite. S0 Communication prend la place de S6 Divertissement, qui est absent — et le livre reprend cette liste telle quelle (livre-du-proprietaire.html:1000). C'est la MÊME substitution que governance-init.js assume explicitement à :110 (« 'divertissement': [] — ses services restent explicitement éteints »).⚠ Suite datée 2026-10-03 (brief d’assemblage §4 ③) : ce qui est absent ici, c’est S6 dans une LISTE — les branches du JS, une face, un catalogue. La sphère S6 Divertissement elle-même est massivement bâtie (276 fichiers) ; la confusion vient de l’empaqueteur, un module de présentation nommé d’après S6.
  • config.js:370 dit « 405 agents enrichis » ; le compte réel est 404 (agents-database.js:704 imprime ALL_AGENTS.length, et 405 lignes `agent(` incluent la définition de fonction ligne 80). Dérive d'une unité dans le commentaire de l'instrument lui-même.
  • Les quatre niveaux que le livre numérote 1 à 4 (assistants / spécialistes / conseillers / orchestrateurs) sont L0 à L3 en code. Les « conseillers », décrits comme le niveau 3 et le seul à exiger un point de contrôle, sont L2 — 92 fiches, pas 46.
  • Loi de mesure appliquée : `register_router` avale les ImportError. « Monté dans main.py:NNNN » veut dire déclaré au commit, pas importé sans erreur en prod. Aucune prod n'a été interrogée (lecture seule).
  • Le test agents/core/__tests__/sentient-forest-canon.test.js:85 et :121 vérifie `quaternity_min_consensus === 3`. Il fige une DÉCLARATION, pas un dépouillement : il reste vert alors qu'aucun compteur n'existe dans le système servi. C'est le cas d'école du « test qui fige une dérive reste vert ».
  • Deux copies de chaque cardinal coexistent : agents/core/*.js (source de vérité, non servie — vercel.json sert frontend/ seulement) et frontend/js/agents-core/*.js (copie servable, provenance B-1162 documentée en tête de keli.js:1-12). Les deux portent le même défaut d'arité : agents/core/keli.js:54-64 omet keli comme sa copie.
  • Le chiffre 1072/30/1042 vient de l'arbre de TRAVAIL du 2026-10-03, pas du commit. Le script, lui, est au commit et en CI.
Les blancs déclarés ce que la mesure n’a pas pu voir

Ce qui tient, vérifié ligne par ligne : les quatre fichiers cardinaux sont chargés, dans les DEUX tableaux de governance-init.js (:556-559 et :1195-1198), AU COMMIT — pas seulement dans l'arbre de travail. Trois guides sur quatre (aria.js:322-325, nova.js:275-278, orion.js:137-140) portent bien les quatre clés, self inclus. La garde immunitaire est réellement sur l'horloge unique (immune-system.js:466). Le cliquet de la quaternité existe, tourne, et refuse qu'un module neuf naisse sans keli (ci.yml:79+93 au commit ; sortie du script lue, pas devinée). Le catalogue de 404 fiches existe et se nomme correctement lui-même à l'intérieur de son module (`capability_note_count`). Tout le reste de cette planche descend d'un cran.

Les traverses 11 relations, de source à source
governance-avatar-bridge.js:158
bus — `sovereignty.proposal.created` : une proposition est émise, Keli l'entend
→keli.js:94frontend/js/governance-avatar-bridge.js:158 (publish) ; frontend/js/agents-core/keli.js:94 (bus.on)
keli.js:55
bus — `sovereignty.proposal.voted` : le vote part et personne ne le reçoit
→(aucun abonné)fouille de frontend/js : seul keli.js publie ; 0 `.on('sovereignty.proposal.voted')` hors tests
backend/app (1627 .py) + ~278 .py hors app/
import — le seul dépouillement 3-sur-4 du dépôt
→hf-atom-tools/atom_canon/sovereignty/canon_sovereignty.pygrep *.py du dépôt : seuls hf-atom-tools/atom_canon/tests/test_canon_sovereignty.py et test_living_knowledge.py importent CanonSovereignty
backend/app/main.py:2118-2120
montage — 3 routeurs cardinaux, pas 4
→routers/agents_browser/git show HEAD:backend/app/main.py:2118-2120 ; ls backend/app/routers/agents_browser/
frontend/config.js:371
lecture — getAgents() sert les 404 fiches comme « experts » (registre 2 → registre 1)
→frontend/js/agents-database.jsfrontend/config.js:370-374 (`result.agents = window.ATOMAgentsDB.agents; result.source = 'agents-db'`)
governance-init.js:135 (SPHERE_MODULE_MAP['agents'])
chargement — conditionnel à UNE page, pas global
→agents-database.jsfrontend/js/governance-init.js:135 + :225 (`SPHERE_MODULE_MAP[currentPage] || []`)
immune-system.js:466
inscription au pouls unique (432 ms)
→bio-tick-master.jsfrontend/js/immune-system.js:460-468 ; chargement governance-init.js:314 et :335
stigmergy-membrane.js:258
inscription au pouls unique — jamais faite, timer propre
→bio-tick-master.jsfrontend/js/stigmergy-membrane.js:258 `setInterval(() => this._tick(), VIBE_LONG)` ; aucun `BioTick` dans le fichier
.github/workflows/ci.yml:93
garde CI — le cliquet tourne et refuse (compte sans keli ne peut que baisser)
→scripts/audit_quaternite_cardinale.pygit show HEAD:.github/workflows/ci.yml:79, :93 ; sortie du script collée dans le corps de l'enquête
scripts/audit_quaternite_cardinale.py
périmètre de la garde — le backend n'est pas fouillé
→backend/scripts/audit_quaternite_cardinale.py : ARBRE = RACINE / "frontend" / "js" ; en-tête « Le backend n'est PAS concerné »
governance-init.js:559
le chargeur de Keli omet keli de son propre ORCHESTRATOR_GUIDE
→governance-init.js:2257-2281frontend/js/governance-init.js:559 (charge keli.js) vs :2257-2281 (guide à trois clés)
La nomenclature 9 pièces, chacune avec sa source
1Type 4 — Personas orchestrateurs : les quatre fichiers sont chargés4/4 cardinaux dans les DEUX tableaux de chargement, au commit (pas seulement dans l'arbre)git show HEAD:frontend/js/governance-init.js:556-559 (tableau FULL) et :1195-1198 (tableau léger) ; frontend/js/agents-core/{aria,nova,orion,keli}.js tous suivis par git · confirmé dans le codeaucun pour le chargement — c'est la seule pièce de la planche qui tient telle quelle
2⚑ Le défaut du gabarit à trois pôles : réel, mais le chiffre de la planche est fauxMESURÉ : 1072 modules porteurs du contrat · 30 avec les 4 cardinaux · 1042 sans keli. La planche annonçait « 1114 des 1120 » — FAUX. CLAUDE.md porte encore 1114/1120 : la fiche est périmée, pas seulement la planche. Deux modules ont gagné keli depuis le gel (memory-manager.js, voice-comm.js).mesure relancée le 2026-10-03 : `backend/.venv-tests/Scripts/python.exe scripts/audit_quaternite_cardinale.py` (arbre de travail) ; garde au commit : git show HEAD:.github/workflows/ci.yml:79 + :93 (job `quaternite-cardinale`) ; cliquet BASELINE_SANS_KELI = 1044 dans scripts/audit_quaternite_cardinale.py · confirmé dans le codel'arbre gardé. Le script ne fouille que frontend/js/**/*.js (hors __tests__, node_modules) : le backend n'est sous aucun cliquet. Et la mesure est l'arbre de travail — seul le script est au commit.
3⚑ La contrefaçon à son point le plus pur — confirmée, mais DÉPLACÉE1 fichier cardinal sur 4 s'omet lui-même (Keli) ; 3/4 sont complets. Le planche disait « à cinq échelles, le même pôle manque » : à l'échelle des cardinaux, c'est l'inverse.frontend/js/agents-core/keli.js:74-79 → clés aria, nova, orion, sub_agents, kingdom_rules — aucune clé `keli:` ; MAIS aria.js:322-325, nova.js:275-278, orion.js:137-140 portent les QUATRE clés, self inclus ; et frontend/js/governance-init.js:2257-2281 — le fichier qui charge Keli à sa ligne 559 — déclare aria/nova/orion et omet keli · confirmé dans le coderien à bâtir — deux lignes à ajouter, à deux endroits nommés. Mais la figure change : ce n'est pas une omission répétée partout, c'est une omission exactement là où elle fait le plus mal (le 4ᵉ dans son propre fichier, et le chargeur dans le sien).
4Type 2 — Fiches de compétence : « référence interne, PAS des agents »404 fiches réelles (405 lignes contenant `agent(` moins la définition de fonction ligne 80) ; 9 domaines × 45, sauf Personnel 44 ; niveaux L0=134, L1=135, L2=92, L3=46frontend/js/agents-database.js:80 (`function agent(...)`), :613-624 (ALL_AGENTS, db.agents), :704 (console.log ALL_AGENTS.length) ; chargement : frontend/js/governance-init.js:135 — clé 'agents' de SPHERE_MODULE_MAP, consommée à :225 (`SPHERE_MODULE_MAP[currentPage]`) ; LA FUITE : frontend/config.js:370-374 · confirmé dans le codeDEUX. (1) Le catalogue n'est chargé que sur UNE page — le slug 'agents' — pas en permanence. (2) La règle « on ne les mélange pas » est rompue à l'endroit le plus structurant : config.js:370-374, `getAgents()`, en 3ᵉ repli après l'API et le cache, rend les fiches comme `result.agents` avec `source:'agents-db'` et le journal « experts chargés depuis AgentsDB ». Le registre 2 est servi à l'écran comme registre 1 — par la source unique de vérité.
5Type 3 — Processus de fond « qui tournent en permanence »26 slugs dans GOVERNANCE_PAGES (governance-init.js:51-64) contre 166 pages .html à la racine de frontend/ suivies par git. Le pouls, la garde immunitaire et la stigmergie ne tournent que sur ces 26.frontend/js/immune-system.js:460-468 (`bioTick.register('immune', ..., GUARDIAN_PULSE)`) ; chargement governance-init.js:314 (immune), :333 (stigmergy-membrane), :335 (bio-tick-master) — tous dans le tableau conditionnel `needsFullGovernance ? [...]` déclaré à :232 ; le tableau léger les saute (commentaire explicite « bio-tick-master.js — skipped for lightweight pages ») ; frontend/js/stigmergy-membrane.js:258 · confirmé dans le code« en permanence » et « pouls unique » sont tous deux trop forts. (1) Hors des 26 slugs de gouvernance, les trois ne sont pas chargés du tout. (2) stigmergy-membrane.js:258 lance son PROPRE `setInterval(VIBE_LONG)` et ne s'inscrit jamais au BioTickMaster — la « coordination sans chef » a sa propre horloge. Seul immune est sur l'horloge unique.
6Le mur entre les cinq registres1 point de rupture mesuré, dans le fichier que CLAUDE.md désigne comme source unique de véritétenu dans le module (agents-database.js:640, :648, :679 parlent de `capability_note_count`) + un test de frontière frontend/js/__tests__/unit/agents-database-system-boundary.test.js ; rompu à frontend/config.js:370-374 · confirmé dans le codele mur tient partout sauf à la porte d'entrée. Et seuls 3 des 5 registres ont été mesurés dans cette passe (voir marges).
7⚑ La FONCTION du 4ᵉ trône — le vote — n'est dépouillée par personne1 émetteur, 0 récepteur ; `self._proposals` = dict en mémoire (canon_sovereignty.py ~:101), zéro table ; zéro import de canon_sovereignty dans les DEUX arbres de backend/frontend/js/agents-core/keli.js:50-62 (vote() publie `sovereignty.proposal.voted`) ; fouille de frontend/js entière : AUCUN `.on('sovereignty.proposal.voted')` — les seules autres occurrences sont catalogue-modules.json:11008 (données) et 2 tests ; le seul dépouillement réel est hf-atom-tools/atom_canon/sovereignty/canon_sovereignty.py:29 + :183-207 (`quaternity_check = votes_yes >= QUATERNITY_MIN_CONSENSUS`), importé par les SEULS tests test_canon_sovereignty.py et test_living_knowledge.py · confirmé dans le codele compteur. La chaîne amont existe (governance-avatar-bridge.js:158 publie `sovereignty.proposal.created`, keli.js:94 l'écoute) ; c'est le RETOUR qui tombe dans le vide. La « règle des quatre trônes » du livre (livre-du-proprietaire.html:962) est une surface déclarée sans producteur du côté servi.
8⚑ La quaternité n'existe pas à l'API — trois routeurs cardinaux sur quatre3 routeurs cardinaux montés / 4 ; le backend ne connaît Keli que comme une rencontre 3D d'accueil, jamais comme un votantgit show HEAD:backend/app/main.py:2118-2120 monte aria_browser_router, nova_browser_router, orion_browser_router ; `ls backend/app/routers/agents_browser/` → 3 fichiers .py, pas de keli_browser_router ; `keli` dans backend/app/ = 3 fichiers, et dans backend/app/core/bus_topics.py uniquement `onboarding.3d.keli_met` (:666, :674, :1387) · confirmé dans le codele 4ᵉ routeur, et un endpoint de proposition/vote. Côté serveur, la quaternité EST une trinité.
9Le brise-circuit « Protocole-999 » — nommé dans CETTE section du livre0 module frontend de dispersion. `git ls-files frontend/js | grep -i '999|circuit|disperse|kill'` → circuit-breaker.js (S2-08, protection de cascade sur 5 circuits, chargé governance-init.js:375) + circuit-uplink.js. Aucun des trois degrés partiel/sectoriel/total, aucun compte à rebours, aucun code d'accès en code.livre-du-proprietaire.html:1030 le décrit (code d'accès, fenêtre d'annulation, trois degrés, compte à rebours, signal de couleur) ; seule occurrence exécutable trouvée : backend/app/data/master_map_data.py:104 — une LIGNE DESCRIPTIVE {"code":"PROTOCOL999","name":"Protocol-999","version":"V68","description":"Brise-circuit d'urgence"} — lue par backend/app/routers/foundation.py, monté git show HEAD:backend/app/main.py:2202 · confirmé dans le codetout l'organe. Une fiche lisible par API, pas un bouton. Périmètre fouillé : frontend/ (js + html) et backend/app/ ; NON fouillé : les ~278 .py hors backend/app/.
Le lexique de cette planche 14 termes à deux registres · 8 avec un jumeau

On ne remplace pas le nom canon, on le double : le terme reste l’autorité, la glose est une poignée. Le lexique entier est sur sa propre page.

membrane (membrane_service, S9 lisible)L'organe qui décide si une lecture passe, pas encore, ou jamais — en croisant où l'on lit, qui lit, son cheminement, son rang et son rôle.membranes A · B · C (conduit_membranes) — Les trois seuls passages déclarés du système : ce qui entre, ce qui remonte vers le plus large, et ce qui sort vers un lecteur.
agent (type de nœud)Le genre de place qu'occupe un agent qui agit au nom de quelqu'un, avec l'endroit auquel il est rattaché.
communaute (type de nœud)Le genre de place qu'occupe un groupe, entre les personnes et le centre de tous.
S6 DivertissementC'est le sujet de tout ce qu'on consomme sans l'avoir fabriqué : regarder, écouter, jouer.
Creation (sacred_name de S7)registre spirituelC'est le nom de registre sacré que porte la sphère de la formation.Création (S4) — C'est le sujet de ce qu'on fabrique soi-même.
bus (valeur de canal)C'est la valeur qui dit : ce message ne sort pas de la machine, il passe d'un module à l'autre dans le même programme.bus (l'organe de distribution) — C'est la pièce de code qui reçoit un message et le remet à tous ceux qui s'y sont abonnés.
bus (l'organe de distribution)C'est la pièce de code qui reçoit un message et le remet à tous ceux qui s'y sont abonnés.canal — C'est par quel moyen un message voyage : le réseau interne, le web, le courriel, le SMS, l'écran, et onze autres.bus (valeur de canal) — C'est la valeur qui dit : ce message ne sort pas de la machine, il passe d'un module à l'autre dans le même programme.
porteUn passage qu'on traverse vraiment : il faut une permission pour le franchir, et il laisse une trace de ce qui est passe.porte (Porte de la Connaissance, knowledge_gate/porte.py) — Elle decide combien d'un document on montre a quelqu'un — de rien du tout jusqu'au texte complet — en six crans, et par defaut elle ne…
porte (Porte de la Connaissance, knowledge_gate/porte.py)Elle decide combien d'un document on montre a quelqu'un — de rien du tout jusqu'au texte complet — en six crans, et par defaut elle ne montre rien.porte — Un passage qu'on traverse vraiment : il faut une permission pour le franchir, et il laisse une trace de ce qui est passe.fenetre — Une vue sur ce qui se passe ailleurs : on voit, on ne prend rien, et rien ne change de main.
gardeUn controle pose sur le chemin d'une action, qui la laisse passer ou la refuse.
membrane (membrane lisible, S9)registre spirituelElle decide, pour chaque lecture, si la personne peut voir la chose maintenant, pas encore, ou jamais — et elle ne rend pas un simple oui/non : elle dit lequel des trois.MONDES — La liste fermée des sept espaces où une chose peut avoir une adresse, et deux façons d'écrire le même nom y comptent pour deux espaces…membrane (routeur /api/v1/membrane — passages entre les 3 mondes) — Elle enregistre les transferts d'un contenu d'un espace vers un autre — du prive au collectif, du collectif au public — et permet de les…
membrane (routeur /api/v1/membrane — passages entre les 3 mondes)Elle enregistre les transferts d'un contenu d'un espace vers un autre — du prive au collectif, du collectif au public — et permet de les annuler.membrane (membrane lisible, S9) — Elle decide, pour chaque lecture, si la personne peut voir la chose maintenant, pas encore, ou jamais — et elle ne rend pas un simple…
KeliLe quatrieme interlocuteur : celui qui tient le cote intime et verifie qu'une decision respecte les regles du projet avant qu'elle passe.
cliquetUn compteur à sens unique : il laisse passer ce qui améliore et fait échouer la construction dès qu'on empire.

Matière : PLANCHES-MATIERE-4-OUBLIEES-2026-10-03.json (sha256 7a2a3299f5ed) — planche de matière « VOS GARDIENS ET VOS AGENTS — quatre trônes chargés, aucun dépouillement ». Générée par scripts/generer-planches-ancrage.py ; la version « avant » (avant le passage du sceptique) que la matière conserve n’est pas dessinée — c’est la version dégradée au doute qui l’est, et les marges portent les dégradations.