---
title: "STATUS — VFJah_Messenger — 2026-10-05"
date: 2026-10-05
time: "03:22"
author: agent
publishedBy: code
status: pub
tags: ["status", "vfjah"]
---

# STATUS — VFJah_Messenger

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

# STATUS

## Session

| | |
| --- | --- |
| **Porte machine** | Live **4.0.21** (05/10) : **STAB-09 batterie** ([#298](https://github.com/FGDidou/JahMessenger/pull/298)) — le HUD ne travaille plus onglet caché ; lint `main` restauré en passant. Tag [`v4.0.21`](https://github.com/FGDidou/JahMessenger/releases/tag/v4.0.21). `/readyz` **4.0.21**. Suite produit : **10** (métriques) — confiée au cloud (relais [handoffs/2026-10-05-0430-relais-cloud-stab10.md](handoffs/2026-10-05-0430-relais-cloud-stab10.md)). **TodoStatut** : publier blog BLOG-01/02 (`a-publier`). Hors STAB : **OPS-09** (#246). |
| **Live** | `v4.0.21` (05/10 : batterie — le monde et l'interface reposent onglet caché) ; GH [v4.0.21](https://github.com/FGDidou/JahMessenger/releases/tag/v4.0.21) — `/readyz` **4.0.21**. Précédents : 4.0.20, 4.0.19, 4.0.18. |
| **File machine (agents)** | STAB prod **12/13** (00–09 en live, dont 07A/B/C en 4.0.20). Reste : **10** (métriques, outillage — cloud, PR distincte). Vague 5 file 4.1.0 : **OPS-09** `pret` ; L08 `wip-local` (ne pas toucher). |
| **Hors live** | L08 (`JahMessenger-L08`) ; stash AUDIT. PRs dormantes fermées : #262, #264, #278. **Canal Telegram agent→FG à réparer** (jetons locaux 401 ; §14). |
| **Pont ops** | Gate appliqué ; #172 en `main` ; preuve DM Telegram→Jah = Lot 2 (auto) ; **rotator token reporté** (rappel ci-dessous, non bloquant) — `docs/plans/fond-2026-10-01.md` |
| **Humain dormant** (pas de ping ; agent gère rappels) | **Rappel rotator** bot (ordre FG 01/10 : FG un jour) ; **rappel vote DA V5** avatars A/B/C (gelé) ; œil 4.0.8 ; R2 / soirée / cutover ; allumages Lundi/Bal/Crieur/push **restent off** jusqu’à phrase « allume X » (pas de sollicitation) ; Boum allumée (0021) ; F1–F11 / Q9-05 / Q10 |

**05/10 — STAB-09 en live 4.0.21.** Mesure d'abord (HUD 250 ms travaillant onglet caché) → correctif ([#298](https://github.com/FGDidou/JahMessenger/pull/298)) → FULL `e7456e8` vert → release `--ci-verified`. Deux rouges préexistants qualifiés au passage (`stab-vues` environnement-dépendant, `.catch` d'un test d'appels). Live **4.0.21**. Suite : STAB-10 (cloud).

**05/10 — PR-B en live 4.0.20 (handoff `interrompu`).** [#287](https://github.com/FGDidou/JahMessenger/pull/287) fusionnée ; FULL vert `74be1aa` ; release `--ci-verified` ; deploy Release [37254532148](https://github.com/FGDidou/JahMessenger/actions/runs/37254532148) **success** ; `/readyz` **4.0.20**. Leçon agents [#291](https://github.com/FGDidou/JahMessenger/pull/291). Relais : [handoffs/2026-10-05-0215-prb-release-interrompu.md](handoffs/2026-10-05-0215-prb-release-interrompu.md).

**05/10 — TodoStatut blog `a-publier`.** Articles prêts dans Jah (branche `cursor/article-cible-ne-vaut-pas-full-da50`) : méthode [ciblé ≠ FULL](docs/articles/2026-10-05-jah-cible-ne-vaut-pas-full.md) + produit [Retours](docs/articles/2026-10-05-suivre-tes-retours.md). Prochaine passe : `node scripts/post.mjs … --live` depuis RAPPORT (sans push auto).

**05/10 ~03:40 — clôture session (outillage visu + lecture).** Hors porte machine, aucun code produit. Page publique [blog.vfg.lol/jah-stab-vues](https://blog.vfg.lol/jah-stab-vues) scindée en **état live** (régénérable, `npm run stab-vues`) + **instantané 04/10 conservé** (vues 1–8). `scripts/stab-vues.mjs` + 6 tests verts. Dépôt local resynchronisé : `main` était divergé (ahead 1 périmé / behind 34) → réaligné sur `origin/main` `19a7287`, sauvegarde sur `backup/main-99d3b6a-2026-10-05` ; remote fantôme `cloud-agent-notes` purgé. **Inventaire du travail laissé en worktree** : 74 worktrees, **24 avec du travail**, **14 avec commits non fusionnés**, 10 branches au remote supprimé — audit rejouable [chemin local]. Aucun nettoyage fait (§14). Relais : [handoffs/2026-10-05-0340-cloture-stab-vues-inventaire.md](handoffs/2026-10-05-0340-cloture-stab-vues-inventaire.md).

**05/10 ~20:30 — PÉRIMÈTRE OUTILLAGE VISUEL (hors produit), clôture WIP.** À lire comme une **zone à part du dev produit Jah** : ce lot ne touche que les **vues d'avancement**. Générateurs : `npm run stab-vues` (état live + compteurs CI + **instantané daté 05/10** : tags réels × lots par version) et `npm run chantier-lots` (kanban depuis les files). Blog à jour : `/jah-stab-vues` (instant 05/10, 04/10 archivé), `/jah-lots`, hub + **carte de l'outillage** `/prototypes/apercus/2026-10-05-cartographie-outillage-visuel.html`. Constat : **3 « chantier des lots »** dont 2 manuels jamais mis à jour → un **dépôt parallèle dédié** est la réponse. **PR [#304](https://github.com/FGDidou/JahMessenger/pull/304)** (instantané + carte, diff additif). **Prochain handoff : créer le repo parallèle dédié à ces outils** et y déplacer `scripts/{stab-vues,chantier-lots,metrics*}` + pages + tests ; JahMessenger ne garde qu'un pointeur. Relais : [handoffs/2026-10-05-2030-cloture-wip-outillage-visuel.md](handoffs/2026-10-05-2030-cloture-wip-outillage-visuel.md).

**Qualité** : Q0 [#69](https://github.com/FGDidou/JahMessenger/pull/69), Q1 [#72](https://github.com/FGDidou/JahMessenger/pull/72), Q2 [#73](https://github.com/FGDidou/JahMessenger/pull/73), Q3 [#70](https://github.com/FGDidou/JahMessenger/pull/70), Q4 [#71](https://github.com/FGDidou/JahMessenger/pull/71), Q5 [#74](https://github.com/FGDidou/JahMessenger/pull/74), Q6 via [#78](https://github.com/FGDidou/JahMessenger/pull/78) (#77 fermée), Q7 [#78](https://github.com/FGDidou/JahMessenger/pull/78), Q8 [#75](https://github.com/FGDidou/JahMessenger/pull/75), Q9 [#76](https://github.com/FGDidou/JahMessenger/pull/76), J6-05 [#80](https://github.com/FGDidou/JahMessenger/pull/80), lint Q5 [#81](https://github.com/FGDidou/JahMessenger/pull/81).

## Live

`https://jah.vfg.lol/readyz` = **`4.0.21`** (sonde du 05/10 après release). Précédents : 4.0.20, 4.0.19, 4.0.18. Histoire : `CHANGELOG.md`, `CHANGELOG-USER.md`, `docs/plans/archive/2026-09/`.

## Portes ouvertes

| Porte | État |
| --- | --- |
| Machine (produit) | Néant : S0–S19 machine en prod (S11 inclus). Restent S15-03/04 et S16 sur ordre FG |
| R2 phases 4–6 | Humain, après usage réel (compteurs Admin → Portes R2) |
| Soirée test / cutover | Humain (README) |
| Qualité | Q0–Q9 machine fusionnés ; Q9-05 / Q10 / F1–F11 hors scope |

## Mécaniques du §10 (six maillons)

Tous les maillons ci-dessous sont **Livré** sauf mention. Aucun « Concept ». F7 (déplacer hors STATUS) : décision FG.

| Mécanique | Besoin | Représentation | Contrainte | Action | Preuve | Récompense |
| --- | --- | --- | --- | --- | --- | --- |
| Wizz / duel (§10.2) | Signe à distance | Fenêtre, ⚡, combo | Secousse ; silence heures calmes | Rendre en 2 min | Serveur marque rendu | DUEL ; styles/badges |
| Accueil Wizz (Ann. B) | Se sentir attendu | didou + Wizz | Un geste montré | Rendre à didou | Une fois / compte | Souvenir + toast |
| Fou rire (§10.3) | Rire ensemble | Puces + badge | 3 rieurs / 10 min | Réagir 😂 | Compte distinct | Pluie + souvenir |
| GIFothèque (§10.3) | Blagues du cercle | Onglet ♥ | Village seulement | Partager / garder | Accès voisin | Fans |
| Amitié (§10.1) | Lien sans compter | Pousse / jardin | Réciprocité, plafond | Se répondre | Serveur, plafonds | Palier + Lulu |
| Styles Wizz (§10.2) | Jouer, pas harceler | Menu ▾ / badges | Déblocage rendu | Rendre | Styles refusés sinon | Emotes |
| Clins d'œil / Lulu (§10.4) | Geste sans écrire | Anim 2–3 s | Paliers | Envoyer | Serveur | Lulu à deux |
| Monde (§10.7) | Se retrouver | Place, maisons | Village honnête | Marcher, bulle | Autorité serveur | Croiser les siens |
| Ondes / fils / jardin | Vie sans spy | Onde, fil, plante | Double accord | Écrire / montrer fil | Trames inspectées | Fil / jardin |
| Gestes sync | Tope-là | Invite + étincelles | 2 cases, 2 s | Tope-là, câlin, danse | Distance + fenêtre | Amitié |
| Bonne nuit / papillon | Partir sans frein | 🌙, chenille | Résumé, pas reproche | Bonne nuit | Session close | Papillon |
| Quêtes IRL (§10.11) | S'entraider IRL | Tableau | Pas de push | Confirmer croisé | Membres seuls | Objet + étincelles |
| Rituels (§10.6) | RDV sans pression | Kiosque, carte | Caché jusqu'à l'heure | Répondre / signer | Horloge simulée | Révélation |
| Rassemblement | Trace collective | Cercle 📸 | ≥3, 60 s | Entrer le cercle | Serveur compte | Photo + cadre |
| Le Lundi | Sourire lundi | Nuage | Dissipe au 10ᵉ moment | Vivre ; ranger | Horloge | **Éteint** (admin) |
| Boîte à idées | Enrichir banques | `#quete`… | 10/j ; FG range | Écrire à didou | Étiquette + auteur | Merci privé |
| Robot Crieur | Nouvelles voisines | Tricorne / `#gazette` | Source + 280 car. | Lire / taire | Sources FG | **Éteint** (admin) |
| Talents (§10.12) | Reconnu sans score | 🌟 / ailes | Réciprocité | Vivre moments | `talent_log` | Titre + S12 |
| Étincelles / chantiers | But commun | Terrains | Pas de solde perso | Moments + vote | Trace moment | Lieu ouvert |
| Objets-souvenirs | Garder moments | Chambre | Visiteur = membre | Poser / offrir | Serveur | Cadeau = moment |
| Activités (§10.5) | Rire à deux | Menu / Arcade | Bornes grisées | Inviter / jouer | Tours vérifiés | Carte-souvenir |
| Perles / capsules / fantômes | Histoire | Musée, coffres | Accord / date / seul | Proposer / sceller | Muet avant | Cérémonie |
| Bal masqué (ph. 8) | Devinettes | Masques 30 min | ≥3 ; 1/j | Ouvrir / deviner | Garde hub | **Éteint** (admin) |
| Jam Scène | Musique à plusieurs | Micro + notes | Silence 20 s → repos | Jouer | Débit / blocage | Partition |
| Boum vendredi | Soirée récurrente | Disco 21–23 h | Allumée 0021 | Danser / ranger | Heure + village | **Allumée** |
| Lac | Moment d'il y a 1 an | Ponton | À deux | Pêcher | Tiers exclus | Carte |
| Cinéma | Album ensemble | Écran | Projectionniste | `cinema.slide` | Schéma + fuzzing | Rire |
| Serre | Amitiés anciennes | Fleurs | À soi ; ≥1 an | Visiter | Tiers exclus | Fleurs |

Appels (§11 ph. 7) : six maillons **Livré** (besoin → récompense) — voir CHANGELOG ph. 7.

## Critères d'acceptation finaux (SPEC §15)

| # | Critère (résumé) | Machine | FG |
| --- | --- | --- | --- |
| 1 | Deux téléphones + PC : invitation → appels, push, PWA | E2E phases 1–7 ; live alpha.13 | Soirée réelle |
| 2 | Monde honnête (bulles, ondes, fils, village endormi) | `monde*.test`, E2E ph. 4 | Feeling village vide |
| 3 | Village : étincelles, chantier, objets | `village.test`, E2E ph. 5 | Premier chantier R2 |
| 4 | Quête IRL confirmée croisée | `quetes.test`, E2E ph. 6 | 5 quêtes R2 |
| 5 | Import legacy + « Il y a un an » | `import` / bascule (tests) | Cutover données réelles |
| 6 | Bonne nuit ; pas de push jeu | intégration + E2E | Compteur R2 Bonne nuit |
| 7 | Redémarrage sans perte / vague toasts | ops / backup / E2E | Constat live |
| 8 | Checklist §8 + `npm audit` sans haute | CI FULL | — |
| 9 | Charte §2 couverte | table §2 ci-dessous + tests | — |
| 10 | Tags v4.x.0 GHCR réversibles | release → GHCR | Tags stables S15-04 |
| 11 | Look MSN + monde (captures) | artefacts PR | Œil produit |

## Charte de jeu (§2)

| Règle | Où c'est tenu |
| --- | --- |
| 1 Réciprocité | Wizz rendus ; amitié = réponses ; styles au rendu |
| 2 Rien ne se perd | Scores / paliers / déblocages ne baissent pas ; plante s'endort |
| 3 Pas de classement | Aucun score affiché ; palier privé au fil |
| 4 Pas de pression lecture | `chat.read` → ses appareils seulement |
| 5 Consentement à deux | GIF / fil : double accord |
| 6 Calme par défaut | Heures calmes ; Occupé coupe le son Wizz |
| 7 Tous les âges | Grand confort partout (monde compris) |
| 8 Toujours une sortie | Jeux rangeables ; messagerie reste |
| 9 Pull par défaut | Push seulement DM / Wizz / @ / appel adressés |
| 10 Session terminable | Bonne nuit ; assoupissement 30 min |
| 11 Jamais de faux vivant | Hors ligne = hors ligne ; démo assumée |
| 12 Loot plutôt que karma | Pas de monnaie ; étincelles collectives |
| Préambule | Toast MDP hérité non bloquant ; Nouveautés à la demande |

## Couverture checklist §8

| Point | État |
| --- | --- |
| 1–7 | Livré (XSS/CSP/sessions/CSRF/mdp/invitations/autorisations) — tests + E2E |
| 2 CSP | Écart validé : `trusted-types jah-sw` (pas `'none'`) |
| 8 Entrées | Plafonds ph. 1–6 ; rituel **280** (pas 500 du SPEC) |
| 9–12 | Fichiers, GIF sans SSRF, fuzzing, fermé par défaut |
| 13 Vie privée | Logs sans contenu ; export/suppression ; Q1 [#72](https://github.com/FGDidou/JahMessenger/pull/72) : file ponts, rétention, pouls/capsules vs bloqués ; GC fichiers **réel** depuis 4.0.6 (DQ11 levé, #183) |
| 14–20 | Backups, CI/préprod, autorité monde, frontières, blocage monde, preuves quête, bulles |

## Actions humaines requises (FG)

Détail des préparations machine : `docs/plans/suite.md` §5 et fiches S15/S16 (actives) ; closes en `archive/2026-09/`.

1. Secrets serveur / `DEPLOY_*` : **posé** (27/09). Ponts : README › Brancher les ponts.
2. DNS `jah` : **fait**. `jah-pre` reporté.
3. Coturn / STUN : prêt éteint — README › Allumer le TURN (S10).
4. Relire banques (quêtes, questions, Lundi, Crieur, bal) et allumer ou non.
5. Dessin Lulu (5 PNG) ; recalibrage après un mois (S15-03).
6. Tags stables v4.x.0 (S15-04) ; S16 sur ordre.
7. Copie backups hors serveur (hebdo) ; `restore-check` mensuel.
8. Veille prod : active (#64) ; désactiver le workflow si besoin.
9. Boum : **allumée** (0021) ; éteindre via Admin si besoin.
10. **Qualité (§5 `qualite.md`)** — décisions FG du **29/09** :
    - **CN-04B** : *on accepte* — un diff de docs reste en mode `lint` ; le job « Lint seul »
      couvre déjà les liens et les chemins cités. Ne pas modifier `ci-plan.mjs`.
    - **Exports morts (W3)** : *on nettoie* les exports morts et inutilisés. Le cliquet (R2) est
      donc **ouvert** — il reste 148 avertissements `dead-export` au 29/09.
    - **Node 24** : *accord donné* (R5) — le poste ne certifie pas le runtime tant qu'il reste
      en Node 22.
    - **Teaser** : *on le garde* (`docs/teaser/`, hors image Docker).
    - **R4** (branches/worktrees morts) : **fait** le 29/09.
    - F1 `[variable d'environnement]` ; F2 erratum SPEC (`docs/plans/qualite-spec-erratum.md`) ;
    F3 `docs/runbooks/` vs README long ; F5 `typescript` en dev (Q9-05) ;
    F6 qui fusionne ; F7 six maillons hors STATUS ;
    F8–F11 (Q10) : villages client, retirer message, démo prod, rôle `visiteur`.
    - **Contenus** : FG relit au fur et à mesure ; un **mode interne de validation des textes**
      proposés est à prévoir (à cadrer — nouvelle fonctionnalité, donc Q10).
11. Q9-05 / Q10 / §7 : listés dans `qualite.md` — **pas démarrés** ici. Ce qui reste côté machine
    (R2 sur décision « on nettoie », R3 et R4 faits, R5 sur accord Node 24, R6, doubles) :
    `docs/plans/archive/2026-09-30/suite-2026-09-29.md` (R1–R6, archivé) ; version sans jargon : `archive/2026-09-30/reprendre-en-simple.md`.

## Liste de mise en service (`jah.vfg.lol`)

Un seul hôte (décision FG 26/09). Caddy → loopback `:5240`. Live = **v4.0.19** (05/10 ; release [v4.0.19](https://github.com/FGDidou/JahMessenger/releases/tag/v4.0.19)). Cutover : README › Cutover. Soirée test : README › Soirée test.

## Plans

Relais produit 04/10 (STAB live 4.0.18) : `handoffs/2026-10-04-2315-cloture-session-jah-stab.md`. Relais outillage visu : `handoffs/2026-10-04-2316-cloture-outil-visu-avancement.md`. Pack agentique : `handoffs/2026-10-04-2108-pack-agentique-local.md`.
Relais du 03/10 : `handoffs/2026-10-03-1805-cloture-v4.0.16-tipis.md` (tipis en 4.0.16 ; article [Place en tipis](https://blog.vfg.lol/devblog/posts/vfjah/2026-10-03-la-place-en-tipis.md)). File 4.1.0 : `docs/plans/plan-2026-10-03-suite.md` ; état : `docs/plans/lots/file-4.1.0.json` (vague 5 : OPS-09). File STAB : `docs/plans/lots/file-stabilisation-4.0.x.json` (alignée live 4.0.18 à la reprise 05/10).
V5 / JahStyle : clôture integrate [`handoff-2026-10-01-2326-cloture-kimi-v5.md`](docs/plans/handoff-2026-10-01-2326-cloture-kimi-v5.md) (relais [`0706`](docs/plans/handoff-2026-10-01-0706-kimi-v5-relais.md)) — [JahStyle](https://github.com/FGDidou/JahStyle) ; porte humaine : **vote DA V5 étape 3** (ouverte).
File prioritaire : [STAB reprise 05/10](docs/plans/plan-2026-10-05-stab-prioritaire.md) ; train 4.1.0 reporté pendant stabilisation : `docs/plans/plan-2026-10-03-suite.md` (état : `docs/plans/lots/file-4.1.0.json`) ; `fond-2026-10-01.md` ne garde que la vague C (VFGate). Périmés le 01/10 : `docs/plans/archive/2026-10-01/fond-2026-09-30.md`, `docs/plans/hotfix-2026-09-30.md`.
Méthode : `docs/plans/discipline-livraison.md`. Relais ponts : `docs/plans/handoff-2026-10-01-ponts-identifiants.md` (H1).
Actifs : `docs/plans/lots/`, `docs/plans/README.md`, `suite.md`, `suite-S15.md`, `suite-S16.md`, `qualite.md`, `ci-tests.md`. Closes : `docs/plans/archive/2026-09/`, `archive/2026-09-30/`, `archive/2026-10-01/`.

Méga-dossier des audits, revues et rapports : [chemin local] (index _(réservé version locale)_). Campagne audit v2 (docs, SHA `408d8e8`) : [chemin local] — [PR #85](https://github.com/FGDidou/JahMessenger/pull/85) **fusionnée** ; re-vérification livrée : `contre-revue/RAPPORT-REVERIFY.md`. Cadres #84 (analyse) et #82 (revue croisée V) **fusionnés** ; teaser vidéo [PR #79](https://github.com/FGDidou/JahMessenger/pull/79) **fusionnée** (`scripts/teaser/`, hors image). Restent ouverts côté FG : N-01 CN-04B (`ci:full` vs diff docs) et runtime Node ≥24. Note CI : deux flakes E2E sous charge (S12-02, R7-07) — R7-07 corrigé ([#87](https://github.com/FGDidou/JahMessenger/pull/87)), S12-02 non reproduit.