blog.vfg.lol

Jah Messenger, état des lieux au 29 septembre

Quatre jours après le brief : ce qui est en ligne, ce qui a été audité, ce qui reste allumé éteint — et la liste des décisions qui n'appartiennent qu'à FG

TL;DR

Le teaser de Jah Messenger : la Place du village sous un ciel de fin de journée

Le teaser de Jah — cliquez sur l'image pour ouvrir le guide illustré et sa vidéo de 3 min 18.

Quatre jours après le brief initial, Jah Messenger est en ligne en v4.0.0-alpha.10 sur jah.vfg.lol, avec 21 migrations, 905 cas de test déclarés, 856 fichiers suivis par le lint et cinq dépendances runtime en tout et pour tout.

Ce qui vient de se passer : une campagne d'audit v2 a relu le dépôt, ses docs et le live ; elle a produit une trentaine de constats, dont aucun P0 ; la revue croisée et la contre-revue indépendante ont rejoué les constats un à un ; un second agent a produit une re-vérification finale ; et le dernier flake E2E connu a été corrigé (#87).

Ce qui reste : une décision FG bloquante (un label CI qui ne gagne pas sur un diff de docs), 148 exports morts qui attendent un cliquet, et une liste de relectures humaines (contenus, allumages, ton des événements) qui ne se cochent jamais depuis un agent.

Ce qui n'est pas vrai, autant le dire tout de suite : aucun vrai habitant n'a encore utilisé Jah. Les portes R2, la soirée test et le cutover du village restent ouvertes, et c'est très bien.

Ce que cet article complète : un guide illustré — le teaser vidéo de 3 min 18 et vingt captures du vrai produit, prises par les tests de bout en bout.


1. Où en est Jah, en une minute

https://jah.vfg.lol/readyz répond {"status":"ready","version":"4.0.0-alpha.10"}.

RepèreValeur vérifiée le 2026-09-29
Livev4.0.0-alpha.10
Commits630
Pull requests fusionnées84
Fichiers suivis par le lint856
Cas de test déclarés905
Fichiers de test84 unitaires, 51 d'intégration, 45 E2E, 1 perf
Migrations21
Dépendances runtime5
Lignes de code~17 600 (src/), ~23 400 (ui/), ~21 000 (test/)
PR ouvertesaucune

Le projet a démarré le 25 septembre. Il a aujourd'hui quatre jours.

Les 84 PR se répartissent ainsi sur ces quatre jours : 3 le 25, 31 le 26, 15 le 27, 21 le 28, 14 le 29. Trois signatures dans le git log : FG (les fusions), des sessions Claude, et un agent Cursor — plus, depuis peu, GitHub Copilot.

Ce qui a été livré depuis le récit « du brief à la prod » du 27 septembre :

  • les neuf lots de qualité Q0 à Q9 : vie privée, robustesse, client, serveur, docs, outillage ;
  • la suite S0 à S19 de tout ce qui restait à faire, portée par des vagues d'agents en parallèle ;
  • les quatre nouveaux lieux : Observatoire, Lac, Cinéma, Serre ;
  • le mini-jeu J1–J6, la réparation R0–R7, le teaser vidéo de 3 min 18 ;
  • dix versions alpha successives, chacune déployée par la CI jusqu'à /readyz.

Le guide illustré suit le même plan : le teaser vidéo et vingt captures du vrai produit, écran par écran.


2. Le guide visuel : le teaser et vingt captures

Tout est dans blog.vfg.lol/vfjah : le teaser vidéo de 3 min 18 et vingt captures du vrai produit, prises à 1280×800 par les tests de bout en bout du projet — aucune maquette, aucune retouche.

La vidéo

Le teaser, plan sur la Place du village

La vidéo fait 40 Mo : elle ne pèse pas sur chaque lecture d'article, elle vit dans le guide. Cliquez sur l'image, ou ouvrez blog.vfg.lol/vfjah.

Entrer

La carte d'invitation et son QR code L'écran de connexion, aux couleurs de MSN 2005 Le bureau après connexion : liste de contacts et fenêtres bleues

Parler

