---
title: "STATUS — VFG_PT__ — 2026-10-08"
date: 2026-10-08
time: "09:31"
author: agent
publishedBy: code
status: pub
tags: ["status", "vfg-pt"]
---

# STATUS — VFG_PT__

_Article généré automatiquement depuis le STATUS.md de VFG_PT__ — 2026-10-08. Les chemins locaux, les hôtes internes et les noms de variables ont été neutralisés._

# STATUS — Workspace VFG

> État vivant au **2026-10-07 clôture** (~08:15 Europe/Paris). Vérité instantanée : `node _scripts/dev-meta.mjs status`.

## Clôture globale swarm — 2026-10-07 (~08:15)

- **Handoff** : `docs/handoffs/2026-10-07-cloture-session-swarm-handoffs-prs-jah-lots.md` (BLOCKERS / DOUBTS / AUTO_OK).
- **Synthèse matin** : `61d8450` · `docs/handoffs/2026-10-07-swarm-synthese-matin.md`.
- **Sync** : `secure-diff` SAFE puis `pull` + `push` repos ahead (méta branche `docs/agent-presence-live-cleanup-plan`, Hero, Matrice, Kit, VFVFGPT doc, IdeaPit, Grimoire) — **sans** WT telemetry VFVFGPT.
- **Blog article** : metaprojet « Swarm du 7 octobre… » — voir handoff blog post-publish.
- **Exclusions** : VFJah_Messenger WIP · Lucien · R3 exécutés.

## LOT-08 go-reste — 2026-10-07 (~08:45)

- **Blog handoffs** : **unknown 77→0** · **17 open** (canon) · commit blog `eca1996` · relais `docs/handoffs/2026-10-07-go-reste-r3-prep.md`.

## Swarm Jah lot — 2026-10-07 (blog redirect live)

- **Blog** : `/jah-lot` → **308** `/jah-lots` live (`e1f878e`) · seed stamp **2026-10-07** · Jah readyz **4.0.32**
- **Handoff** : `RAPPORT-EXPERIENTIEL/handoffs/2026-10-07-swarm-jah-lot-update.md`

## Swarm handoffs+PR 2026-10-07 ~07:40 (synthèse matin)

**Périmètre** : 10 lots swarm doc/mesure · **aucun push** méta/Hero/Matrice/Kit (merges GitHub distants uniquement). Handoff synthèse : `docs/handoffs/2026-10-07-swarm-synthese-matin.md`.

| Bloc | Fait mesuré | Preuve / relais |
|------|-------------|-----------------|
| **Inventaire** | Table unique handoffs retard/en cours | `docs/handoffs/2026-10-07-swarm-handoffs-inventaire.md` |
| **LOT-09/01/02/04** | Boot léger · INDEX 07/10 · STATUS matin · blog 8→1 `open` | `docs/BOOT-AGENT-LEGER.md` · `docs/handoffs/2026-10-07-swarm-lot01-02-index-status.md` · miroir LOT-04 |
| **VFVFGPT hub** | STATUS « EN COURS » **25 → 0** actifs + candidats/R3 | `_dev/VFVFGPT/STATUS.md` · `docs/handoffs/2026-10-07-swarm-vfvfgpt-handoffs.md` |
| **VFG_Hero HERO-05** | **D1–D3** clos (hubs · archive 44 · INDEX ~15) · **`1676d8d`** · **ahead 3** vs `origin/main` | `docs/handoffs/2026-10-07-swarm-hero-handoffs.md` (repo `_live/VFG_Hero`) |
| **PR mergées (gh)** | Méta **#12** · VFGate **#14+#16** · dispatcher **#1** · questival **#2** | `docs/handoffs/2026-10-07-swarm-prs-general.md` · `…-swarm-prs-live.md` · `…-swarm-prs-hub-docs.md` |
| **Matrice + Chataigne** | Redis hang fix **172/172** tests · DMX noisette live **421/423** vs SSOT 255–257 (reco FG) | méta `2a4a7d3` · `docs/handoffs/2026-10-07-swarm-matrice-chataigne.md` |
| **VFG-Kit** | Resync chemins tiers · liens morts **57 → 4** | commit Kit `e4090a5` local · `docs/handoffs/2026-10-07-swarm-vfg-kit-docs.md` |
| **IdeaPit + Grimoire** | Inventaire tests/inbox · `:5192`/`:5193` down · **21/21** Grimoire | `docs/handoffs/2026-10-07-swarm-ideapit-grimoire.md` |
| **Méta #10** | manifest OK · declutter 78 candidats dry-run · repos restants | `docs/handoffs/2026-10-07-swarm-meta-general.md` |

**R3 FG restants (sans détail secrets)** : rotation tokens/logs · tâche Windows admin **`VFG-Dispatcher`** · timeline **#122** (502) · blog dérive **#123** / L3.7 relecture · push branches (LOT-10, Hero ahead 3, blog behind 553) · Hero prod 401 · VPS-CD · migration tiers — inventaire § « Blockers R3 ».

## Snapshot matin 2026-10-07 (inventaire swarm + lots doc)

| Signal | Mesure (source) |
|--------|-----------------|
| **Inventaire handoffs** | Livré — `docs/handoffs/2026-10-07-swarm-handoffs-inventaire.md` (10 lots plan, 11 `open` INDEX au 05/10, blockers R3) |
| **Dispatcher Telegram→A/B/C→code** | Livré et **poussé** 05:35 — VFGate / vfg-dispatcher / méta `0/0` — `docs/handoffs/2026-10-07-0535-cloture-session-dispatcher-bughunt-verification.md` |
| **FG_Pulse `:4330`** | **DOWN** — `Invoke-WebRequest http://[hôte interne]/…` → connexion refusée (2026-10-07 ~07:18) ; repo `3M` local (`dev-meta status`) |
| **Blog checkout** | **behind 553** / ahead 3 vs `origin/main` — `git -C _docs/repos/RAPPORT-EXPERIENTIEL rev-list --left-right --count origin/main...HEAD` → `553 3` |
| **INDEX handoffs méta** | Rafraîchi LOT-01 — **68** handoffs, +12 entrées `2026-10-07` — `docs/handoffs/INDEX.md` |
| **Boot agents légers** | `docs/BOOT-AGENT-LEGER.md` (LOT-09) |
| **LOT-04 · Redis Matrice · VFGate WT** | Livré local — triage blog 8→1 open (`docs/handoffs/2026-10-07-swarm-lot04-triage-open-mirror.md`) · Matrice Redis **172** tests OK (`2a4a7d3`) · relais PR LIVE/worktrees (`docs/handoffs/2026-10-07-swarm-prs-live.md`) |

**R3 FG (bref, sans détail secrets)** : rotation tokens / logs · tâche Windows admin `VFG-Dispatcher` · timeline **#122** (502) · blog dérive **#123** · push lot-10 · migration tiers · Hero prod 401 · VPS-CD — voir inventaire § « Blockers R3 ».

## Swarm LOT-01/02 — 2026-10-07 ~07:25 (INDEX + STATUS · LOCAL, pas de push)

- **LOT-09** : `docs/BOOT-AGENT-LEGER.md` créé.
- **LOT-01/02** : INDEX + snapshot STATUS ; handoff `docs/handoffs/2026-10-07-swarm-lot01-02-index-status.md`.
- **Interdits** : Jah Messenger, Lucien, push, R3.

## Swarm #7/10 — 2026-10-07 ~07:20 (Matrice + Chataigne · LOCAL, pas de push)

- **Lot** : `FG_CleanDaMatrix` + `ChataigneProjects` (manifeste) ; `FG_RebootDaMatrix` optional **absent**.
- **Livré** : resync STATUS Matrice (P1a/b/c sur `main`, EVT-0053) · mesure DMX live noisette **421/423** vs SSOT **255–257** · STATUS Chataigne + backlog P1.
- **Reco FG** : amender SSOT mapper → 421–423 (G2 PASS sur live) — non appliqué sans tranchage.
- **Reste** : E4-DMX FG · P1-REST (`useGameCheats`→ADMIN + T5 bascule) · MAT-03.
- **Handoff** : `docs/handoffs/2026-10-07-swarm-matrice-chataigne.md`.
- **Interdits** : pas Jah, pas Lucien, pas push, pas secrets, pas prod.

## Swarm #2/10 — 2026-10-07 ~07:15 (VFVFGPT hub · doc-only · pas de push)

