blog.vfg.lol

STATUS — VFG_Cockpit — 2026-10-03

STATUS — VFG_Cockpit

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

STATUS — VFG_Cockpit

Dernière mise à jour : 2026-07-18 (heure Paris).

État : Phase 1.1 en prod sur https://cockpit.vfg.lol — smoke Windows + WSL2 + VPS OK ; correctifs PWA (manifest hors Basic Auth) et SSE (Content-Type: text/event-stream via reply.hijack). Validation esthétique CRT FG toujours ouverte. Citadelle VPS encore en 401 ([variable d'environnement]).

Ce qui existe

  • Scaffold complet : .gitignore, package.json, .env.example, config/*.config.json (upstreams, seuils, flotte), CI, check-secrets, genere-pin-hash, bff/lib/paris-time.mjs.
  • Contrat d'état mock : demo/mock-etat.mjs (schéma 1, scénario animé 120 s, déterministe) + tests contrat. Sections : upstreams, flotte, projets, ordres, blog, messages, ondes, jeux, vfgate, cerveau (IdeaPit), workflow (handoffs + bus agents), vie (rythme/équilibre), alertes, ticker.
  • Design system rétro-futuriste : public/css/crt.css (palette phosphore, scanlines, mode nuit) + composants.css (LED, jauges, compteurs 7-seg, interrupteurs/capot aviation, cadres à rivets, ticker, sparklines) + public/js/pictos.js + demo/styleguide.html.
  • Hub navigable : #/ = grille 12×8 (Surface, inchangée ≥ 1200 px) + 7 sous-pages (#/projets, #/flotte, #/publication, #/comms, #/jeux, #/cerveau, #/workflow) via routeur.js (hash SPA, client d'état unique) + nav.js (rail haut, barre basse mobile, pouls global). Tap sur un instrument → sa sous-page.
  • KPIs calculés : public/js/derive.js (pur, testé) — pouls du Royaume 0-100, latences, cadence de publication, âge dernier message, flux d'idées, heure de pointe…
  • Responsive : responsive.css — Surface/desktop sans scroll, tablette 6 colonnes, mobile colonne unique + nav basse 44 px.
  • PWA : manifest.webmanifest (+ crossorigin=use-credentials), icônes SVG, sw.js réseau-d'abord. Sur Caddy prod, manifest / icônes / sw.js hors Basic Auth (sinon fetch manifest → 401).
  • Démo autoportante : npm run cockpit:demo → demo/cockpit-demo.html, un seul fichier HTML offline (modules bundlés esbuild + CSS + polices inlinés, zéro réseau, ouvrable au double-clic). Généré, non versionné (gitignore).
  • BFF Phase 1 + 1.1 : poller.mjs, sse-hub.mjs, server.mjs (Fastify 5 + @fastify/static) — GET /api/etat, GET /api/events (SSE). Clients réels : citadelle, vfgate, blog, msn, flotte, jeux (hero+matrice), ideas, bus. Blog défaut = local :5195 (prod via BLOG_URL). Aggregator dérive upstreams.hero / upstreams.matrice depuis la tranche jeux. Arrêt propre SIGINT/SIGTERM.
  • SSE : /api/events utilise reply.hijack() + writeHead avec Content-Type: text/event-stream (sinon headers absents → EventSource abort).
  • Front : sourceReseau en prod (:5230) ; mock uniquement via import dynamique si port 5231 ou ?mock=1 (évite 404 /demo/mock-etat.mjs hors public/).
  • scripts/dev-static.mjs : serveur statique de dev.
  • Déploiement : deploy/vfg-cockpit.service, deploy/cockpit.caddy (PWA public + flush_interval -1 pour SSE), deploy/deploy-vps.sh → cockpit.vfg.lol. Install VPS actuelle : sync fichiers + .deployed-sha (pas encore de clone git propre sous [chemin serveur]).
  • 113/113 tests verts, check:secrets vert.
  • Smoke Windows + WSL2 Debian + VPS faits (2026-07-17/18).

Lancement

  • npm run cockpit → http://[hôte interne]/
  • Mock front : node scripts/dev-static.mjs → http://[hôte interne]/public/index.html
  • Navigation : onglets du rail (ou barre basse mobile), tap sur un instrument, bouton ‹ pour revenir au hub.
  • Prod : https://cockpit.vfg.lol (Basic Auth admin) — SSH fallback ssh -F NUL -i ~/.ssh/id_ed25519 debian@51.77.244.222 si ACL ~/.ssh/config.

Points techniques à surveiller

  • VFGate « 0 adaptateur — la porte attend » : volontaire, ne pas « fixer ».
  • Boutons Phase 2 : marqués Phase 2, ne pas les câbler.
  • Validation esthétique FG : toujours ouverte (CRT non retouché sans GO).
  • MSN derniers : vide sans session user (historique privé) — hub + services OK.
  • Blog prod articles.json peut répondre 403 ; blog local :5195 ou BLOG_URL.
  • Citadelle VPS : degrade / HTTP 401 tant que [variable d'environnement] non aligné dans [chemin serveur].
  • Caddy : admin API :2019 off → systemctl restart caddy (pas reload).
  • Publication blog éditoriale : Admin API (POST /admin/api/articles), pas un git push seul — voir guide Anneau / publish-local.mjs.

Ensuite

  • Aligner [variable d'environnement] (+ éventuellement BLOG_URL) sur le VPS.
  • Clone git propre [chemin serveur] + deploy key (remplacer sync tar).
  • Validation esthétique CRT par FG.
  • Phase 2 : écritures gates R1/R2 (boutons actuellement factices).

Historique

  • 2026-07-18 : Hotfix prod — PWA hors Basic Auth ; mock import dynamique ; SSE hijack+writeHead + Caddy flush_interval -1. Smoke post-fix OK. Article blog : cockpit Phase 1.1 + hotfixes.
  • 2026-07-17/18 : Reprise validation — pull f594997, smoke Windows + WSL2, alignement VPS (tar faute de git remote), article blog Phase 1.1 publié.
  • 2026-07-17 : Phase 1.1 + deploy VPS — clients msn/flotte/jeux/ideas/bus, blog local :5195, systemd+Caddy, fix aggregator degrade+donnees, 113 tests.
  • 2026-07-17 : Phase 1 BFF — poller + sse-hub + server.mjs, clients citadelle/vfgate/blog, front sourceReseau (PR #5).
  • 2026-07-10 : détails niveau 2 dans les sous-pages (voir handoffs/2026-07-10-handoff-details-niveau-2.md).
  • 2026-07-09 : hub navigable v2 (voir handoffs/2026-07-09-handoff-hub-navigable-v2.md).
  • 2026-07-08 : Phase 0 démo + amorce Phase 1 (voir handoffs/2026-07-08-handoff-phase0-demo-et-amorce-phase1.md).

source markdown

Concepts de cet article

VPSCaddyCitadellehandoffdérivegateVFGateIdeaPit

Partage le plus de concepts avec