STATUS — VFGate
Article généré automatiquement depuis le STATUS.md de VFGate — 2026-10-03. Les chemins locaux, les hôtes internes et les noms de variables ont été neutralisés.
STATUS — VFGate (BDDBridgePOC)
SSOT vivant du présent · mis à jour à chaque session significative. Nom canonique : VFGate. « BDDBridgePOC » est l'alias historique (voir § Dépôt et chemins ci-dessous).
Dernière mise à jour : jeudi 2 octobre 2026 — ✅ FIN DU GEL VFGate : le journal d'audit est borné et tourne tout seul. Commit 11f7056 (main, non poussé, 1 commit d'avance).
| Mesure | Commande | Résultat |
|---|---|---|
| Tests core | node --test packages/core/test/core.test.js | 12/12 PASS |
| Suite complète | npm test | 205/205 PASS, 0 fail |
tail(200) sur le journal réel de 175 Mo | benchmark AuditLog | 4,39 ms (avant : 3–6 s) |
| Santé service | GET /api/vfgate/v1/health | 200, 0 ms |
| Chaîne de présence | smoke-agent-workflow.mjs | PASS ×2 |
| Chaîne complète | doctor-agent-presence.ps1 | tout OK |
Cause racine : AuditLog.tail() (packages/core/src/audit.js) relisait tout vfgate-audit.jsonl
à chaque appel ; le relais de présence l'interroge toutes les 500 ms, et le journal avait atteint
174,76 Mo → 3–6 s par lecture → empilement → VFGate figé depuis le 2026-10-01 ~22:06 UTC.
Correctif : tail() lit une fenêtre de fin (64 Ko min, 512 o/événement) ; rotation auto avant
écriture (8 Mo, 3 archives), fail-open. 2 tests ajoutés. Fiche : docs/handoffs/2026-10-02-0145-gel-vfgate-tail-audit-borne.md.
Prochaine action : décider du push de 11f7056 (déclenche code-deploy en production — décision humaine).
Dernière mise à jour (précédente) : jeudi 1er octobre 2026 (nuit) — ✅ LE PONT TELEGRAM ↔ JAH FONCTIONNE DANS LES DEUX SENS (mesuré en production).
| Sens | Preuve |
|---|---|
| A — Telegram → Jah | message.received réel de didoufg (chat:638877009) · ingress_sources.telegram count=3 |
| B — Jah → Telegram | ingress → 200 {"ok":true,"routed_to":"fg@jah"} · bridge_outbox total=1, envoyés=1, attempts=1, last_error=null, payload=2 o ({} = purgé après envoi, conforme) |
attempts=1 + err=null = VFGate a accepté au premier essai : la boucle complète
ville → outbox → VFGate → Telegram est vérifiée, jeton et idempotence compris.
Configuration mesurée : bot @didoumaloubot en polling: true · conteneur VFGate sur
jah-ingress + vfgnet · store : VFJAH_INGRESS_URL=http://jah-hub:5231,
VFJAH_TELEGRAM_RELAY=true · JAH_BRIDGES_ENABLED=1, JAH_VFGATE_URL → 200 ·
bridges : fg@jah → telegram / 638877009 · fg@jah.settings_json.telegram = true.
⚠️ Cause racine du sens retour (trouvée et corrigée). Le blocage n'était ni le lien ni l'opt-in :
didou.say()(src/bots/didou.mjs:97) rendnullsi!canInteract(db, didou, accountId), etcanInteract(src/social/contacts.mjs:68) exige une acceptation mutuelle. Mesure avant correction :didou@jah ↔ fg@jahétait enpending_out/pending_in— la demande de didou n'avait jamais été acceptée, et didou ne peut pas accepter lui-même. L'ingress répondait alors409 didou_unavailable: message trompeur (didou était joignable, c'est le contact qui manquait).
⚠️ Correction de diagnostic (mesurée). L'env du conteneur porte encore
VFJAH_INGRESS_URL=http://vfjah-bot:5211(le legacy) — mais le store portehttp://jah-hub:5231. Le store prime surprocess.env(env-manager.js:50-51). Lire l'env du conteneur seul produit un faux diagnostic : il faut lireGET /settings/env.
⚠️ Piège d'accès. L'ingress écoute sur
JAH_INGRESS_HOST=172.30.230.10, pas sur127.0.0.1: depuis le conteneur Jah,http://[hôte interne]/ingress→ECONNREFUSED.
Ménage de branches : #17 et #19 mergées sur main (elles apportent jah-relay.js et sendGuard.js — le défaut 5.2 est corrigé) · #15 fermée (supplantée par #17 : deux mécanismes d'idempotence concurrents auraient coexisté) · #16 rebasée sur main (9621828, 214/214 PASS), base repointée, porte les 5 défauts restants (5.1/5.3/5.5/5.6/5.7) · #18 ouverte (rattache durablement vfgate-api à jah-ingress après le up -d) · #14 ouverte (erratum de topologie). Preuves : docs/handoffs/2026-10-01-2400-etat-reel-pont-telegram-jah.md · audits/ (26 fichiers, scripts rejouables).
Dernière mise à jour : jeudi 1er octobre 2026 — clôture du palier delta 7, aucun code applicatif modifié. HEAD mesuré 678ee3a (tag annoté v0.1.0-delta7), origin/main = 27f677d → 1 commit d'avance, pas de divergence, pas de push effectué (décision distincte). Mesures rejouables du 2026-09-30 : npm test 195/195 PASS · prod gate.vfg.lol 401 sur /health, /adapters et /bridge/v1/health (donc mesurée, plus « non mesurée ») · journal d'audit 174 Mo (182 740 270 octets, et non « > 50 Mo ») · store packages/api/data/ = 6 adaptateurs / 8 routes (et non 6 routes) vs data/ = 0. Livrables : commit 678ee3a (5 fichiers, +346/−4) → docs/RELEASE-delta7.md (242 lignes), CHANGELOG.md (créé), README.md, docs/INDEX.md, CLAUDE.md ; handoff docs/handoffs/2026-10-01-vfgate-delta7-release.md.
Dernière mise à jour (précédente) : mercredi 30 septembre 2026 — session d'audit ; son bloc d'en-tête citait HEAD afe6577, qui était l'état d'entrée de cette session, pas le HEAD courant (celui-ci est 678ee3a). Fiche : docs/2026-09-30-audit-etat-refresh.md.
Dernière mise à jour (antérieure) : jeudi 16 juillet 2026 ~18h — Track A orchestrateur : A1 (npm audit) 0 CVE, ws unique 8.21.0 ; log sécurité reconstruit. Restes humains : WA-QR, ROUTES-CLEAN, GATE-05, P4 deploy/secrets.
Session 30 septembre → 1er octobre 2026 — Palier delta 7 (documentation seule)
Palier delta 7 — 2026-09-30 (mesures) / 2026-10-01 (clôture). Tag v0.1.0-delta7 sur 678ee3a.
Aucun code applicatif modifié : ce palier consigne un état mesuré et nomme sa dette.
| Mesure | Commande | Résultat | Corrige |
|---|---|---|---|
| Tests | npm test | 195/195 PASS, 0 fail | — |
| VFGate prod | curl.exe -s -o NUL -w "%{http_code}" …/api/vfgate/v1/health | 401 | « prod non mesurée » → mesurée |
| Adaptateurs prod | … /api/vfgate/v1/adapters | 401 | — |
| Bridge prod | … /api/bridge/v1/health | 401 | — |
| Jah Messenger | curl.exe -s https://jah.vfg.lol/readyz | {"status":"ready","version":"4.0.0-alpha.13"} | — |
| Journal d'audit | (Get-Item …/vfgate-audit.jsonl).Length | 174 Mo (182 740 270 o) | « > 50 Mo » → 174 Mo |
| Store peuplé | packages/api/data/vfgate-store.json | 6 adaptateurs / 8 routes | « 6 routes » → 8 routes |
| Store racine | data/vfgate-store.json | 0 adaptateur | — |
| Rotation audit | Select-String packages/core/src/audit.js -Pattern rotate | 0 occurrence | — |
| Git local | refs main / origin/main | 678ee3a / 27f677d → ahead 1, sans divergence | HEAD afe6577 → 678ee3a |
Les 7 défauts mesurés — aucun corrigé (détail fichier:ligne : docs/RELEASE-delta7.md §5) :
404 latent (hero-bridge.js:146) · auth + idempotence absentes (vfgate.js:109-127, le plus
coûteux) · journal sans rotation · deux dataDir (config.js:12) · code mort (hero-bridge.js:66-81)
· boucle-guard muette (hero-bridge.js:156) · un poller par adaptateur → 409 (adapterRegistry.js:104-108).
Relais : (1) mesurer le store depuis le VPS (SSH, absent en session) ; (2) décision FG sur le
défaut n°2 (auth + idempotence) ; (3) correctif n°4 (dataDir, risque nul).
Session 30 septembre 2026 — Audit d'état + plan de refresh (lecture seule)
Dépôt et chemins (mesuré)
| Fait | Commande | Résultat |
|---|---|---|
| Nom canonique | workspace.manifest.json → projects.VFGate | tier=live, path=_live/VFGate, lifecycle=active, expected_present=true |
| Alias historique | idem | aliases=["BDDBridgePOC"], « alias conservé pendant la migration » |
| Chemin canonique | (Get-Item _live\VFGate).LinkType | Junction → [chemin local] |
| Chemin physique | (Get-Item BDDBridgePOC).Attributes | Directory (pas de ReparsePoint) → dépôt réel |
| Remote | git -C BDDBridgePOC remote -v | https://github.com/FGDidou/VFGate.git |
BDDBridgePOC archivé ? | Get-ChildItem ____Currently_Archived,_archived | non — aucune copie, ____Currently_Archived/ contient 9 autres dossiers |
Conclusions : un seul dépôt, deux chemins. BDDBridgePOC n'est pas un projet archivé, c'est l'emplacement physique du dépôt vivant, atteint via la junction canonique. Ne pas réactiver une seconde entrée de projet. Après le reboot d'inversion prévu par la migration de tiers, BDDBridgePOC deviendra la junction et _live/VFGate le dossier physique — sans changement de dépôt.
Ce que l'audit a mesuré (détail et commandes : fiche d'audit)
- Vivant : télémétrie des agents — le journal reçoit des écritures
vfg-agent-presencele matin même du 30/09 ; branchent dessus FG_Chronos (émetteur + relais) et VFG_Cockpit (upstream SSE). - Sain :
npm test195/195 PASS au 30/09 ;npm audit0 vulnérabilité au 16/07 (cf. § Correction ci-dessous). - Peu utilisé pour sa fonction première : 0 règle, 0 abonné, workflows de juin ; 6 types d'adaptateurs implantés mais non configurés.
- Footgun config : deux stores coexistent —
data/(vide) vspackages/api/data/(6 adaptateurs, 6 routes) selon le répertoire de lancement. - À corriger : journal
packages/api/data/vfgate-audit.jsonl> 50 Mo sans rotation, contenant des messages réels de juin. - À trancher :
.envlocal enTELEGRAM_ENABLED=trueavec un bot partagé, alors que le runbook exige un bot dédié. - Non mesuré : production (
gate.vfg.lol) — le réseau sortant était indisponible ; prod attestée (image du 21/06, API:8083), deploy auto désactivé par défaut.
Correction — information périmée
La section « Points restants » plus bas annonce « 16 CVE high severity persistent » (constat du 29 juin). C'est périmé : la passe du 2026-07-16 (cf. SECURITY-UPGRADE-LOG.md) donne npm audit = 0 vulnérabilité, ws unique en 8.21.0, après migration electron 43 / electron-builder 26 (03/07) et packaging NSIS vérifié.
Relais — prochaine session
- Mesurer la prod (2 commandes, 30 s) :
curl.exe -s https://gate.vfg.lol/api/vfgate/v1/healthet…/api/bridge/v1/health→ consigner ici. - Décision FG sur Telegram (bot dédié ou mode simulé) — bloquant pour le Lot 1.
- Lot 0 de l'audit :
dataDirabsolu, purge des restes de test + 4 routes UUID, rangement racine, réparation dedocs/INDEX.md.
Livrables de la session
HANDOFF_Audit_29juin2026.md— plan d’action détaillé (tâches A à F) pour l’agent suivant.ARTICLE_Cloture_Audit_29juin2026.md— synthèse executive à destination des parties prenantes.- Article devblog publié dans
RAPPORT-EXPERIENTIEL:2026-06-29-0215_vfgate-migration-mcp-zed-tests-et-publication-devblog.md(statutpubaprès correction du frontmatter).
Clôture — Session 29 juin 2026 (Audit repo VFGate A-F)
Commentaires de fin de session
L'agent de clôture a exécuté le plan HANDOFF_Audit_29juin2026.md (tâches A à F) et a poussé les correctifs en commits atomiques.
Validation
npm test: 195/195 PASS.node --test packages/api/test/api.test.js: 18/18 PASS (< 2 s).npm run smoke:allcontre API locale :5191 : PASS (bridge feed SKIPPÉ faute de[variable d'environnement]).
Tâches A-F — état
| ID | Tâche | Commit | État |
|---|---|---|---|
| A | Corriger le hang SSE (/events/subscribe + test) | 2bfe9c1 | ✅ |
| B | Masquer les secrets dans GET/PUT/PATCH /settings/env | 2bfe9c1 | ✅ |
| C | Retirer packages/api/.wwebjs_cache/ de git + .gitignore | 85996e8 | ✅ |
| D | Patcher ws à la version la plus récente disponible (8.21.0 — 8.22.0 n'est pas publiée) | 63c83a0 | ✅ |
| E | Aligner docs/02-architecture-v0.md sur le store JSON | bd4130b | ✅ |
| F | npm test + npm run smoke:all verts | — | ✅ |
Points restants / non couverts
- Vulnérabilités npm : 16 CVE high severity persistent (
electron,node-tar,tar-fs,wsviapuppeteer-coreembarqué danswhatsapp-web.js). Uniquementwsdirect a été mis à jour. Une passenpm audit fixou mise à jour dewhatsapp-web.js/puppeteer-corereste à évaluer avec précaution (risque de break Puppeteer + Electron builder). - Hygiène processus : à surveiller sous Windows —
npm testlaisse parfois des processusnode.exesur les ports 519x. Vérifier avecnetstat -ano \| findstr 519si besoin.
Plan post-audit — Session 29 juin 2026
Tâches en cours
| ID | Tâche | État |
|---|---|---|
| P4 | Docker build → push → deploy VPS | ⚠️ Bloqué — voir § Docker Deploy Fix |
| P-env | .env.example aligné prod/dev + token pattern | ✅ Fait |
| P-doc | Noter BOT_DEDIQUE_STARTED dans STATUS.md | ✅ Fait |
| CVE | Notes persistantes dans STATUS.md § Points restants | ✅ Fait |
| CI/CD | Workflow GitHub Actions corrigé | ✅ Fait (nécessite activation manuelle) |
Variable BOT_DEDIQUE_STARTED
- Fichier :
.env - Type : booléen (
true/false) - Usage : active le polling real data sur le bot dédié (distinct de VFG_Hero, pas de conflit 409 Telegram).
- Decision FG : bot dédié prêt et testé séparément. Devblog à mettre de côté (FG est encore dessus).
Docker Deploy Fix (29 juin 23h30)
Problème : commandes HANDOFF échouaient (auth GHCR manquante, fichier compose introuvable, placeholders non remplacés).
Diagnostic complet : DIAGNOSTIC_CI_CD_29juin2026.md (4 erreurs identifiées + 3 options de fix).
Correctifs appliqués :
- Workflow
.github/workflows/docker-publish.yml: chemin[chemin serveur]+ fichiercompose/t1-core.yml+ commandes docker compose directes (finideploy.shfantomatique). - Guide manuel :
HOWTO_Deploy_Docker_VPS.md(commandes exactes + prérequisdocker login ghcr.io).
Action manuelle requise (FG) :
Vérifier structure VPS réelle :
ssh vps-vfg "ls -la [chemin serveur]" ssh vps-vfg "grep -A5 vfgate-api [chemin serveur]"Confirmer que
t1-core.ymlexiste et contient bienvfgate-api.Push manuel test (une fois) :
# Auth GHCR (générer PAT sur github.com/settings/tokens) echo $GITHUB_PAT | docker login ghcr.io -u fgdidou --password-stdin # Push + deploy (depuis VFGate/) docker push ghcr.io/fgdidou/vfgate-api:latest ssh vps-vfg "cd [chemin serveur] && \ docker compose -f compose/t1-core.yml pull vfgate-api && \ docker compose -f compose/t1-core.yml up -d --no-deps vfgate-api" # Test curl -s https://gate.vfg.lol/api/vfgate/v1/health | jq .Activer CI/CD (si push manuel OK) :
- Settings → Secrets and variables → Actions :
VPS_HOST=51.77.244.222VPS_USER=deploy[variable d'environnement]=<clé privée SSH>
- Settings → Variables → Actions :
VPS_DEPLOY_ENABLED=true
- Settings → Secrets and variables → Actions :
État : workflow corrigé, désactivé par défaut (opt-in), nécessite validation structure VPS + secrets GitHub.
HANDOFF — Session 29→30 juin 2026 (Stabilisation + rapatriement RAPPORT)
Ce qui a été fait
- Docs externes mis de côté : les 4 fichiers
docs/llm-pricing-*.mdsont déplacés dansNE_DOIS_PAS_RESTER_LA/(dossier ignoré). Un d'eux reste candidat article.docs/INDEX.mdmis à jour. tmp-start-session.jsonconservé et ignoré : utilisé comme payload de test de l'audit session token.- RAPPORT-EXPERIENTIEL rapatrié : copié dans
[chemin local], réinitialisé en repo Git autonome (git init+ commit initial834b742). Le.gitworktree lié au monorepo VFVFGPT a été supprimé. - MCP
vfg-commandsenrichi :VFG_RAPPORT_ROOTconfiguré danssrc/config.jsetscripts/start-zed-mcp-servers.ps1.- Nouvel outil
vfg_commands_md_collect: collecte / copie / déplace récursivement les.mddepuis plusieurs répertoires racines, avec préservation optionnelle de la structure. - Testé en local : 251
.mdcollectés sur VFGate + RAPPORT, 77.mdcopiés depuisdevblog/postsen préservant la structure.
Serveurs MCP actifs (au prochain start-zed-mcp-servers.ps1)
| Serveur | Port | État |
|---|---|---|
| neuralwatts-monitor | 5194 | ✅ |
| vfg-markdown | 5197 | ✅ |
| vfg-gate | 4342 | ✅ |
| vfg-feed | 4341 | ✅ |
| vfg-docs | 4340 | ✅ |
| agent-telemetry | 5198 | ✅ |
| vfg-commands | 5199 | ✅ (+ md_collect) |
Notes / décisions
- Les serveurs MCP source vivent encore dans
[chemin local](clone du monorepo VFVFGPT, branchefeat/vfg-commands-mcp). Le patch MCP est commité sousd3495a0. - Le repo
RAPPORT-EXPERIENTIELrapatrié est actuellement sur la branchemaster(commit initial834b742). Il faudra rebaser/renommer enmainou configurer le remote cible avant push.
TODO
- Rendre configurable le repo
RAPPORT-EXPERIENTIELdansvfg-commands-mcpviaVFG_RAPPORT_ROOT. - Diagnostiquer/corriger
ADMIN_BACKEND_URLpourvfg_commands_devblog_publish(auto_publish=true): endpoint corrigé (/admin/api/articles/:id/publish), backend admin:5220démarré. - Rapatrier
RAPPORT-EXPERIENTIELà côté de VFGate dans le nouveau workspace et pointerVFG_RAPPORT_ROOTdessus. - Committer les modifications de
vfg-commands-mcp(config + devblog + mcp-core). - Pousser le repo
RAPPORT-EXPERIENTIELsurmainpour déclencher le workflow de déploiement VPS. - Valider le tool MCP
vfg_commands_md_collectvia une session Zed +tmp-start-session.json.
HANDOFF — Session 26 juin 2026 (Swarm boot)
HANDOFF — Session 26 juin 2026 (Swarm boot)
Ce qui a été fait
- GATE-06 smoke test : ✅ PASS — 13/13 tests smoke OSC routing (
/matrice/*→ port 8000,/default/*→ 8011) - Tests :
npm testen cours (186 attendus, 185 pré-existants PASS) - Plans swarm vague1 : commités dans
plans/(IMPLEMENTATION-SWARM-DECOMPOSITION-FINAL.md, meta/*, recon/s1-gate.md) - Worktree isolé :
ellasur brancheswarm/boot-ella-2026-06-26
État VPS (26 juin 2026)
⚠️ Deploy en attente — Docker non démarré localement. À exécuter :
cd VFGate && docker build -t ghcr.io/fgdidou/vfgate-api:latest .
docker push ghcr.io/fgdidou/vfgate-api:latest
ssh vps-vfg "cd [chemin serveur] && sudo docker compose -f compose/t1-core.yml pull vfgate-api vfgate-admin && sudo docker compose -f compose/t1-core.yml up -d --no-deps vfgate-api vfgate-admin"
HANDOFF — Session 21 juin 2026
Ce qui a été fait
- Admin UI Routes refonte complète : section "Flux rapides" (Telegram→WA, MSN→WA, WA→TG), labels lisibles, Activer/Désactiver/Supprimer par route, formulaire manuel avec
sourceAdapter+targetChannel - Router : filtre
sourceAdapteroptionnel — évite les boucles (ex. msg WA ne reboucle pas sur WA) - Schema route : champs
label+sourceAdapterajoutés, rétro-compatibles - Image Docker
ghcr.io/fgdidou/vfgate-api:latestrebuildée et déployée sur VPS - Skill
vps-vfgate+ rule.cursor/rules/vps-fleet.mdccréés - WhatsApp VPS : adapter
whatsapp-mqnjl9qhactif,qr_pending— scanner sur gate.vfg.lol → Connexions
État VPS (21 juin 2026)
| Container | Port | État |
|---|---|---|
vfg-fleet-vfgate-api-1 | 8083 | ✅ nouvelle image |
vfg-fleet-vfgate-admin-1 | 8084 | ✅ nouveau build UI |
Adapters actifs sur VPS :
| ID | Type | État |
|---|---|---|
stack-telegram | telegram | ✅ |
stack-osc | osc | ✅ |
stack-vfg-hero | vfg-hero | ✅ |
whatsapp-mqnjl9qh | 🟡 qr_pending — scanner |
Routes dupliquées (UUID sans label) encore présentes dans le store — les supprimer via gate.vfg.lol → Routes → Supprimer.
Prochaines actions
| ID | Sujet | Owner |
|---|---|---|
| WA-QR | Scanner QR WhatsApp sur gate.vfg.lol → Connexions | FG |
| ROUTES-CLEAN | Supprimer les 4 routes UUID dupliquées chat.* → whatsapp | FG |
| GATE-05 | R2 preuve bot dédié BotFather → Hero event log | FG |
Cap général du projet
| Phase | État |
|---|---|
| V1 data-hub | ✅ bridge health/feed/rules |
| S2 write pipeline | ✅ forward Hero ingest + hero_quest_id |
| GATE-03 | ✅ smoke bridge — health agrégé hero+matrice+vfgate |
| GATE-04 | ✅ TELEGRAM_ENABLED=true · envoi réel |
| GATE-05 | 🟡 bot dédié BotFather · chat.inbound → Hero ingest |
| GATE-06 | 🟡 OSC /matrice/* → :8000 |
| Bedtime Call | ✅ session.end → forward Hero |
| WhatsApp VPS | 🟡 adapter déployé · QR à scanner |
| Routes Flux rapides | ✅ UI + sourceAdapter filter + label |
| Multi-plateforme | ✅ PWA + Electron thin client |
Tokens alignés
| Clé VFGate | Alignement Hero |
|---|---|
[variable d'environnement] | [variable d'environnement] (ingest source:vfgate) |
[variable d'environnement] | VFG_Hero [variable d'environnement] |
[variable d'environnement] | Matrice [variable d'environnement] |
BRIDGE_WRITE_ENABLED=true | active le forward ingest |
Accès prod
- Admin :
https://gate.vfg.lol(Basic Auth — credentials dans/root/vfg-admin-credentials.txtVPS) - API interne VPS :
http://[hôte interne]/api/vfgate/v1/health
Tests (2026-06-21)
npm test: 185/186 pass (1 failing pré-existant : admin PWA SW check dans admin-dist)npm run smoke:poc: PASS