- **Lot** : triage STATUS hub — 25 « EN COURS » → 0 actifs + candidats + table R3 ; refs handoff mortes réparées.
- **Repo** : `_dev/VFVFGPT` — `STATUS.md` · `data/workspace-backlog.json` (6 sprints juin `superseded`, 8 R3 `blocked`) · handoff daté.
- **Handoff** : `_dev/VFVFGPT/docs/handoffs/2026-10-07-swarm-vfvfgpt-handoffs.md` · miroir `docs/handoffs/2026-10-07-swarm-vfvfgpt-handoffs.md`.
- **Interdits** : pas Jah/Messenger, pas Lucien, pas push, pas prod forcée.

## Swarm PR #2/3 LIVE — 2026-10-07 ~07:30 (VFGate · merges distants)

- **Mergées** : `VFGate` **#16** (delta7 résiduel, conflits résolus, **243/243** tests) · **#14** (docs erratum topologie, STATUS aligné main).
- **Scan LIVE** : Hero · IdeaPit · Grimoire · Pulse · Matrice · Cockpit · GandalfIdle → **0 PR ouverte** ; ChataigneProjects sans git ; FG_Chronos sans remote à la racine méta.
- **Handoff** : `docs/handoffs/2026-10-07-swarm-prs-live.md` · relais `git pull` sur `_live/VFGate` · pas de deploy prod.
- **Hors scope** : VFJah_Messenger · PR stale VFJahMsnPlus / MatrixToDMX / VFGServer.

## Swarm PR 2026-10-07 (lots #1–#3 · consolidation)

- **Mergées** : `VFG-Workspace` **#12** (squash `5843937e`, lot #1) · `vfg-dispatcher` **#1** (merge `aaffdbb`, tests dispatch-status **9/9** post-pull) · `questival` **#2** (squash, lot #3).
- **0 PR** sur sites · blog · ai-usage-hub · TDAC · atlas · Hero · Matrice · VFVFGPT (scan `gh`).
- **Reste ouvert** : ~~`VFGate` **#14** · **#16**~~ → **clos lot #2/3** · 3 PR stale (`VFJahMsnPlus` #2, `MatrixToDMX` #1, `VFGServer` #1).
- **Écart** : handoff 0535 cite **PR #406** VFVFGPT — **404** sur GitHub (branche locale ?).
- **Handoffs** : `docs/handoffs/2026-10-07-swarm-prs-general.md` · `…-swarm-prs-hub-docs.md` · `git pull origin main` méta recommandé · **pas de push** ce lot.

## Swarm PR #1/3 — 2026-10-07 ~07:10 (hub/docs/méta · merge distant)

- **PR #12** `VFG-Workspace` (docs agentique / dispatch observabilité) : **squash-mergée** (`5843937e`) · **0 PR ouverte** sur le méta remote.
- **Scans** VFVFGPT · VFG-Kit · RAPPORT-EXPERIENTIEL : **aucune PR ouverte**.
- **Relais** : `docs/handoffs/2026-10-07-swarm-prs-hub-docs.md` · `git pull origin main` recommandé (merge `gh` uniquement).

## Session — 2026-10-07 07:15 (swarm #10/10 méta + repos restants · LOCAL, pas de push)

- **Lot swarm #10** : méta-workspace + repos hors Jah / hors agents 1–9.
- **Mesures** : `manifest:check` → **cohérent** (8 absents optionnels) · `declutter --dry-run` → **78** candidats / **0** déplacé · feed MCP dégradé (hub down).
- **Repos** : SkinEditor **blocked `:5194`** · RainbowJourney `[chemin local]` dirty docs, port **5186** down · GandalfIdle clean plan S/M/L · UnifiedPOC readonly · atlas **behind 3**.
- **Livrable** : `docs/handoffs/2026-10-07-swarm-meta-general.md` (tableau général consolidé).
- **R3 FG** : rotation secrets · push · timeline 502 · install tâche Dispatcher · allocation port SkinEditor · declutter apply.
- **Relais** : handoff ci-dessus + inventaire `docs/handoffs/2026-10-07-swarm-handoffs-inventaire.md`.

## Session — 2026-10-07 05:35 (clôture : dispatcher + bugs + vérification large · PUSHÉ)