Une conversation privée ouverte Un salon, et le fou rire collectif qui fait pleuvoir des émoticônes

Le monde

Le village en jeu : avatars, bulles au-dessus des têtes, ondes anonymes La carte du village, avec ses trois paliers de zoom Le village et ses bâtiments Une partie de morpion à deux, jouée depuis le monde

La vraie vie

Le tableau des coups de main (quêtes IRL) Un rassemblement : une photo de famille pour chacun « Ma page », façon Skyblog assumé

Les rituels

« Bonne nuit » : la journée résumée en trois lignes Un appel vidéo, et le fil qui relie les deux personnes Jah Live : la télé de la soirée projette les bulles et les polaroïds

Les quatre nouveaux lieux

L'Observatoire, une étoile par capsule de plus d'un an Le Lac et son ponton Le Cinéma et son écran La Serre, une fleur rare par amitié d'au moins un an

L'état réel

Les Nouveautés dans l'application, écrites comme à des amis

Le guide suit l'ordre dans lequel on découvre Jah :

Section du guideCe qu'on y voit
Entrerla carte d'invitation et son QR, la connexion MSN, le bureau
Parlerune conversation privée, un salon, le fou rire collectif
Le mondele village en jeu, la carte avec son zoom, les bâtiments
La vraie viele tableau des quêtes IRL, un rassemblement, « Ma page »
Les rituels« Bonne nuit », un appel vidéo, Jah Live
Les nouveaux lieuxObservatoire, Lac, Cinéma, Serre
L'état réelles Nouveautés, et le tableau de ce qui est éteint

Deux points de méthode, parce qu'ils disent quelque chose du projet.

D'abord, la vidéo n'est pas dans l'article. Le moteur du blog échappe volontairement tout HTML brut : une balise <video> sortirait en texte. Le teaser vit donc dans une page autonome, servie par la même machine, à côté de ses propres assets — et l'article y renvoie. Bonus : les 40 Mo ne pèsent pas sur chaque lecture d'article.

Ensuite, ces assets sont montés en statique, pas servis par le handler générique du serveur. Celui-ci lit le fichier entier en mémoire à chaque requête : 40 Mo par affichage, pas de requêtes Range — dont un lecteur vidéo a besoin pour se déplacer — et un type MIME faux (application/octet-stream, parce que sa table ne connaît pas .mp4). Trois défauts qu'un montage statique corrige d'un coup, et qui auraient été invisibles en local sur un fichier de test léger.


3. Ce que le produit sait faire, aujourd'hui

Le détail vit dans CHANGELOG-USER.md, écrit « comme à des amis ». En résumé, ce qui est allumé et utilisable : le cœur MSN (contacts, fenêtres, Wizz, salons), le village persistant (avatars, place, jardins, chantiers, objets-souvenirs), les appels audio/vidéo, le push, la PWA, les quêtes IRL à confirmation croisée, les rituels (question du dimanche, « Il y a un an », Bonne nuit), les talents, le mini-jeu, Ma page façon Skyblog, les visites entre villages, Jah Live, le Lac, le Cinéma, la Serre, l'Observatoire, et la Boum du vendredi.

Ce qui est livré mais éteint, volontairement :

ÉteintPourquoi
Le LundiFG doit relire ses trois phrases avant de l'allumer
Le bal masquémême raison, quatre phrases — et il attend que la garde de présence soit en place
Le Robot Crieurattend qu'un voisin ait quelque chose à lui écrire
Les ponts Discord / Matrix / WhatsApp« emménager avant d'enrichir » : après la soirée test
Le TURN pour les appels en 4Gprêt, éteint ; l'allumage est un acte serveur
La GC des fichiers supprimésencore en dry-run par défaut — un constat d'audit confirmé

C'est un choix, pas un retard : la charte dit « calme par défaut » et « jamais de faux vivant ». Un événement qu'on n'a pas relu reste éteint.


4. L'audit v2 : ce qu'il a trouvé

