TL;DR
La Citadelle (didou.vfg.lol) affichait « Jeton requis ». Le jeton n'était pas perdu : il vivait dans l'unité systemd du service, sur le VPS, et fonctionnait toujours — aucune régénération n'a été nécessaire, donc aucun alignement cassé. La session a ensuite produit deux gestes durables : une règle sur l'arbre de connaissance (« écrire une fois, servir partout » : méta → blog → MCP → dev) et un skill pour convertir les demandes récurrentes en outils.
Le symptôme, et la bonne question
Une page qui demande un jeton pose une question à laquelle on répond trop vite : « je le régénère ». Or régénérer, c'est réaligner partout — le cockpit qui interroge la Citadelle en local, les configurations MCP, les fichiers d'environnement. La bonne question d'abord : le jeton existe-t-il encore, et où ?
Il existait. Le service n'est pas un conteneur mais une unité systemd : citadelle.service, dont le EnvironmentFile pointe vers un fichier d'environnement au cœur du déploiement de la fleet. Ce fichier déclare un rôle VPS, une écoute en boucle locale sur le port 6767, et le jeton lui-même.
La preuve, pas la déduction
Trois requêtes ont suffi à trancher, et la preuve est plus forte qu'un raisonnement :
Test sur /api/etat | Sans jeton | Avec Authorization: Bearer … |
|---|---|---|
en boucle locale (127.0.0.1:6767) | 401 | 200 |
public (didou.vfg.lol) | — | 200 |
Le jeton est donc valide et identique en local et en public. Aucune écriture sur le VPS : lecture seule, plus les requêtes de contrôle. Un jeton qui répond 200 ne se régénère pas — on le retrouve, et on note son empreinte (pas sa valeur) pour les vérifications futures.
Au passage, une divergence a été constatée sans être corrigée : un fichier Caddy « citadelle » existe mais n'est pas importé, le vrai bloc vivant en ligne ailleurs. Le service marche ; c'est une dette de propreté, pas une urgence. La règle tient : un service « absent » l'est souvent sous un autre nom — vérifier le routage réel avant de conclure.
Ce que la session a fait mûrir : l'arbre de connaissance
Le vrai livrable n'est pas le jeton. C'est la leçon : la façon dont une découverte survit. D'où un flux unique, désormais formalisé en règle :
méta-dépôt (vérité) → blog (trace publique datée) → MCP (service) → dev (consommation)
- Méta : la vérité de travail, versionnée — les passations, les règles, les skills.
- Blog : la mémoire publique, datée. Un article décrit un état passé, jamais l'état présent.
- MCP : le service de lecture qui indexe une liste blanche de chemins versionnés.
- Dev : la consommation, par MCP d'abord, avant toute recherche locale.
Quatre règles en découlent : écrire une fois et servir partout ; ne jamais confondre un article avec la source ; ranger chaque savoir dans un seul étage (une passation n'est pas un article, un article n'est pas une règle) ; et ne jamais recopier une source dans un skill — on pointe vers elle.
Skillifier : arrêter de redemander
Dernier geste, méta par nature : cette demande elle-même (« il faudrait en faire un skill ») devenait un geste récurrent. Un skill dédié la fige : d'une demande récurrente à un outil, avec un second volet — simplifier un skill devenu trop long. Car un skill qui grandit devient un piège : trop long, jamais lu, jamais appliqué. La cible est courte — un déclencheur clair, une procédure de six étapes au plus, zéro duplication. Un catalogue recense les gestes déjà outillés : audit, clôture, carte du système, opérations VPS… et désormais l'arbre de connaissance et la skillification.
Ce qui reste ouvert
Une action, honnêtement notée plutôt que simulée : pour que les skills et les règles deviennent cherchables par MCP, leurs chemins doivent entrer dans la liste blanche — un dépôt voisin, donc hors du périmètre de cette session. En attendant, la passation datée, elle, est déjà servie : les dossiers de passations sont dans la liste blanche depuis longtemps.
Retrouver un jeton sans le casser aura donc servi de prétexte à une question plus large : où écrit-on ce qu'on apprend ? La réponse tient en une phrase — une fois, au bon étage, et tout le reste en découle.