TL;DR
- Quatre PR ouvertes le même soir (#46–#49) proposaient quatre visions concurrentes du même problème : publier le blog avec des subagents Cursor.
- L'audit montre des conflits de noms, des gates prod insuffisants, un routeur MCP dupliqué, et des playbooks SCP hérités de l'incident catalogue du 9 juillet.
- La consolidation livrée en PR #50 remplace tout cela par six personnages : Gandalf (orchestre), Palantír (sources), Bilbo (barde), Galadriel (relecture), Sauron (red team), Samwise (seul publisher).
- Le role-play sert d'interface mémorable ; la sécurité repose sur un dossier scellé SHA-256,
prepublish, dry-run, et autorisation explicite pourblog.vfg.lol. - Activation documentée :
docs/SETUP-CURSOR-WSL-BLOG-AGENTS.md+ script WSLscripts/setup-wsl-blog-agents-env.sh.
1. Pourquoi une « Communauté » plutôt qu'un magicien omnipotent
Le blog VFG n'est pas qu'un dépôt markdown. C'est la mémoire narrative du Royaume — série d'audits Gandalf de juillet 2026, handoffs de sessions agentiques, chronique des gates R0–R3. Quand quatre agents cloud ouvrent quatre PR en quelques secondes pour « gérer la publication », on recrée le chaos du doublon Citadelle : même intention, quatre implémentations, zéro SSOT.
La métaphore Tolkien n'est pas décorative. Elle reprend une convention déjà ancrée dans le corpus :
- Gandalf le Documenteur — sommaire de l'audit du Royaume (
2026-07-07-gandalf-sommaire-audit-royaume.md). - L'Œil / Sauron — red team implicite dans les articles « question du magicien » (QCM traçable).
- La Communauté — délégation claire : personne ne porte seul l'Anneau de la publication prod.
Le principe technique est inverse du one-shot « Bard Magician » : un rôle = un pouvoir = un effet externe maximum.
2. Méthode de recherche — comment les quatre PR ont été auditées
2.1 Périmètre
| PR | Branche | Fichiers | Lignes ajoutées |
|---|---|---|---|
| #46 | cursor/blog-publisher-3063 | bard-magician.md | 28 |
| #47 | cursor/blog-bard-magician-e88c | bard-magician.md | 83 |
| #48 | cursor/create-vfg-mcp-subagent-65e4 | vfg-mcp-router.md | 80 |
| #49 | cursor/blog-deploy-guardian-subagent-c0fe | 5× blog-*.md | 384 |
2.2 Grille d'audit
Chaque PR a été lue contre :
- SSOT publication —
docs/WORKFLOW-PUBLICATION-BLOG.md,scripts/publish-local.mjs,scripts/lib/mcp-auto-publish.mjs. - Incident prod —
handoffs/2026-07-09-incident-prod-articles-style-regression.md(SCP depuis mauvais cwd, catalogue 284 vs 346). - Conventions Cursor 2026 — frontmatter
name,description,model,readonly,is_background(pas de champtools:natif). - MCP live — serveurs
vfg-docs,vfg-feed,vfg-gate,vfg-commands; hotfix catalogue/runbook sur feed, deploy sur gate. - Testabilité — présence de tests CI vérifiant structure et gates.
2.3 Synthèse par PR
PR #46 — minimaliste, trop monolithique
Points forts : intention de sécurité, handoff structuré (Intent / Changed / Validation / Deployment / Risks), rappel « prepare ≠ deploy ».
Points faibles : un seul agent cumule rédaction, contrôle et publication ; aucune matrice local/prod ; le « structural check Node » annoncé dans le corps de PR n'est pas livré dans le dépôt.
Verdict : rework — bonne intention, mauvaise séparation des pouvoirs.
PR #47 — la meilleure base éditoriale, toujours monolithique
Points forts : draft par défaut, recherche sourcée, dry-run publish-local.mjs, MCP-first, références workflow, interdiction secrets.
Points faibles : même fichier bard-magician.md que #46 ; rôle auteur + publisher non séparé ; conflit direct avec #49.
Verdict : rework — conserver le fond éditorial, éclater les rôles.
PR #48 — routeur MCP utile mais mal positionné
Points forts : discipline GetMcpTools → CallMcpTool, anti-patterns grep/shell, fallback si MCP down.
Points faibles : duplique .cursor/rules/vfg-mcp-first.mdc (déjà alwaysApply: true) ; table hotfix simplifiée à tort (vfg_hotfix_* sur gate only) ; chevauche le futur blog-magician de #49.
Verdict : rework — absorber la discipline dans Palantír/Samwise, ne pas ajouter un septième routeur.
PR #49 — meilleure architecture, gates prod insuffisants
Points forts : split bard / publier / magician / guardian / controller ; leçons incident 2026-07-09 ; chemin admin API canonique ; MCP-first.
Points faibles :
- Template frontmatter avec
status: pubpar défaut (inverse de #47). - Aucune autorisation humaine explicite avant prod.
- Commandes dev incorrectes (
node src/server.jsvsnpm run dev). --skip-pingsur prod normalisé.- Playbook SCP encore central (classe d'incident).
- Zéro test automatisé.
Verdict : rework — garder la taxonomie, durcir les gates, ajouter tests.
3. Architecture retenue — la Communauté de l'Anneau
3.1 Distribution des rôles
| Personnage | Agent Cursor | Phase | Readonly | Effet externe |
|---|---|---|---|---|
| Gandalf | gandalf-blog-orchestrator | orchestrate | oui | aucun |
| Palantír | palantir-blog-scout | research | oui | aucun |
| Bilbo | bilbo-blog-bard | draft | oui | aucun |
| Galadriel | galadriel-blog-editor | edit | oui | aucun |
| Sauron | sauron-blog-red-team | gate | oui | aucun |
| Samwise | samwise-blog-publisher | publish | non | publish ciblé |
Fichiers : .cursor/agents/<nom>.md
Contrat machine : config/blog-roleplay-agents.json
3.2 Quête standard
demande utilisateur
↓
Gandalf — cadre intention + cible
↓
Palantír — registre faits datés + doublons
↓
Bilbo — Markdown status:draft
↓
parent — écrit le fichier ; draft→pub si prod autorisée
↓
Galadriel — APPROVE_DRAFT
↓
Sauron — PASS sur SHA-256 exact
├─ brouillon → FIN
└─ prod explicite → Samwise
↓
prepublish + dry-run
↓
MCP OU Admin API (un seul)
↓
API + URL publique vérifiée
3.3 Loi de l'Anneau (gates non négociables)
- « Rédige », « raconte », « prépare » ⇒ brouillon, jamais prod.
- Prod ⇒ phrase utilisateur du tour courant nommant
blog.vfg.lolou « prod ». - Un mot de passe présent ≠ autorisation.
- Un seul transport de publication par article.
- Jamais hotfix fleet, SCP, rsync, ou
git pushcomme publication. - Toute correction après Galadriel/Sauron ⇒ nouvelle empreinte SHA-256.
3.4 Dossier scellé (extrait)
article_path: devblog/posts/workflows-agentiques/2026-07-12-….md
content_sha256: <sha256>
target: prod
desired_status: pub
user_authorization_quote: "Publie sur blog.vfg.lol …"
production_authorized: true
galadriel_verdict: APPROVE_DRAFT
sauron_verdict: PASS
4. Ce qui a changé dans le dépôt (PR #50)
| Zone | Changement |
|---|---|
.cursor/agents/ | 6 subagents role-play |
config/blog-roleplay-agents.json | manifeste + RFC MCP |
test/blog-roleplay-agents.test.mjs | 6 tests structurels |
.cursor/rules/vfg-mcp-first.mdc | hotfix feed vs gate corrigé |
.cursor/rules/blog-roleplay-community.mdc | rappel always-on workflow |
docs/BLOG-AGENTS-ROLEPLAY.md | architecture + audit |
docs/PLAN-BLOG-AGENTS-ROLEPLAY.md | roadmap phases 0–4 |
docs/SETUP-CURSOR-WSL-BLOG-AGENTS.md | activation IDE |
scripts/setup-wsl-blog-agents-env.sh | template env WSL |
docs/WORKFLOW-PUBLICATION-BLOG.md | retrait --skip-ping prod |
5. MCP — aujourd'hui et demain
5.1 Outils existants (allowlist)
| Agent | Outils MCP | Effet |
|---|---|---|
| Palantír | vfg_boot_context, vfg_search_docs, vfg_ssot_get, vfg_timeline, vfg_graph_neighbors, vfg_health, vfg_snapshot, vfg_acts, vfg_events_recent, vfg_gate_health | lecture |
| Samwise | vfg_commands_devblog_publish | publish |
Configuration client : .cursor/mcp.json → endpoints VPS Gandalf.
5.2 RFC — six outils vfg_blog_* (non déployés)
Proposés pour un futur serveur MCP blog dédié :
| Outil | Rôle |
|---|---|
vfg_blog_context | Registre sources (Palantír) |
vfg_blog_validate | PASS/BLOCK (Sauron) |
vfg_blog_preview | Preview locale |
vfg_blog_publish | Publish idempotent |
vfg_blog_verify | Preuve URL + API |
vfg_blog_recovery_plan | Plan recovery non destructif |
Ils ne sont pas annoncés comme disponibles tant qu'ils ne sont pas implémentés côté vfg-commands / VFVFGPT.
6. Activer chez soi — Cursor et WSL
6.1 Windows (Cursor)
- Pull la branche contenant PR #50 (ou
mainaprès merge). - Définir
MCP_COMMANDS_AUTH_TOKENetTELEMETRY_AUTH_TOKEN(variables utilisateur). - Reload Cursor.
- Vérifier MCP verts dans le panneau outils.
- Tester :
/gandalf-blog-orchestrator prépare un brouillon sur …
6.2 WSL
bash scripts/setup-wsl-blog-agents-env.sh
source ~/.config/vfg/blog-agents.env
npm test
node --test test/blog-roleplay-agents.test.mjs
Guide complet : docs/SETUP-CURSOR-WSL-BLOG-AGENTS.md.
6.3 Stack locale (preview)
npm run dev # :5195 lecture
node --env-file=.env admin/server.mjs # :5220 admin
node scripts/publish-local.mjs <article.md> --dry-run
7. Tests — preuve que la suite est vérifiable
Contrairement aux PR #46–#49, la consolidation inclut test/blog-roleplay-agents.test.mjs :
- frontmatter Cursor valide sur les 6 agents ;
- Samwise = seul rôle à effets externes ;
- gates
prepublish, dry-run, PASS Sauron présents dans les prompts ; - allowlist Palantír = manifeste JSON ;
- audit doc cite les PR #46–#49 ;
- workflow prod sans
--skip-ping.
Commande :
node --test test/blog-roleplay-agents.test.mjs
Résultat attendu : 6/6 pass.
8. Plan d'adoption (résumé)
| Phase | Contenu | Gate |
|---|---|---|
| 0 | Merge PR #50, fermer #46–#49 | tests verts |
| 1 | Env Windows/WSL + brouillon test | fichier draft |
| 2 | Publish prod contrôlé | URL vérifiée |
| 3 | MCP vfg_blog_* sur VPS | 3 outils live |
| 4 | Hooks Cursor failClosed | tests hors blog |
Détail : docs/PLAN-BLOG-AGENTS-ROLEPLAY.md.
9. Risques résiduels
| Risque | Mitigation actuelle | Suite |
|---|---|---|
Cursor readonly ne bloque pas MCP mutatif | prompts + manifeste | hooks phase 4 |
| Quatre PR ouvertes | fermer après #50 | FG |
| Série audit Gandalf 07/07 cite CI auto-deploy | datée — local-first depuis 08/07 | note dans articles historiques |
| Article historique « 278 articles deploy auto » | ne pas réutiliser comme état live | Palantír recoupe dates |
10. Conclusion — du folklore operatoire
La Communauté de l'Anneau du blog est une réponse à une leçon déjà écrite dans le Royaume : les garde-fous doivent mordre même leurs auteurs (cf. audit pipeline blog du 7 juillet — le scanner de secrets et le gardien du temps avaient bloqué la propre PR du magicien).
Quatre PR concurrentes, c'était quatre anneaux forgés en parallèle. La consolidation en PR #50 n'en garde qu'un — porté par Samwise, scellé par Sauron, raconté par Bilbo, observé par Palantír, relu par Galadriel, coordonné par Gandalf.
Le role-play rend le workflow invocable : /gandalf-blog-orchestrator est plus mémorable qu'un script bash. Les tests et le manifeste JSON rendent le workflow auditable. La documentation Cursor/WSL le rend activable dès demain matin.
Annexes
A. Liens
B. Invocations types
/gandalf-blog-orchestrator prépare un récit sourcé — brouillon uniquement
/palantir-blog-scout établis les faits sur la publication MCP blog
/bilbo-blog-bard transforme ce registre en article accessible
/galadriel-blog-editor relis ce candidat
/sauron-blog-red-team audite ce SHA pour prod
Prod (uniquement si voulue) :
Publie sur blog.vfg.lol l'article devblog/posts/…/mon-article.md
C. Références incident
Ne jamais SCP articles.json depuis _a-ranger-citadelle/ — voir handoff 2026-07-09-incident-prod-articles-style-regression.md.