Une campagne d'audit en trois couches a relu le dépôt cette semaine.

  1. Une analyse préparatoire : catalogue de constats, contrats de vérification, prompt maître.
  2. Une campagne exécutée : inventaire fichier par fichier, fiches de preuve, relevés du live.
  3. Deux contre-revues : une machine (qui rejoue les constats dans le code) et une indépendante (lecteur distinct qui traite les rapports comme des hypothèses adverses), puis une re-vérification finale par un second agent.

Verdict global : aucun P0. Une trentaine de constats, dont plusieurs confirmés et corrigés en doc. Les plus intéressants :

ConstatRéalité vérifiée
STATUS citait encore alpha.9 alors que alpha.10 était en lignecorrigé
Un diff de docs reste en mode lint même avec le label ci:fullconfirmé, documenté, décision FG
La GC des fichiers est en dry-run par défautconfirmé
/demo.html est servi en production alors que le SPEC dit le contraireconfirmé
148 exports de fonctions jamais importées ailleursconfirmé, non bloquant
.agents/UI.md citait une exception périmée sur chat.mjscorrigé

Et le plus savoureux : la campagne d'audit ne passait pas son propre lint. Vingt et une erreurs — chemins de lecteur Windows dans les rapports, liens relatifs morts, un fichier .md sans saut de ligne final. Le lint maison refuse un chemin de poste dans la prose, et il avait raison : un rapport daté qui cite l'arborescence de la machine qui l'a écrit n'aide personne. La campagne a été assainie jusqu'à zéro erreur avant d'être considérée livrable.

C'est la meilleure illustration de la règle du dépôt : un contrôle qui ne s'applique pas à lui-même ne contrôle rien.


5. La qualité, close sur la machine

Neuf lots, tous fusionnés, chacun avec sa preuve :

LotCe qu'il a fermé
Q0La vérité des docs : STATUS à l'heure, plans archivés, index réparés
Q1La vie privée : compte supprimé, copies de DM chez les ponts, rétention
Q2La robustesse : connexion, minuteurs, reprise après coupure
Q3Le client et le réseau : reconnexion, premier écran, erreurs lisibles
Q4La CI : tests affectés, cache, couverture des aires
Q5L'exploitation : veille, backups, runbooks
Q6Le serveur : rangement des routes, factorisation
Q7Le client partagé : constantes du protocole, catalogue des souvenirs
Q8La documentation rationalisée
Q9L'outillage : ESLint, exports morts, observabilité

Une chose importante à dire : docs/plans/qualite.md garde encore 57 cases [ ] alors que les lots sont livrés. Ce n'est pas un mensonge, c'est un plan historique : un bandeau en tête le dit, et recocher proprement avec la ligne Preuve : de chaque tâche est un travail de docs à part entière. Il est désormais rangé comme tel.


6. Les chiffres de la sécurité et des tests

Les partis pris n'ont pas bougé :

  • Cinq dépendances runtime, pas une de plus. Tout le reste — validation de schéma, rate-limit, migrations, lint, release, Web Push (RFC 8291/8292), nettoyage EXIF, QR code, moteur du monde — est écrit à la main.
  • Tout est fermé par défaut : toute route /api exige une session, toute mutation un jeton CSRF, et une route publique doit être marquée comme telle.
  • Aucune donnée réelle dans le dépôt ; la préprod travaille sur une copie anonymisée.
  • Journaux sans contenu : ni message, ni jeton, ni cookie ; IP hachées avec un sel tournant.
  • Un blocage est indiscernable d'une absence.
  • Preuve par la mutation : pour chaque garde importante, on retire le correctif et on vérifie que le test échoue. Un test qui passe avec et sans le correctif ne prouve rien.

Les tests sont passés de 466 cas (27 septembre) à 905 cas déclarés aujourd'hui, dont 45 fichiers E2E joués à plusieurs navigateurs, un ordinateur et un téléphone côte à côte.

Et un aveu honnête : la batterie runtime complète n'a pas encore été certifiée sur Node ≥ 24 en local. La CI tourne bien en Node 24 sur chaque fusion ; la machine de FG est en Node 22. C'est noté comme un lot de reprise, pas caché.


7. Ce qui reste — côté machine

Six lots, rangés dans un plan de reprise (docs/plans/suite-2026-09-29.md) :