- **Disparcher** (Telegram → LLM local propose **A/B/C** → agent de code) livré et prouvé ;
  harness optimisé (fiche d'auto-connaissance) ; présentation « état des lieux ».
- **Poussé** : VFGate `b8e58c4` (merge PR #20) · dispatcher `ac46522`→`70a1b49`→`6cecc0c` · méta `be0eba9` — les 3 **`0/0`**.
- **Bugs corrigés** : `parseProposal` tronquait la réponse (« A) ») · `extractReply` `[object Object]` · purge état + garde mono-instance.
- **Issues** : #398 doublon fermé · #405 + **PR #406** (feedback-sync dérive) · **#122** (timeline 502) · **#123** (dérive blog 3 articles).
- **À trancher (FG)** : (1) tâche planifiée en **admin** ; (2) repli agent `codex`/`kimi` (claude en quota) ; (3) rotation tokens (@sansmesbot + Jah en clair) ; (4) `timeline` 502 (R3 VPS).
- **Relais** : `docs/handoffs/2026-10-07-0535-cloture-session-dispatcher-bughunt-verification.md`.

## Session — 2026-10-07 03:55 (dispatcher agent local + notifications · PUSHÉ VFGate/dispatcher)

- **Chaîne Telegram → Bionic → agent de code** livrée et prouvée. Bot dédié **`@sansmesbot`** (libre, validé) configuré sur le VFGate **local** (prod non touchée).
- **Disparcher** (`[chemin local]`, poussé `ac46522`) : `scripts/lib/dispatcher-core.mjs` (parseurs A/B/C + état pending, 9/9), `scripts/telegram-dispatcher.mjs` (SSE `chat.inbound` → LLM propose réponse+options → sur choix → `bin/delegate.ps1`), lanceur idempotent + script de tâche planifiée.
- **Harness VFGate** (poussé `b8e58c4`, merge PR #20) : fiche d'auto-connaissance injectée, prompt enrichi, `max_tokens` 512→1024 ; suite **236/236**.
- **Présentation** « état des lieux » : `vfg-dispatcher/docs/2026-10-07-etat-des-lieux-agent-bionic.html`.
- **À trancher (FG)** : (1) lancer en **admin** `install-dispatcher-task.ps1` (tâche `VFG-Dispatcher`) ; (2) `claude` en quota hebdo (« resets Oct 8 7am ») → repli `codex`/`kimi` ; (3) **rotation** du token `@sansmesbot` (collé en chat) + identifiants Jah en clair dans les logs.
- **Relais** : `docs/handoffs/2026-10-07-0355-cloture-dispatcher-agent-local-harness-etat-des-lieux.md`.

## Session — 2026-10-05 08:49 (CLÔTURE : lot `/sujets-ouverts/` · PUSHÉ · déployé · DONE)

- **Livré (blog, poussé)** : vue de lecture du registre des sujets ouverts —
  `https://blog.vfg.lol/sujets-ouverts/` (**HTTP 200**) + `https://blog.vfg.lol/api/sujets-ouverts.json`
  (**200**, `totals.sujets = 14`). Projection de `docs/SUJETS-OUVERTS.md` (parseur mesuré ; la page ne
  réécrit pas le registre). **14 sujets** : 10 ouverts · 1 débloqué · 1 en pause · 1 refusé · 1 indéterminé.
- **Code** : `scripts/lib/sujets-ouverts.mjs`, `scripts/lib/templates/sujets-ouverts.cjs`, routes `src/server.js`,
  surface `config/site-registry.cjs`, surveillance `.github/workflows/code-deploy.yml`, test `test/sujets-ouverts-vue.test.mjs`.
  Commit `4b18f65` (merge `0285e16`) ; handoff `handoffs/2026-10-05-0849-…md` (commit `a51948b`, merge `ac57a6b`).
- **Tests** : `node scripts/test-ci.mjs` → **622 pass · 0 fail** (2 skip).
- **Pièges corrigés** : `docs/` n'était **pas** surveillé par `code-deploy` (ajout `docs/SUJETS-OUVERTS.md`) ;
  surface publique hors navigation → `hiddenReason` obligatoire ; test `sujets-ouverts.test.mjs` d'un autre
  agent **non écrasé** (1 agent = 1 périmètre).
- **Sujet 10** (autre agent/FG) : `.../apercus/2026-10-05-handoffs-taches-urgences.html` → **200** ; hub à **14 présentations · 10 sujets**.
- **Méta/atlas** : en phase (0/0) — rien de nouveau à pousser hors cette entrée.
- **À trancher (FG)** : (1) cadence du collecteur de statuts (`VFG-status-auto`, 09:30 seulement) ;
  (2) rendre `jah-stab-vues` auto ou le laisser manuel ; ~~(3) route `SUJETS-OUVERTS`~~ **FAIT**.
- **Relais** : `handoffs/2026-10-05-0849-cloture-registre-sujets-ouverts-vue-lecture.md`.

## Session — 2026-10-05 08:30 (option 3 : servir le registre `/sujets-ouverts/` · PUSHÉ · déploiement)

- **Demande FG (option 3)** : « il manque l'endroit où afficher les statuts ouverts + handoffs/tâches ».
  La route de lecture est **livrée** : **`/sujets-ouverts/`** (HTML) + **`/api/sujets-ouverts.json`** (agents),
  en **projection** de `docs/SUJETS-OUVERTS.md` (parseur mesuré — la page ne réécrit pas le registre).
- **Code** : `scripts/lib/sujets-ouverts.mjs` + `scripts/lib/templates/sujets-ouverts.cjs` + routes `src/server.js`
  + surface `sujets-ouverts` (`config/site-registry.cjs`) + `test/sujets-ouverts-vue.test.mjs` (10 tests).
- **Mesure** : **14 sujets** (10 ouverts · 1 débloqué · 1 en pause · 1 refusé · 1 indéterminé). Un statut
  non classable s'affiche **indéterminé** — jamais rangé de force.
- **Pièges corrigés** : `docs/` **n'était pas surveillé par `code-deploy`** (ajouté `docs/SUJETS-OUVERTS.md`) ;
  une surface publique hors nav **doit** porter `hiddenReason`.
- **Vérifié** : `node scripts/test-ci.mjs` → **622 pass · 0 fail**. Poussé (`535c7a9..0285e16`) → `code-deploy` **déclenché**.
- **Sujet 10** (autre agent/FG) : `.../apercus/2026-10-05-handoffs-taches-urgences.html` → **200** (déployé), hub à **14 présentations · 10 sujets**.
- **À trancher (FG)** : cadence du collecteur de statuts ; auto `jah-stab-vues`.
- **Handoff** : `docs/handoffs/2026-10-05-0822-…` (§4.bis mise à jour).

## Session — 2026-10-05 08:22 (journal + statuts-projets rafraîchi + état du chantier · PUSHÉ · DONE)

- **2 articles publiés** (journal 04→05/10 + clôture/méthode « les 4 pièges ») — voir entrée 07:58.
- **`/statuts-projets/` rafraîchi à la main** : collecteur `status-auto.mjs` lancé depuis le worktree isolé
  (`blog-journal-1005`) → **21 publiés / 0 échec** ; page servie = **45 dates 05/10**. Tracker commité (`e6db316`).
- **`/jah-stab-vues` régénéré** : **4.0.22 · 13/13 · reste 0** (avant 4.0.21 · 12/13) → commit `a937759`, `code-deploy` **success**.
- **Réponse mesurée à FG** : `/statuts-projets/` est **auto** (projection + tâche 09:30, délai d'un jour) ;
  `/jah-stab-vues` **n'est pas auto** (instantané manuel). À trancher : cadence du collecteur (plus fréquent / à la demande).
- **Surfacé pendant la session (autre agent/FG)** : « Sujet 10 — handoffs/tâches/urgences par projet »
  (`public/prototypes/apercus/2026-10-05-handoffs-taches-urgences.html`, commit blog `535c7a9` ; artefact méta `cc75a12`).
  `code-deploy` **en cours** à la clôture.
- **Handoff** : `docs/handoffs/2026-10-05-0822-journal-sessions-statuts-projets-et-etat-du-chantier.md`.
- **À trancher (FG)** : cadence du collecteur de statuts ; auto `jah-stab-vues` ; route de lecture `SUJETS-OUVERTS` (absente).

## Session — 2026-10-05 07:58 (journal des sessions 04→05/10 : 2 articles + STATUS + atlas · PUSHÉ · DONE)

- **2 articles publiés** (canal officiel `post.mjs --live`, gardes vertes test:ci/check:links/check:counts,
  renommés par le serveur) :
  1. Récit : « Du bateau qui fuit au port qui tient — le journal de ces deux jours » —
     https://blog.vfg.lol/devblog/posts/metaprojet/2026-10-05-0752_du-bateau-qui-fuit-au-port-qui-tient-journal-des-sessions.md
  2. Clôture/méthode : « Le journal se referme : les pièges d'une session qui se raconte » —
     https://blog.vfg.lol/devblog/posts/metaprojet/2026-10-05-0758_le-journal-se-referme-les-pieges-d-une-session-qui-se-raconte.md
  - Catalogue **722** · flux RSS **463 items** · HTTP **200** (les 2).
  - Worktree exclusif : `[chemin local]` (branche `feat/journal-04-05-oct`, base `origin/main`).
- **PUSHÉ (les 3)** : blog `origin/main` → `6ad33b1` · méta `docs/agent-presence-live-cleanup-plan` → `9e52748` · atlas `main` → `dd1332f`.
  - ⚠️ **Le push blog n'a PAS déclenché `code-deploy`** : son filtre `paths` ne surveille pas `devblog/posts/**`
    (`public/**, src/**, config/**, data/**, vfjah/**`, `*.mjs`, `package*.json`) → normal, l'article est déjà servi par l'Admin API.
- **Pièges de la session (méthode)** : jonction `_tools/vfg-atlas` qui clobbe `catalog.json` (→ builder depuis le chemin physique) ;
  worktree neuf sans `node_modules` (→ `npm ci --ignore-scripts`) ; heure d'article « dans le futur » (→ caler sous l'horloge) ;
  serveur qui renomme le fichier au moment de publier (→ relire le nom **servi**).
- **Atlas** : index documentation rafraîchi (`npm run doc-atlas` → **2254 fichiers**) + `catalog.json` régénéré (**112 projets / 90 vérifiés**).
- **Sondes live (clôture)** : `jah.vfg.lol/readyz` → **4.0.22** · `hero.vfg.lol` → **200** · hub `/prototypes/apercus/` → **200** (13 présentations · 9 sujets).

## Session — 2026-10-05 07:52 (journal des sessions 04→05/10 : article + STATUS + atlas · DONE)

- **Article journal publié** (canal officiel `post.mjs --live`, gardes vertes test:ci/check:links/check:counts,
  renommé par le serveur `0730`→`0752`) : récit complet des sessions depuis le 04/10 après-midi
  (télémétrie réparée, Jah STAB 4.0.16→4.0.22, Hero v2 migré, agent local jugé sur pièces, urgence fantôme,
  outillage visuel, arbre de connaissance), avec **URLs + captures + métriques + 10 liens live vérifiés**.
  - URL : https://blog.vfg.lol/devblog/posts/metaprojet/2026-10-05-0752_du-bateau-qui-fuit-au-port-qui-tient-journal-des-sessions.md
    (HTTP 200, catalogue **721**, flux RSS **462 items**).
  - Worktree exclusif : `[chemin local]` (branche `feat/journal-04-05-oct`, base `origin/main` `05dcc06`).
- **STATUS** : entrée ajoutée ici (ce lot). **Atlas** : index documentation rafraîchi (`npm run doc-atlas`).
- **Sondes live consignées** : `jah.vfg.lol/readyz` → **4.0.22** (campagne STAB clôturée 13/13, release solo) ·
  `hero.vfg.lol` → **200** · hub `/prototypes/apercus/` → **200** (**13 présentations · 9 sujets**).
- **Non fait (avec raison)** : push blog (`code-deploy` = R3, décision distincte) ; push méta (branche 18 en avance).

## Session — 2026-10-05 06:10 (audit handoffs/tâches interrompues + atlas + arbre · R3 en sujets ouverts · DONE)

- **Audit mesuré** : fiche `docs/AUDIT-2026-10-05-handoffs-taches-interrompues-atlas-arbre.md`
  (handoffs + tâches interrompues + atlas + arbre). **3 déductions fausses corrigées par la mesure** :
  registre/index blog déjà **202/119 sur `origin/main`** (le 203 est local) ; **4** handoffs absents de
  l'INDEX (pas 6) ; l'échec `test:ci` de l'article **n'est pas sur `origin/main`**.
- **Livré (méta, poussé)** : INDEX `docs/handoffs/INDEX.md` (+4 du 05/10) ; addendum
  `docs/workspace/ARBRE-CONNAISSANCE.md` (trou MCP fermé, `indexedFiles 1195`) ; atlas `frais`
  (90 projets, 0 marqueur). Branche `docs/agent-presence-live-cleanup-plan` = **0/0**.
- **O5-A** : worktree sûr `blog/safe-1005` (`origin/main` `9399475`) ; article push/pull committé
  `0a5cfbc`, **dry-run vert** (test:ci **607/0**), **non poussé / non publié**.
- **Réflexion R3** (fiche §7) : dublog `26/53`, article, path-secrets MCP — options + fiabilité.
- **Sujets ouverts conservés** : S1 dublog (9/10) · S2 article (9/10) · S3 lecons-apprises (10/10) ·
  S4 path-secrets (6–9/10) · S5 registre 2.6.x (8/10).
- **Non fait (R3 / périmètre autre agent)** : publication live, merge `main` blog, O3-B (`scripts/`),
  O4 (VFVFGPT arbre dirty), dublog.
- **Relais** : `docs/handoffs/2026-10-05-0610-cloture-audit-handoffs-atlas-arbre-et-reflexion-r3.md`.
  Prochaine action : **FG tranche le dublog** (préalable), puis pousser `blog/safe-1005` ou publier l'article.

## Session — 2026-10-05 04:45 (provenance des clôtures · article auto-correctif publié · DONE)

- **Règle durable** : champ **`runtime` obligatoire** dans tout handoff de clôture
  (`.cursor/rules/handoff-standard.mdc` + skill global `vfg-cloture-session` §3.bis).
  Valeurs : `bionic-native` / `api-lmstudio` (+`caller`) / `cloud` / `agent-cli` / `human`.
  Motif mesuré : aucun log ne distinguait ces origines (`dispatch.jsonl` `agent:"ollama"`
  pour local ET cloud ; « VSCode » nulle part ; Bionic-natif sans log structuré).
- **Article publié** (canal officiel, pas `scp`) : `metaprojet/2026-10-05-0447_le-juge-ne-peut-pas-etre-le-sujet.md`
  (HTTP 200, catalogue 718). Remplace 2 articles racine auto-validés (retirés).
- **Geste de méthode** : un agent local proposait un `scp` (interdit) + 2 articles
  auto-validés → refus argumenté, article de correction publié à la place (le juge ne
  peut pas être le sujet).
- **Handoff** : `[chemin local]`.
- **Arbre de connaissance** : écrit à chaque étage (méta règle, blog article, MCP servi
  via `handoffs/**`, dev skill global). **Trou MCP** : `.cursor/rules/**` absent de
  `knowledge-allowlist.json` → la règle n'est pas *servie* (action FG ouverte).
- **Non fait** : poser `origin` à la source (delegate.ps1, metrics.mjs, blog-nemotron-e2e.mjs) ;
  ajouter `.cursor/rules/**` à l'allowlist MCP ; push méta (branche 65+ sur `main`).
- Prochaine action : **FG** — (1) ajouter `.cursor/rules/**` à l'allowlist MCP ;
  (2) décider du push méta ; (3) lot « origin à la source » pour les logs d'exécution.

## Session — 2026-10-05 04:20 (audit repos push/pull · article en voie interrompue · collision mesurée)

- **Audit mesuré** (fetch + `rev-list` des deux côtés, 49 dépôts + 82 worktrees) :
  fiche versionnée `docs/AUDIT-REPOS-PUSH-PULL-2026-10-05.md`. Aucun push/pull exécuté.
  - Vivants 0/0 : 17 racines manifeste + ~62 worktrees.
  - Divergences : `VFVFGPT` 4+/2− + dirty mixte · `vfg-dispatcher` 4+ non poussés ·
    `VFG_Cockpit` behind 4 · blog double clone (racine 28+/14− ; manifeste sur
    `ca4093c` absent d'origin/main) · 4 worktrees avec travail jamais poussé.
- **Fiche déplacée** : `docs/audit/` est ignoré (deny-by-default, `git check-ignore -v`
  preuve) → convention versionnée `docs/AUDIT-*.md`.
- **Article** (mandat FG « quand même ») : écrit et **committé `wip:`** `49b4c47` dans le
  blog racine, en **voie interrompue** adaptée de PR #292 JahMessenger
  (`status: interrompu`, pas de `--no-verify`) : collision de périmètre mesurée en
  direct (autre agent publiait le même sujet, PID 39668, 04:06 ; vagues status-auto
  03:23) → publication **reportée aux gardes** (test:ci 6 échecs, racine = catégorie
  `lecons-apprises` non déclarée, lot concurrent `a748d7f`).
- **Handoff** : `[chemin local]`.
- **Non fait** : rebase blog 52+/15− ; réconciliation double clone (R3 FG) ;
  rattrapages git (voir fiche audit).
- Prochaine action : **repreneur blog** — déclarer `lecons-apprises: journal` dans
  `scripts/lib/project-map-data.cjs`, replier `npm test` à 0 échec, committer/publier
  l'article ; puis FG tranche le doublon clone blog et les rattrapages git.

## Session — 2026-10-05 03:31 (clôture BOOT-AGENT + Cloud notes · DONE)

- **Méta** : BOOT-AGENT `1ed2621` ; clean orphelins `fbd03ac` ; working tree clean sur la branche docs.
- **Jah** : PR [#288](https://github.com/FGDidou/JahMessenger/pull/288) **MERGED** `19a7287` — section Cursor Cloud dans `AGENTS.md` sur `main`.
- **Relais** : `docs/handoffs/2026-10-05-0331-cloture-boot-agent-cloud-notes.md`. Lot clos ; pas de suite obligatoire.


## Session — 2026-10-04 23:34 (IdeZoomLab park-with-plan · clôture · pas de code)

- **Livré (doc)** : plan solo `docs/plans/2026-10-04-ide-zoom-lab-plan.md` (commit méta `ee415c3`) ; source Cursor `poc_zoom_webview_5d22f19a.plan.md`.
- **Articles LIVE** : [park idée / méthodo](https://blog.vfg.lol/devblog/posts/workflows-agentiques/2026-10-04-park-idee-plan-zoom-lab-webview.md) · [plan companion](https://blog.vfg.lol/devblog/posts/workflows-agentiques/2026-10-04-ide-zoom-lab-plan.md) (HTTP 200, une + À chaud).
- **Non fait** : code extension Zoom ; phase 2 (IdeaPit / Pulse-Telegram / push GH) ; push.
- **Note mesure** : hash RAPPORT `ca4093c` cité en session **non résolu** dans le clone local à la clôture ; twins MD absents du working tree blog local.
- **Dirty hors lot** (non touchés) : `dev-boot/SKILL.md`, `atlas.md`, `_pass4_probe.ps1`, `audits-2026-10-03/`.
- **Relais** : `docs/handoffs/2026-10-04-2334-park-idezoomlab-cloture.md`. Prochaine action : **FG relit les questions de l'article**, puis tranche phase 2 ou mandat Zoom.

> État vivant au 2026-10-03. La vérité instantanée reste `node _scripts/dev-meta.mjs status`.

## Session — 2026-10-03 (atlas v3, catalogue en ligne, méthode de revue)

- Relevé mesuré des 61 dépôts : `docs/AUDIT-ATLAS-2026-10-03.md`. P0 VFGate inchangés ; livraison Jah en cours (L1-L6).
- Méthode versionnée et servable : `docs/workspace/METHODE-AUDIT-ATLAS.md`. MCP : allowlist du 16/06, slice non repacké.
- Relais : `docs/handoffs/2026-10-03-atlas-v3-catalogue-en-ligne.md`.

## Session — 2026-10-02 23:30 (Bionic dispatcher · crash bad allocation expliqué · vfg-dispatcher livré)

- **Cause du crash Bionic** (mesurée dans le server-log) : gemma-4-12B chargé à `n_ctx_slot = 258304` × 4 slots
  sur 16 Go de RAM → `bad allocation`, puis le runtime meurt → `fetch failed`. Remède : contexte 64K, 1 slot.
  Le prompt orchestrateur local disait « contexte maximal » : **corrigé**.
- **Nouveau dépôt** `FGDidou/vfg-dispatcher` (privé, `e8b2edd`) : `bin/delegate.ps1` (claude/codex/kimi/ollama ×
  read/write/full, worktree exclusif, jamais de push), 16/16 tests, claude et ollama cloud vérifiés en réel.
- **Relais** : `docs/handoffs/2026-10-02-2330-bionic-dispatcher.md`. Prochaine action : FG déroule
  `vfg-dispatcher/docs/GUIDE-TEST.md`.

## Session — 2026-10-02 10:00 (audit état des lieux post-reboot · vague 1 livrée · orchestrateur local)

- **Audit mesuré** (08:45–09:05, 3 éclaireurs en lecture seule) :
  - prod `ok` ×5 ;
  - **6 lots n'existent qu'en un exemplaire local** (VFGate `didou-llm`, blog `inferstatus`/`triage-unknown`, méta `devmeta`, `vfg-system`, `wt-handoffs-triage`) ;
  - blog : deux clones, le manifeste pointe vers le clone périmé (−327) ;
  - 36 worktrees : 19 élagables, 11 actifs, 6 cassés (`_outils` = outil reaper, **ne pas supprimer** ; `JahMessenger-suivi` a un test jamais commité) ;
  - bus d'événements figé depuis le 2026-06-15 ; C: 6,7 Go libres.
  - Plan V0→V4 : `docs/workspace/2026-10-02-audit-etat-des-lieux-plan.md`.
- **Vague 1 livrée** (local, non poussé, tests rejoués par l'orchestrateur) :
  - W1-A `check-secrets` élargi, `4a63daa`, 31/31 ;
  - W1-B `dev-meta --root` et garde de `sync-ports`, `c28f8b3` + `4be078d`, 28/28 ;
  - W1-C `docs/handoffs/INDEX.md` et plans recochés avec preuve, `68f386d`.
- **Orchestrateur local** : prompt système LM Studio, `docs/workspace/2026-10-02-prompt-orchestrateur-local.md`. Aucun code.
- **Articles** : 2, gardes vertes, commit blog `1c666c7` (worktree `RAPPORT-EXPERIENTIEL-audit-1002`). **Publication = R3 FG** (mot d'admin).
- **Relais** : `docs/handoffs/2026-10-02-1000-audit-etat-des-lieux-vague1-orchestrateur.md`. Prochaine action : FG publie les 2 articles, puis tient la séance V0.

## Session — 2026-10-02 08:48 (GitHub MCP distant : reconnaissance + plan, aucun fichier déposé)

- **Demande** : URL nue `https://api.githubcopilot.com/mcp/` → identifier, mesurer, planifier. **Doc-only.**
- **Ce que c'est** : **GitHub MCP server hébergé** (remote HTTP ; variantes `/mcp/readonly`, `/mcp/x/<toolset>` ;
  en-têtes `X-MCP-Toolsets`/`X-MCP-Readonly` ; OAuth VS Code, PAT ailleurs). Classé **Volet B** (MCP public).
- **Mesuré** : `_dev\VFVFGPT\config\ssot\mcp-servers.json` **absent** · `%APPDATA%\Code\User\mcp.json` **absent** ·
  `[chemin local]` **inexistant** · `[chemin local]` = `settings.json` seul. Le générateur
  `generate-mcp-configs.mjs` ne fait que des serveurs **locaux** et **écrase** les configs → pas de serveur externe.
- **⚠ Sécurité (R3)** : PAT GitHub **en clair** dans `[chemin local]` (user-level, non versionné,
  serveur `github`) → rotation / indirection `${env:GITHUB_PAT}` à décider.
- **Piège prouvé** : `.gitignore` deny-by-default → `git check-ignore .vscode/mcp.json` = ignoré (exit 0) ;
  il faudra négativer `!.vscode/mcp.json`.
- **Aucun test ni commit** : la session n'a **rien déposé** (fail-open assumé). `_docs/workflows/atlas.md`
  (session atlas 06:20) et `docs/workspace/_pass4_probe.ps1` sont **étrangers** → laissés intacts.
- **Relais** : `docs/handoffs/2026-10-02-0848-plan-branchement-github-mcp.md`.
  Prochaine action : **FG tranche** ampleur (A / A+C / A+B+C), auth Cursor, et sort du SSOT absent.

## Session — 2026-10-02 06:35 (vue live des agents : concurrence nulle, un jeton de bot exfiltré puis masqué)

- **Livré (code)** : `_scripts/vue-live.mjs` — script unique, zéro dépendance, **lecture seule** : sonde
  (Chronos, Pulse, VFGate, Hub), collecte (`schtasks`, git par worktree, checkpoint, handoffs), **masque**, puis
  écrit une page HTML autonome. Options `--out --json --data --no-probe --worktrees --quiet`.
  Rendu **déterministe** prouvé (2 rendus de la même donnée → hash identique).
- **⚠ Sécurité (vrai résultat de la session)** : le contrôle de motif a trouvé un **jeton de bot réel**
  (`api.telegram.org/bot<id>:<jeton>/getUpdates`) **recopié dans l'artefact HTML**, en provenance du **bus
  d'activité FG_Pulse** (titre d'onglet Chrome capturé : 3 occurrences dans `acts.jsonl`). **Correctif prouvé** :
  passe de rédaction appliquée au JSON **et** au HTML (bot, `Bearer`, `sk-`, `gh[pousr]_`, `AKIA`, Slack, PEM,
  paramètres d'URL nommés) → **0 motif**, témoin `bot***` présent.
  *Leçon : une trace d'activité est une entrée non fiable ; le masquage est une étape de pipeline, pas une intention.*
- **Mesure de concurrence** : **aucune collision** — 1 seul agent actif, **dans son worktree**
  (`JahMessenger\.claude\worktrees\jahm-pr-181-254204`) ; le point chaud du 01/10 est évité ; `workflow-smoke`
  est une sonde du pont, pas un agent. **37 worktrees** → 15 alignés · 11 sans upstream · 3 modifs · 2 non poussés ·
  **6 cassés**. **3/4 services up** (Hub `:4320` injoignable). 6 tâches planifiées, 2 en cours.
- **Convention à trancher (R2)** : plusieurs sessions committent sur la **même branche du méta**
  (`docs/agent-presence-live-cleanup-plan`) — « 1 agent = 1 worktree » ne s'applique pas au méta.
- **Article publié** : « La concurrence n'était qu'un agent dans son propre worktree » —
  `blog.vfg.lol/devblog/posts/metaprojet/2026-10-02-0635_la-concurrence-etait-un-agent-dans-son-worktree.md`
  (gardes vertes, page HTTP 200, catalogue **626**, flux **428**, **dérive 0/0**).
- **Tests** : `_scripts/check-secrets.mjs` exit 0 ; `test:ci` blog **526/526 fail 0** ; rendu déterministe.
- **Non poussé (décision distincte)** : commit méta (code + doc) et commit blog (article).
- **Relais** : `docs/handoffs/2026-10-02-0635-vue-live-agents-et-masquage-secrets.md`.
  Prochaine action : **R3 FG** — rotation du jeton révélé + décision de push, puis élagage des 6 worktrees cassés.

## Session — 2026-10-02 05:07 (connerie-lab v0.2 : correctifs 1-3 du POC)

- **v0.2 livrée et poussée** : `poc/Connerie_Lab_POC_v0.2.html` (copie de l'original, **conservé intact**) +
  `tests/verif_v02.mjs` + `CHANGELOG.md`. `connerie-lab` passe à **13 fichiers**, HEAD `bd62d27`, `main` SYNC.
- **Correctifs appliqués** (1 : « ? je ne sais pas » avec ≥ 3 réponses ; 2 : égalités d'archétype départagées ;
  3 : écart de regard pondéré − neutre affiché). **Format `schemaVersion` 1 inchangé** — vérifié.
- **Tests** : `verif_v02.mjs` **15/15 vert** ; les 2 tests d'origine (`poc_test.mjs`, `verif_correctifs.mjs`)
  restent verts. Rendu validé dans le navigateur sur le fichier livré (case « ? », garde-fou 2 → refus).
- **Non fait (avec raison)** : correctif 4 (reformulation = choix éditorial FG) ; 7ᵉ situation (`schemaVersion` 2,
  chantier séparé) ; dépôt non inscrit au manifeste ni à l'atlas.
- **Push méta** : `0d1cc06` poussé (branche `docs/agent-presence-live-cleanup-plan`).
- **Article publié** : « Un ZIP de 3,8 Mo, dix fichiers, un dépôt privé » — `blog.vfg.lol/devblog/posts/workflows-agentiques/2026-10-02-0515_un-zip-dix-fichiers-un-depot-prive.md`
  (catalogue 624, page HTTP 200, flux 426, dérive 0/0). Commit blog `9931913` **local, non poussé** (`code-deploy` = R3).
- **Relais** : `docs/handoffs/2026-10-02-0507-connerie-lab-v0.2-correctifs.md`. Décision attendue : correctif 4.

## Session — 2026-10-02 03:24 (dépôt privé `connerie-lab` : POC + rapport Gandalf + audit)

- **Dépôt `FGDidou/connerie-lab` créé et poussé** : **privé**, branche `main`, HEAD `9621823`, **10 fichiers**.
  Preuve serveur : `gh api .../git/trees/main?recursive=1` → 10 blobs, `visibility=PRIVATE`.
- **Traçabilité de la charge utile** : extraction de `connerie-lab.zip` → `[chemin local]`,
  **10/10 SHA1 identiques** entre `tar` et `Expand-Archive` (0 écart).
- **Tests verts** : `node poc_test.mjs` → `80.0 / 82.5 / 85.0` ; `node verif_correctifs.mjs` → `? sur écoute 95.0`.
- **Aucune autre surface touchée** : originaux (`poc/Connerie_Lab_POC.html`, `rapport/rapport-gandalf.html`)
  et `Connerie_Lab_complet.zip` intacts ; rien poussé dans `RAPPORT-EXPERIENTIEL` ; aucun dépôt de l'audit supprimé.
- **Hors périmètre (décision FG)** : dépôt **non inscrit** au manifeste ni à l'atlas.
- **Relais** : `docs/handoffs/2026-10-02-0324-creation-depot-connerie-lab.md`. Prochaine étape : appliquer
  `poc/CORRECTIFS.md` sur une **copie** `poc/Connerie_Lab_POC_v0.2.html` (7e situation = migration `schemaVersion` 2,
  chantier séparé), avec accord FG.

## Session — 2026-10-02 02:45 (méta-analyse : 7 sous-agents, sécurité, vision V0→V3)

- **Livré (local)** : triage des handoffs du blog (84 entrées avec preuve), `dev-meta` signale OFF-DEFAULT/BEHIND-ORIGIN
  (3/3), `inferStatus` reconnaît les statuts réels (24/24, unknown 77 → 69). Branches dans `[chemin local]` (non poussées).
- **⚠ Sécurité** : 12 secrets critiques et 5 élevés versionnés (dépôts privés) ; 0 hook actif ; `check-secrets`
  aveugle à ces motifs. Fiche hors Git : `_out/audits-securite-2026-10-02/`. **Rotation = R3 FG (V0).**
- **Plans** : `docs/workspace/2026-10-02-vision-plan-agentique.md` (V0→V3, dispatch par modèle) ;
  annexes `docs/workspace/audits-2026-10-02/`.
- **Relais** : `docs/handoffs/2026-10-02-0245-meta-analyse-7-sous-agents.md`. Prochaine étape : séance FG sur les configs
  agentiques (MCP, plugins, règles, skills, outils), avec V0 en priorité.

## Session — 2026-10-02 02:40 (flash PowerShell 10 min + [variable d'environnement])

- **Flash écran supprimé** : la tâche `VFG-Atlas-Monitor` (`PT10M`) lançait `powershell.exe` **sans**
  `-WindowStyle Hidden` (motif hérité de `_live/FG_Pulse/agents/windows/install-task.ps1`). Correctif :
  lanceur `_scripts/run-hidden.vbs` via `wscript.exe` (**zéro console** → zéro flash ; `-WindowStyle Hidden`
  flashe encore). Agent long/tuable `FG_Pulse-MediaAgent` → `powershell -WindowStyle Hidden` conservé.
  Preuve : `Start-ScheduledTask` → `LastTaskResult=0`, log `+619` o, aucune fenêtre.
- **[variable d'environnement] branché (401 → OK)** : `vfg-atlas/scripts/monitoring.mjs` repliait sur `dev-pulse-local`
  faute de `.env` dans `vfg-atlas`. `monitor-tick.ps1` charge désormais `_live/FG_Pulse/.env` via
  `load-env.ps1` **en portée enfant** (dot-source = écrase `$Root`, piège mesuré). Preuve : repli
  `_ssot/monitoring-events.jsonl` **15 → 15**, tick « Evenement publie ».
- **Tests** : `vfg-atlas` **6/6** ; `_live/FG_Pulse` **69/69**. `git diff --check` vert.
- **Commits locaux (non poussés)** : `vfg-atlas` `cf0714a` ; `_live/FG_Pulse` `3fb7171` ; méta (ce commit).
- **Sauvegardes de tâches** : `_out\schtasks-backup-{VFG-Atlas-Monitor,FG_Pulse-MediaAgent}-2026-10-02.xml`.
- **Relais** : `docs/handoffs/2026-10-02-0240-fix-flash-powershell-tick-atlas-et-token-pulse.md`.
- **Dette mesurée** : doc interne `_live/FG_Pulse/docs/*.md` périmée (2026-06-16, commit `f7c236b`).

## Session — 2026-10-02 01:21 (rangement du dossier `[chemin local]`)

- **Triage mesuré** d'un dossier de rapatriement (14 fichiers + 4 dossiers) → 4 familles ; doublons tranchés au **hash / comparaison 1:1**, jamais par ressemblance de nom.
- **Rangement — 7 pièces, 3 dépôts** : `vfg-atlas` (prototype HTML + 2 rapports d'audit dans `atlas/` et `audits/`), `JahMessenger` (2 boards HTML dans `docs/plans/boards/`), `RainbowPiano` (5 visuels synesthésie + le MIDI « Atlas de Do »).
- **Quarantaine** `_out/quarantine/racine-2026-10-02/` : 11 pièces — 4 **doublons exacts vérifiés** (zip atlas 33/33 déjà au kit, docx = md, zip rainbow 14/14 déjà au dépôt, board Jah sha1 identique), 2 obsolètes/déjà traités, 4 exports d'agent hors dépôt.
- **`[chemin local]` est vide** (dossier conservé).
- **Commits atomiques (non poussés)** : `vfg-atlas` `e64398f` · `JahMessenger` `97548e3` · `RainbowPiano` `ee0b649`. Les artefacts d'autres agents (Jah : 4 ; RainbowPiano : 4) ont été **laissés intacts**.
- **Garde verte** : `check-secrets` exit 0. Aucun test (déplacement de fichiers, pas de code).
- **Relais** : `docs/handoffs/2026-10-02-0121-rangement-gitrepos-to-triage-3-depots.md`.

## Session — 2026-10-02 01:05 (clôture du lot atlas)

- **vfg-atlas — lot clos** : catalogue **112 projets, 90 vérifiés, 0 erreur** ; dépôt `FGDidou/vfg-atlas` PRIVATE (HEAD `7eb150d`) ; junction `_tools\vfg-atlas` ; `tools.vfg-atlas` au manifeste.
- **Tests** : `npm test` (atlas) **6/6** ; `test:ci` (blog) **526/526** ; chaîne rejouable `npm run build`.
- **Monitoring 10 min ACTIF** : tâche planifiée Windows `VFG-Atlas-Monitor` (10 min) → `scripts/monitor-tick.ps1` → journal `_ssot/monitor-tick.log`. Avancement plan : **22/25 (88 %)**.
- **3 articles publiés** sur `blog.vfg.lol` (atlas, inventaire, monitoring) + 3 captures atlas servies 200.
- **Skill `dev-notifications`** créé (`.cursor/skills/` + miroir Claude `vfg-notifications`).
- **Bloqué humain (3)** : `[variable d'environnement]` pour la vue temps réel Cockpit/Jah, token bot Telegram, bannière blog→atlas.
- **Relais** : `vfg-atlas/handoffs/2026-10-02-0105-vfg-atlas-cloture.md`.
- **Anomalie mesurée** : arbre `[chemin local]` partagé entre agents (gardes instables) → **worktree isolé** recommandé.

## Session — 2026-10-02 00:46 (clôture reprise post-crash)

- **Constat** : la session « crashée » (`09bc4edd`, « distille push … + URL article ») n'était pas en panne — ses **outils terminal + édition étaient désactivés**, d'où des snippets livrés non appliqués.
- **Loose ends du crash : résolus** (métadépôt déjà poussé) — lien `ARBRE-CONNAISSANCE.md` dans `docs/workspace/README.md` ✅ ; addendum de provenance dans `docs/handoffs/2026-10-02-0014-…` ✅. Méta **et** blog poussés ; article servi (`blog.vfg.lol`).
- **Rien de neuf produit** (fail-open assumé) : la clôture documente l'état, sans re-planifier ni ouvrir de chantier.
- **Relais** : `docs/handoffs/2026-10-02-0046-cloture-reprise-post-crash.md`.
- **Action ouverte (R3, accord FG)** : `allowlisté ≠ servi` — le slice MCP prod est `packedAt: 2026-06-16` (77 fichiers, périmé) → `npm run mcp:docs:pack` + `vps-deploy-mcp-docs-push.ps1` (dépôt VFVFGPT) pour que la fiche distillée soit **réellement servie**.
- **Hors périmètre (signalé, non commité)** : `workspace.manifest.json` (entrée `tools.vfg-atlas`, `manifest:check` cohérent) · `docs/workspace/_pass4_probe.ps1` (sonde non suivie).

## Session — 2026-10-02 00:30

- **vfg-atlas intégré au workspace** : dépôt physique `[chemin local]` + junction `_tools\vfg-atlas` + entrée `tools.vfg-atlas` au manifeste (`manifest:check` → cohérent, port `4173` libre). Distant **`FGDidou/vfg-atlas` PRIVATE** créé et poussé (`16fc5ca`).
- **Catalogue de vérité** : l'inventaire réel (90 projets vérifiés) transformé au schéma atlas (`import-inventaire.mjs`) + fusionné (`merge-catalog.mjs`) + réconcilié avec le manifeste (`reconcile-manifest.mjs`) → **112 projets, 90 vérifiés, 0 erreur**. Couche **méta** (`meta.json` : 8 catégories + 16 tags).
- **Monitoring 10 min (P0, délégué)** : `scripts/monitoring.mjs` (zéro dépendance, `--once`/`--watch N`/`--publish`). Mesure **14/24 (58 %), ~7 h 50 restantes**. `POST FG_Pulse` → **401** (`[variable d'environnement]` à brancher), repli `_ssot/monitoring-events.jsonl`.
- **A6 mesuré** : l'atlas **n'était pas** un sur-ensemble du manifeste (intersection 25) → réconcilié (14 entrées ajoutées).
- **Publication (R3 accordé)** : 2 articles publiés sur `blog.vfg.lol` (`metaprojet/2026-10-01-0011_l-atlas-mode-emploi…`, `…-0013_ce-que-l-inventaire-a-reellement-mesure…`) + 3 captures atlas servies **HTTP 200**. Convention d'image découverte : `[chemin serveur]` sur le VPS (hors workflow `code-deploy`).
- **Relais** : `vfg-atlas/handoffs/2026-10-01-2340-vfg-atlas-socle-monitoring-meta.md`.
- **Action ouverte (agent suivant)** : brancher `[variable d'environnement]` (monitoring → Cockpit `:5230` + Jah), publier l'article 3 (monitoring), bannière blog vers l'atlas, skill « notifications ».

## Dernière session — 2026-10-02 00:14

- **Jeton Citadelle retrouvé** : `didou.vfg.lol` demandait `[variable d'environnement]`. Localisé sur le VPS dans `citadelle.service` → `EnvironmentFile=[chemin serveur]` (`CITADELLE_ROLE=vps`, `[hôte interne]`). **Aucune régénération, aucune écriture VPS.** Validé : `/api/etat` = **401** sans jeton, **200** avec Bearer (local et public). Empreinte SHA-256 notée (valeur non stockée).
- **Arbre de connaissance créé** : règle `.cursor/rules/vfg-knowledge-tree.mdc` + skill `.cursor/skills/dev-arbre-connaissance/SKILL.md` — le flux **méta → blog → MCP vfg-docs → dev** (écrire une fois, servir partout).
- **Skill récurrent créé** : `.cursor/skills/dev-skillifier/SKILL.md` — transformer une demande récurrente de FG en skill, + simplifier un skill trop complexe. (Miroirs Claude : `vfg-arbre-connaissance`, `vfg-skillifier`.)
- **Relais** : `docs/handoffs/2026-10-02-0014-citadelle-jeton-arbre-connaissance-et-skills-recurrents.md`.
- **Distillation + push (2026-10-02 ~01:00)** : canon `docs/workspace/ARBRE-CONNAISSANCE.md` (lié depuis `docs/workspace/README.md`) ; méta poussé (`…7407329`, `…099b486`) et blog poussé (`6696e66`). Article servi HTTP 200.
- **Découverte mesurée — « allowlisté » ≠ « servi »** : le slice MCP **prod** (`curl http://[hôte interne]/stats`) est `packedAt: 2026-06-16`, `indexedFiles: 77` → **périmé**, la fiche n'y est pas encore. Index **local** = **1036 fichiers** ; pack local vérifié : **1125 fichiers**, la fiche **est** dans l'archive. **Action R3 restante** : `npm run mcp:docs:pack` + `deploy/vps/scripts/vps-deploy-mcp-docs-push.ps1` (déploiement prod → accord FG).
- **Action ouverte (agent suivant, accord FG)** : ajouter `.cursor/skills/**/SKILL.md` + `.cursor/rules/*.mdc` à `VFVFGPT/config/ssot/knowledge-allowlist.json` puis redéployer `mcp-docs` (dépôt VFVFGPT — hors périmètre de cette clôture).
- **Constat non corrigé** : `/etc/caddy/citadelle.caddy` existe mais n'est pas importé ; le bloc `didou.vfg.lol` est inline dans `vfg-fleet.caddy` (divergence connue, service en marche).

## Session — 2026-10-01 22:40

- **Rainbow Journey lancé** (`[chemin local]`, `FGDidou/RainbowJourney`, hors tiers) sur serveur Vite isolé **:5186** (PID 6000). Port 5173 évité (occupé par un autre service). App vérifiée à l'écran. Commande : `node node_modules/vite/bin/vite.js --host 0.0.0.0 --port 5186 --strictPort`.
- **Mémoire méta créée** : skill `.cursor/skills/dev-meta-carte/SKILL.md` + règle `.cursor/rules/vfg-carte-meta.mdc` (carte des repos/tiers/ports + procédure de mesure).
- **Article publié** : `blog.vfg.lol/…/metaprojet/2026-10-01-2249_lancer-rainbow-journey-et-carte-meta-du-systeme.md` (catalogue 614, dérive 0/0).
- **Relais** : `docs/handoffs/2026-10-01-2240-lancement-rainbow-journey-carte-meta.md`.
- **Dettes mesurées ce jour** : VFVFGPT `BEHIND 2` (5 modifs) ; VFJah_Messenger `BEHIND 6` (sale) ; collision port `:5210` ; `_ssot/ports.json` en avance sur sa source ; divergence handoffs (`handoffs/` vs `docs/handoffs/`).
- **Blocage environnemental** : disque **C: quasi plein** (ENOSPC) → la garde `test:ci` du dépôt blog échoue (6 tests copient des fixtures dans `%TEMP%`). Publication faite avec `--skip-tests` assumé (`check:links` + `check:counts` verts).

## Rangement livré

- Manifeste schéma 3 : `path`, `kind`, `aliases`, `lifecycle`, `expected_present`.
- Résolution de chemin centralisée dans `dev-meta.mjs` pour boot, verify, status, pull, manifest-check, closure et plan-status.
- `manifest:check` : zéro erreur ; les projets non clonés sont explicitement optionnels.
- Chemins canoniques actifs sous `_live`, `_dev`, `_sites` et `_docs/repos`.
- `FG_SkinEditor` et `LaboHub` déplacés physiquement ; les dépôts Git verrouillés par VS Code utilisent provisoirement une junction canonique vers leur ancien emplacement.
- Outils `_tools` reconnectés à `_dev/VFVFGPT`.
- Exports, sauvegardes, logs et fichiers temporaires déplacés sous `_out/quarantine/root-artifacts-20260919` sans suppression.
- Ancien worktree blog déplacé avec Git sous `_out/quarantine/worktrees` en conservant son `.env` et ses dépendances ignorées.
- Tâches Windows Pulse réécrites vers `_live/FG_Pulse` et relancées ; API `:4330` active.
- Suites validées : RAPPORT 106, VFVFGPT 296, VFGate 195, Pulse 69, Hero 82, Grimoire 21, IdeaPit 57, Cockpit 114, VFJah 160, Gandalf 47, ai-usage-hub 2 et Chronos 29 tests verts. CleanDaMatrix frontend 158/158 ; backend à corriger pour fermer proprement son runner après le test de retry réseau.

## Travail sécurisé

`RAPPORT-EXPERIENTIEL` est sur la branche locale `chore/workspace-reorder-safety-20260919` :

- `5b8d051` — contenu baie de brassage et Rainbow Journey ;
- `57ddd04` — compatibilité manifeste et handoff ;
- tests : 106/106 PASS ;
- aucun push, aucun déploiement live.

## Restant opérationnel

1. Fermer puis rouvrir VS Code, inverser les junctions des dépôts Git : dépôt physique sous le tier, junction temporaire à la racine.
2. Rejouer un démarrage Windows complet, vérifier Pulse et Agent Presence, puis dater la période de compatibilité de sept jours.
3. Retirer les anciennes junctions uniquement après absence de référence runtime et validation d’un reboot.
4. Revalider les clients natifs Chronos, les longues coupures de transport et l’export/import Chronowflow.
5. Trier les anciens plans en `clos`, `superseded`, `blocked-human` ou `candidate`; aucun backlog ancien n’est automatiquement réactivé.
6. Rebaser les 73 liens morts relevés par `VFVFGPT npm run doc:check-links` et corriger la fermeture du runner backend CleanDaMatrix.

## Protections

- `Lucien`, `VFG_UnifiedPOC` et `____Currently_Archived` : no-touch.
- `.env`, bases, médias et archives : aucune suppression ou migration.
- `node_modules` et builds : conservés pour ce passage ; nettoyage futur seulement après preuve de reconstruction.
- `Matachigot-1` : clone doublon conservé physiquement tant que son dossier est verrouillé, avec pointeur de quarantaine daté.

## Repris de `main` (STATUS de la racine historique, à réconcilier)

> Fusion de `main` du 2026-10-02 : sections propres à `main` conservées telles quelles ; l'instantané des tiers de juillet est remplacé par `node _scripts/dev-meta.mjs status`.

### Actions 2026-10-02 — Atlas mesuré

- **État des lieux méta des 60 dépôts** (format `vfg-audit-mesure`) : `docs/AUDIT-ATLAS-2026-10-02.md`,
  base HTML `docs/atlas/atlas-2026-10-02.html`, outil rejouable `_scripts/atlas/`.
- **P0** : API de règles VFGate écrivable sans authentification (C03) ; `docker-publish` VFGate
  10/10 en échec (C04) ; jeton Telegram en clair dans la base Jah (C05) ; registres de ports
  divergents, 4344/4477 absents (C01).
- **REFACTOR-RULES** : 0/8 fiches exécutées au 02/10. Handoff :
  `docs/handoffs/2026-10-02-atlas-base-connaissance.md`.

### ⚠️ Deux racines coexistent sur ce poste (2026-09-22)

`[chemin local]` est un **second workspace racine**, et c'est le **clone actif** de ce
dépôt : manifeste **schéma 3** (`updated_at` 2026-09-19), tiers `_live/_dev/_prod/…`
**peuplés**, 26 projets, `FG_Chronos` embarqué, branche courante
`docs/agent-presence-live-cleanup-plan`.

Son `CLAUDE.md` déclare « **Racine locale actuelle : `[chemin local]`** » et interdit
d'explorer les chemins racine historiques. `[chemin local]` est donc l'arborescence
**historique**. La chaîne `GitRepos` n'apparaît nulle part dans `[chemin local]`.

→ Conséquence : les documents produits par le ménage du 22/09 vivent dans une
arborescence qu'une session active ne verra pas. **Rapatriement = décision humaine**
(les deux formes diffèrent : tiers contre dépôts à plat).
Détail : `docs/AUDIT-DOUBLONS-2026-09-22.md`.

### Actions 2026-09-22

- **Ménage de la racine `[chemin local]`** (la racine du poste, pas ce dépôt) :
  46 → 20 entrées, 27 → 4 worktrees enregistrés, 0 fichier supprimé, 0 branche
  supprimée, aucun `--force`. Documents : `docs/MENAGE-RACINE-GITREPOS-2026-09-22.md`
  (carte + corrections) et `docs/handoffs/2026-09-22-racine-gitrepos-nettoyage-worktrees.md`.
- **Convention de worktree unifiée** : un chantier vit désormais dans
  `.worktrees\<depot>-<lot>`. Trois conventions coexistaient (racine nue du disque,
  `<depot>\.claude\worktrees\`, hors racine). Inscrite dans `RainbowPiano\AGENTS.md`,
  `Chronowflow\AGENTS.md`, les skills `cote-jardin-tache` et `vfg-agent-presence`.
- **⚠ Corrigendum action 4** : `FGDidou/vfg-kit` **existe déjà** et désigne un autre
  projet (80 commits, aucun ancêtre commun avec le `vfg-kit` local). Le local
  (3 commits, 63 Mo, aucun remote) doit être sauvegardé sous un **nom libre**.
  Voir `docs/PLAN-SUITE-RACINE-GITREPOS.md`, ACTION 4. Exploration : ce nom recouvre
  en réalité **quatre** objets distincts (`docs/AUDIT-DOUBLONS-2026-09-22.md`, §1).
- **Exploration des doublons** (`docs/AUDIT-DOUBLONS-2026-09-22.md`) : seconde racine,
  `vfg-kit` ×4, SSOT ports en 5 exemplaires et 2 formats incompatibles, `sync-services.mjs`
  inopérant sur le format du 18/07, bug `label` dans `snapshot-articles-index.mjs`
  (dossier `-undefined`), HEAD détaché non rattaché dans `-publish`, et un précédent
  documenté de suppression de ce dépôt (WSL, 2026-07-12).
- **Restent FG** : fermer l'IDE sur `[chemin local]` (bloque l'action 1) ;
  choisir le nom du dépôt distant pour `vfg-kit` (action 4) ; accord nominatif cible
  par cible avant toute purge de l'archive (action 3, seule destructive) ;
  trancher la question des deux racines.

### Actions 2026-07-07

- **Citadelle vague 2 mergée** (PR #29, CI verte) : filtre quartier, zoom/pan, vue liste,
  anneaux objectifs + garde-fou `check:secrets`. Plans/handoffs :
  `docs/PLAN-EVOLUTION-2026-07-07.md` (W1–W5) et
  `docs/handoffs/2026-07-07-plan-evolution-citadelle-vague2.md`.
- **Nouveau** : `node _scripts/check-secrets.mjs <repo>` — scan de secrets en dur d'un
  repo sibling (W3.1 fait, testé sur RAPPORT-EXPERIENTIEL : propre).
- **⚠ VFG_Citadelle divergé** (ahead 2 / behind 2, dont un `fix(citadelle)` jamais poussé) —
  rien forcé, arbitrage FG requis. Détail : `VFG_Citadelle/PLAN-EVOLUTION-2026-07-07.md`.
- Restent FG : W1 (port SSOT Citadelle via `/plug-tool`), W2 (collision :5210).

### Items ouverts

1. **Collision port :5210** — ✅ **décision FG 2026-07-03** : EOL du legacy `VFJah_Messenger` **à la promotion de la vNext** (consigné dans le STATUS du legacy). La collision se résout à la promotion de `VFJahMsnPlus`.
2. **`.env` de l'archive VFGPT** — les 9 tokens MCP/hub ont été copiés vers `_dev/VFVFGPT/.env` (gitignoré) le 2026-07-03. La copie archive ne peut pas encore être purgée : `START-ALL-MCP-SERVERS.ps1` (archive) la charge au lancement des serveurs MCP, et `~/.claude.json` référence encore le chemin archive. **Go FG 2026-07-03 pour préparer** la migration vers `_dev/VFVFGPT` — bascule + purge = R3 avec FG.
3. **Repo `Articles_Configuration_IA`** (hors workspace, sibling) — ✅ **décision FG 2026-07-03 : reste local + zip, pas de remote** (données perso d'un tiers — Paul). Aucune publication sans son accord. Item clos tant que la situation ne change pas.

### En cours / à venir
- **Bascule MCP (R3, avec FG)** : le lanceur migré est prêt (`_dev/VFVFGPT/START-ALL-MCP-SERVERS.ps1`, commit `8cf1561`) — arrêter les MCP archive, lancer le nouveau, vérifier 7+7 OK, purger le `.env` archive (item ouvert n°2)
- **S1 rotation Grafana + S3 admin:reset VFJahMsnPlus** : actions FG guidées, en attente
- **ADR 0002** (unification usage IA) : proposée, lecture + décision FG
- **P4 Docker VFGate** : checklist FG dans le plan micro VFGate (VPS + GHCR, non délégable)
- **Hero PR-D1** (fusion doc) : session dédiée
- ~~Remote GitHub privé Articles_Configuration_IA~~ — décision FG 03/07 : reste local + zip