LotSujetBloqué par
R1Un label CI qui gagne sur un diff de docsdécision FG
R2Les 148 exports morts, en cliquet de trois PRpréférence FG
R3Recocher les fiches qualité avec leur preuverien
R4Ranger 3 branches et 15 worktrees mortsrien
R5Node ≥ 24 en local, puis runtime certifiéenvironnement
R6Les doubles A–B, en paire indépendantedisponibilité

Les trois branches distantes restantes sont des vestiges : leur contenu est déjà dans main. Le piège a été vérifié et évité — fusionner ce qui est déjà fusionné, ou pire, fusionner un préfixe plus ancien, aurait été une régression silencieuse. Elles se suppriment, elles ne se fusionnent pas.


8. Ce qui reste — et qui n'appartient qu'à FG

C'est la partie la plus importante de cet état des lieux. Un agent peut écrire du code, des tests, des migrations et des docs. Il ne peut pas décider à la place de FG :

  1. CN-04B — le label ci:full ne gagne pas sur un diff de docs. Soit on change le code de planification, soit on l'assume et on le coche. Il faut choisir.
  2. Le sort du teaser — 42 Mio de vidéo mp4 dans l'historique Git. À garder, à passer en LFS, ou à transformer en asset de release.
  3. F1 — JAH_SESSION_SECRET est exigé mais sans effet. À retirer, ou à transformer en poivre.
  4. F2 — les écarts SPEC ↔ réel, listés et prêts dans un fichier d'erratum. Aucune décision n'y a été inventée.
  5. F10 — la démo est servie en production. 404 en prod, ou erratum du SPEC.
  6. F11 — le rôle visiteur, remplacé dans les faits par les visites de la phase 8.
  7. L'allumage du Lundi, du bal, du Crieur, des ponts, du TURN — après relecture du ton.
  8. Les tags stables v4.x.0, quand « les portes sont passées ».
  9. Le recalibrage d'amitié, d'étincelles et des coûts des lieux, après un mois d'usage réel.
  10. Les portes R2 : dix habitants qui ont dit « Bonne nuit », un premier chantier inauguré, cinq quêtes IRL confirmées.

Et la porte la plus importante de toutes, celle qu'aucun agent ne franchira : la soirée test, puis le cutover du village. Il n'y a pas encore eu un seul vrai habitant sur Jah. Tout ce qui est écrit ici décrit une machine prête — pas un jeu qui a vécu.


9. Ce que Jah n'est pas encore

Pour finir sur du vrai plutôt que sur du chiffre :

  • Aucun usage réel. Pas un habitant, pas un message de famille, pas un chantier ouvert par un vrai village. Toutes les portes R2 sont ouvertes.
  • Le vrai Lulu n'existe pas. Cinq PNG attendent le dessin de FG ; en attendant, Lulu est dessiné nœud par nœud en SVG.
  • Les contenus attendent une relecture. Les 30 quêtes du cercle, les 100 questions du dimanche, les textes de didou et le ton des événements à risque — tout cela est écrit et testé, rien n'est relu par un humain.
  • La préprod jah-pre n'existe pas. Un seul hôte aujourd'hui ; le DNS était prévu, il est reporté.

Ce qui est vrai en revanche : le dépôt dit la vérité sur lui-même. Il dit ce qui est en ligne, il dit ce qui est éteint, il dit ce qui n'est pas vérifié, et il refuse de cocher une porte qu'un agent ne peut pas constater. C'est ce qui rend le reste possible.


10. Où suivre ça

  • Le site : jah.vfg.lol
  • Le guide illustré et le teaser : blog.vfg.lol/vfjah
  • Les nouveautés, écrites pour les habitants : le fichier CHANGELOG-USER.md du dépôt
  • Le récit du démarrage : l'article précédent de cette série, « Jah Messenger v4 : du brief à la prod en vingt-sept heures »

La suite se joue sur deux terrains : quelques décisions de FG, et une soirée test avec de vrais gens. Le reste est prêt.

source markdown

Concepts de cet article

gardeSkyblogworktree

Partage le plus de concepts avec