STATUS — VFJah_Messenger
_Article généré automatiquement depuis le STATUS.md de VFJah_Messenger — 2026-10-07. Les chemins locaux, les hôtes internes et les noms de variables ont été neutralisés._
STATUS
Session
06/10 ~21:46 — 4.0.28 : PREUVE DE TESTS SUR L'ARBRE DÉPLOYÉ + LINT LOCAL RÉPARÉ (hors produit). Handoff. Demande FG (« fais ce que tu peux en autonomie », puis « clôture »). Deux gestes sûrs : (1) preuve sur l'arbre exact qui tourne en prod (
08982a1) —npm test1097 tests · 1095 ✓ · 0 ✗ · 2 skip,check:prvert (lint 1444 fichiers),npm audit0 vulnérabilité (E2E et performance réservés au tag, runners off) ; (2) lint local réparé : le dossier non suivi___external/(travail externe, hors artefact déployé) faisait rougirnpm test(7max-lines) → exclusion dans.git/info/exclude(local, non versionné ;.gitignore= décision FG), lint « 1445 fichiers, rien à signaler ». Commit1c901c4, poussé (main=origin/main).TEST-12(dette A1 : un test qui lit le source) laissé en place et documenté : son remplacement propre exige le lotL09a(train 4.1.0 gelé) et un test partiel affaiblirait le contrat (interdit). Aucun code produit modifié, rien en prod. Reste FG : tagv4.0.28(image déjà dans GHCR depuis 19:50).
06/10 ~22:45 — MAQUETTES « PATCH NOTES » HIÉRARCHISÉES + LIGNÉE JAH 4.0.x ET ÉCART PROD ↔ MAIN (docs/outillage, hors produit) — clôturées. Handoff. Demande FG (« la page Patch notes est trop vieux/dégueu, le design doit aider à visualiser la hiérarchie », puis « envoie les maquettes avec URL tailscale pour mon téléphone », puis « clôture dans l'immédiat », enfin « mets à jour ton visualisateur avec la version actuelle en prod, avec différence entre code main et prod release »). Générateur jetable
data/legacy-export/_mock-v2.mjs(parsing réimplémenté à part ;generate-data-pages.mjsintact) → 3 variantes + index : A arbre à 3 rails, B frise verticale, C accordéon imbriqué ; style MSN propre (tokens produit). Hiérarchie montrée : branche (🚀 Jah 4.0.x · 🦋 legacy · 🟣 vNext) → ère (4.0, 0.3/0.2/0.1, v1.0→v1.3) → version (taille = importance) → changement (chips). Bandeau prod ↔ main : prodjah.vfg.lol= 4.0.28 (imagesha256:1def0a29…, construite sur7f1aacb, pas de tagv4.0.28) ; codemain=cd4b4d8→ 30 commits d'avance sur le déployé (dont 8 fichiers UI), deploy manuel hors CI. Mesuré : 114 versions, 933 changements, 3 branches, 9 ères (Jah 37 / legacy 70 / vNext 7) ; pages autonomes, responsive. Servies sur le tailnet viatailscale serve(https://vfgfixe.tailc06ba8.ts.net, →[hôte interne]) — 6 notifs Telegram bot didou (ingress, jeton lu dans le conteneur, transport base64 pour l'UTF-8) toutes200. Rien commité côté maquette (data/ignoré ; one-off) ; rien en prod (/readyz4.0.28 inchangé). Action FG : choisir A/B/C + décider où vit le générateur (le sortir dedata/ignoré).
06/10 ~20:15 — AUDIT NOUVEAU JOUEUR MOBILE LIVRÉ (docs), correctifs à lancer. Handoff. Demande FG (« revoir le parcours nouveau joueur… beaucoup galèrent sur mobile »). PR #379 fusionnée (
38858f5) : fiche (réservé version locale) 17 constats NJ-01…17, captures 320/360/390 + GIF, 6 maquettes. Revérifié surd7150c9: NJ-02 (liste remontée sur le monde) ne se reproduit plus depuis le hotfix menu #377 (cause latenteconversation.mjs:118gardée pour la PR B) ; NJ-01 (⚡ Wizz hors écran, 424 px) et NJ-04 (didou « Hors ligne » en test) toujours là. Prochaines PR : B Wizz + garde E2E, C carte d'invitation mobile (machine, sur « go ») ; D registre Premiers pas et E « Choisis ta tête » attendent FG (principe migration + relecture maquettes). Aucun code produit, rien en prod.
06/10 ~19:50 — IMAGE 4.0.28 PUBLIÉE DANS GHCR (dette soldée). Demande FG (« publie alors déjà »). Le
ghdu coffre (read:packages) et l'identifiant git stocké (PAT classique sanswrite:packages) →403: publication faite avec le PAT local FG (CR_PAT_GHCR, jamais affiché).docker push ghcr.io/fgdidou/jahmessenger:4.0.28+:sha-7f1aacb00a35→ même digestsha256:1def0a296e1b4e6859a27a7ab3035361014d5a55e409581eea92bc469fa381ac(= ID de l'image sondée/déployée) ; manifestes4.0.28etsha-7f1aacb00a35OK dans GHCR ;docker logoutfait. Prod intacte :/readyz4.0.28, hub running. Cycle de vie du PAT local : décision FG D9 — révocation au retour dedeploy.yml(voir cloud-pat-droits.md § « PAT local de déploiement hors CI »).
06/10 ~18:30 — 4.0.28 EN LIVE : Tableau des quêtes jour/nuit, deploy manuel hors CI (Track B). Handoff. Demande FG (« on va lancer la mise en prod 4.1.X je te laisse tout go ping moi via telegram si jamais un souci »). ⚠️ Écart mesuré : aucune 4.1 livrable,
main= 4.0.28 (lot L10 gelé). Déployé 4.0.28. Gate locale (worktreeorigin/main) : lint ✓ 1437 fichiers, import-legacy 9/9 ✓,check:pr570 tests / 568 ✓ / 0 ✗ / 2 skip, audit ✓.ops/*5/5 identiques (pas descp). Image construite sur le VPS (git archive origin/main→docker build, IDsha256:1def0a29…), sondée à l'écart (/readyz4.0.28,/ws401, CSP, uid 1000, backup, arrêtexit=0). ⚠️docker pushpermission_denied(jetonread:packages) → deploy de l'image locale sondée viadeploy-manual-4028.sh(une seule ligne retirée :docker pull) ; image non poussée GHCR (dette). Déployé :deploy-manual-4028.sh jah 4.0.28 --backup, backupjah-20261006-182024-547.db, repli armé vers 4.0.27. Live = 4.0.28 :/readyz4.0.28,/ws401,RestartCount=0, OPS-09 json-file/10m/3,jah.deployed4.0.28.docker logout,/tmppurgé,deploy.shserveur intact. Notif Telegram : ingress200 {"ok":true,"routed_to":"fg@jah"}. Pas de tag, pas de FULL (runners off → dette). Reste FG : PATwrite:packages→ push GHCR ; merger #377 → 4.0.29.
06/10 ~19:10 — 4.0.28 PRÉPARÉE, PAS EN LIVE : Tableau des quêtes jour/nuit. Branche
feat/tableau-quetes-nuit, PR #372, commit de versionc0b2927(release: v4.0.28, sans tag). Le Tableau : cartes papier le jour, fenêtre indigo la nuit sur la Place seulement. La pastille Quêtes ne compte que le village ouvert et ne mange plus « Dire » ni la poignée. Rattrapage des notes habitant : la veilleuse déjà en live reste sous 4.0.27. Maquette evolution-nav + cadrage « peau nuit fenêtres MSN » joints.check:prvert (lint 18,5 s, 1095 ✓ / 0 ✗ / 2 skip, audit ✓, 254 s). Pas de tag, pas de deploy (runners off, pas de phrase « déploie »). Prochaine action FG : fusionner la PR, taguerv4.0.28sur le commitmain, image sur le VPS,deploy.sh jah 4.0.28 --backup. Handoff.
06/10 ~19:05 — NOTIFICATIONS PUSH : activées en PROD (jah.vfg.lol) + prouvées en local. Handoff. Demande FG (« comment débloquer les notifications ? », puis « pousse en prod si tu peux déjà »). Deux verrous tombés : serveur (
JAH_PUSH_ENABLED, coupé par défaut) et appareil (permission navigateur). Local d'abord (clone prod sur 5232, aucune prod touchée) :.envcréé (gitignoré) + paire VAPID, abonnement FCM réel etPOST /api/push/test→200 {"delivered":1}(data/clone-prod/prove-push.mjs). Prod (script jetable, hors CI) : clés VAPID générées sur le serveur (jamais affichées),jah.envsauvegardé (jah.env.bak-push-20261006-190417), backupjah-20261006-170418-369.db, voile, conteneur recréé (image 4.0.27 déjà présente → pas dedocker pull). Vérifié :/readyz4.0.27,/ws401, hub healthyrestarts=0,JAH_PUSH_ENABLED=1, démarrage sans erreur de config (paire VAPID valide), repli 4.0.26 présent. Aucun code versionné modifié. Repli :bash deploy.sh jah 4.0.26. Prochaine action FG : sur son appareil, ⚙️ Réglages → « 🔔 Activer sur cet appareil » → « Essayer » (iPhone : PWA écran d'accueil d'abord).
06/10 ~19:02 — Tuto local outillé : la fiche de connexion + le bon port, en une lecture (hors produit). Handoff. Demande FG (« clôture, tuto skill à l'agent local pour ça, pour avoir l'info plus vite la prochaine fois »). Objet du « ça » : le mot de passe de
fg@jahen local, qui demandait une recherche à travers skills/handoffs/sessions. Fiche uniquedata/clone-prod/connexion.txt(gitignorée) :fg@jah / JahClone2026!. Branchée partout :.agents/skills/local-player/SKILL.md(ports 5230 ET 5232 + § « se connecter sans se tromper » + règle du!final + note clone ≠ dev) ;.agents/skills/clone-prod-local/SKILL.md(§ 3.bis fiche + deux ports) ; agents Jah Joueur Local (lire la fiche) et Jah Cloneur Prod (écrire la fiche, sonder 5230 puis 5232). Deux causes d'échec mesurées : (1) le clone tourne aussi sur 5232 (serve.mjs) — les deux ports répondaient en 4.0.27 à 19:02 ; (2)JahClone2026!a déjà perdu son!(→ 401). Preuves :/readyz5230 et 5232 = 4.0.27 ;POST /api/sessionfg@jah/JahClone2026!= 200 sur les deux ; ancien mot de passe de devlutin-…= 401. Code produit intact (§12),git diff --checkpropre. Présentation HTML (habitude du repo) :docs/presentations/2026-10-06-tuto-local-fiche-connexion.html(autonome). Pas de push (main local =726814c, devantorigin/main) ; arbre laissé tel quel, hors périmètre :ui/modules/world/net.mjsmodifié + temporaires non suivis (non committés).
06/10 ~18:40 — PRÊT À IMPORTER : export des comptes legacy msn.vfg.lol + héritage (achievements). Handoff. Demande FG (« remets msn.vfg.lol en route puis prépare l'export/import des comptes »). Constat :
msn.vfg.lolfonctionne (ancienVFJah_Messengerv0.3.71, port 5210) → rien à réveiller ; la sœurmsnplus/vnextest quasi vide → toute la matière est dans le legacy (70 comptes, 14 105 messages). Export brut (VACUUM INTO,integrity ok) + présentation HTML (comptes, stats, tri/filtres/Décision, changelogs des 2 versions) + galerie à part achievements.html. Décisions FG : carte de fusion (FG s'appelle aussi Didou) → 61 fusions (fg@jah←dontdidou@fg;lefo@jah←heu+les didou ; botdidou@jah) + 8 importés + 1 ignoré = 52 comptes, 13 859 messages, 0 collision. Code Jah (PR #371, commitbbfc6d9) :src/ops/import-legacy.mjsgagneimportHeritage— à l'import, le compte hérite badges Wizzeur / styles / emotes (Wizz rendus) + talent Farceur + clins d'œil d'amitié ; dry-run conscient. Lint ✓, tests import 9/9 ✓ (73 déblocages, 19 talents sur l'import réel). Vu de ses yeux sur le clone local :fg@jahconversation DidouLeFo avec l'historique réel (palier 🌿 Ami).mainnon touché ; PR MERGEABLE. Reste FG : fusion de #371, cutover prod (§14), cartes d'invitation, arrêt de l'ancien MSN après 1 semaine.
06/10 ~16:20 — 4.0.27 EN LIVE : idées & retours (tableau admin + salon #debug), deploy manuel hors CI. Handoff. Demande FG (« deploy en prod la nouvelle 4.0.27 en autonomie, tu as tous les droits »). PR #370 fusionnée (
main=c866221), tagv4.0.27(c86622157c29). Track B : image construite sur le VPS (git archive origin/main→docker build) idsha256:65e96080…, sondée à l'écart (/readyz4.0.27,/ws401, CSP, non-root uid 1000, backup, arrêtexit=0) ;ops/*5/5 identiques. ⚠️ Le jetonghétait sanswrite:packages(docker push→ 403) → déploiement fait depuis l'image locale sondée via une variante dedeploy.shune seule ligne retirée (docker pull) ; push GHCR rattrapé ensuite (login FG) au même digestsha256:65e96080…. Live = 4.0.27 :/readyz4.0.27,/ws401,RestartCount=0, OPS-09 json-file/10m/3,jah.deployed4.0.27, repli vers 4.0.26. Fonctionnalité vivante en prod : salon#debugid 36 (village 1), 4 retours, zone 6957, didou publie (debug_room_last:debug).deploy.shserveur intact (39360055d4eb8699),docker logout,/tmppurgé. Pas de FULL (runners off) → dette de preuve à solder au retour des runners. Prochaine action FG : poserJAH_IDEAPIT_URL=https://ideas.vfg.loldans[chemin serveur]+ redéployer pour allumer l'onglet IdeaPit.
06/10 ~16:00 — Idées & retours : tableau central admin + salon #debug ingame (PR #370, release 4.0.27 préparée). Handoff. Demande FG (« afficher tous les items #debug remontés dans un endroit central », « aller chercher ideas.vfg.lol », « visible dans le salon #debug ingame », tableau triable/filtrable). Admin : panneau
Idées et retoursen tableau (Date·Tag·Texte·De·Où·Village·Salon·État, tri, onglets, chips de tags, filtres) + onglet IdeaPit (ideas.vfg.lol, lecture seule,JAH_IDEAPIT_URL, repli si éteint) + file/api/admin/feedback+ flux/api/admin/feedback/messages+ commande didouretours. En jeu : salon#debugdu village, la pièce affiche un panneau « 🐞 Les retours » (texte entier, compteurs,🔒 privé) ; privés cachés aux joueurs non admin ; réglage admin (allumer, nom du salon, montrer les privés) ; bouton 🐞 toujours visible. Conflitmain(veilleuse) résolu surhud-buttons.mjs(onDialog+onDebug), PR MERGEABLE.check:prvert (lint 39 s, tests 193–254 s) ; releasev4.0.27préparée sans tag. Requêtes validées contre la copie prod (2 retours réels, salon#debugid 36 déjà présent, 0 migration).
06/10 ~16:10 — 4.0.25 PUIS 4.0.26 EN LIVE : admin v2 + panneau Ambiance, deploy manuel hors CI. Handoff. Demande FG (« il y a des conflits, je te laisse fusionner puis déployer d'abord 4.0.25 puis 4.0.26, avec à chaque fois ≥15 s de bandeau maintenance in-game et notif Telegram »). PR #365 rebasée et fusionnée (conflit sur
.ci/stable-tests.json, fichier généré → re-seed) :main=12d427f. Images reconstruites depuismain, sondées (/readyz4.0.26,/ws401, CSP, non-root, backup, arrêt propre) puis poussées GHCR (4.0.26sha256:379f469b…,4.0.25sha256:660b9f47…).ops/*alignés (5/5). 4.0.25 déployée (voile ~55 s, notif Telegram200 {ok:true}, backupjah-20261006-140301-107.db) ; 4.0.26 déployée (voile ~21 s, notif Telegram, backupjah-20261006-140340-427.db). Live = 4.0.26 :/readyz4.0.26,/ws401,RestartCount=0,LogConfigjson-file/10m/3.docker logout, maintenance levée ({"on":false}),/tmpVPS purgé. ⚠️ PAT GHCR passé dans le chat → à révoquer (+ PAT 4.0.24). Pas de tag ni FULL (décision FG, pause CI).
06/10 ~15:40 — 4.0.26 préparée : l’admin montre la nuit et la Boum quand on veut. Handoff. Demande FG (« je veux voir la 4.0.25 avec le changelog à jour ; édite l’admin pour changer l’heure en temps réel et activer/désactiver la Boum ; prépare la 4.0.26 »). Nouveau panneau Ambiance du monde (Admin → Rituels) : curseur 0–24 h qui règle l’heure que le monde DESSINE (ciel, nuit, fenêtres, boule à facettes) + bouton Montrer la Boum tout de suite, hors vendredi. C’est une lunette sur le décor (le réglage vit dans
app_settings, l’heure voyage dansworld.snapshot › ambiance.hour, le client la pose comme le mode démoengine.forcedHour) : lescreated_atdes messages, les sessions et la rétention gardent l’heure vraie. La Boum forcée ne contourne pas l’interrupteur du vendredi. PR #365 (branchefeat/admin-ambiance-heure-boum, worktree dédié) ; release v4.0.26 préparée sans tag (ee0fe44, portecheck:pr: 1075 ✓ / 0 ✗ / 2 skip, audit ✓). Vu de ses yeux sur le clone prod : 22 h affichée + Boum forcée (nuit, piste, enseignes). Live inchangé 4.0.24. Déploiement prod toujours bloqué §14 sur le jetonwrite:packages(push GHCR +deploy.shaprès fusion). ⚠️ PAT 4.0.24 toujours à révoquer.
06/10 ~04:12 — 4.0.25 préparée, image sondée, DÉPLOIEMENT BLOQUÉ sur le jeton (
write:packages). Handoff. Demande FG (« déploie 4.0.25 live pro avec l'admin v2, go autonomie »). L'admin v2 (5 PR #356–#361,ui/modules/admin/**,main33bb584) est surmain, pas déployée. Chaîne hors CI menée jusqu'au registre : gate localecheck:prvert (1070 ✓ / 0 ✗, audit ✓) + E2E admin 18/18 ; release 4.0.25 préparée sans tag (ea3e42d+08f7158poussés surorigin/main) ; image construite sur le VPSghcr.io/fgdidou/jahmessenger:4.0.25idsha256:660b9f4763d4et sondée (/readyz4.0.25,/ws401 via originejah-pre, CSP, non-root, backup, arrêt propre) ;ops/*empreintes serveur = local (5/5). ⚠️ Blocage §14 : ni le jetongh(read:packages) ni l'identifiant git stocké (read:user, repo, user:email, workflow) n'ontwrite:packages→docker pushpermission_denied/403, et l'image privée ne sepullpas sans registre. Live inchangé 4.0.24 (aucune écriture prod). Prochaine action FG : PAT Packages R/W (~3 min) →docker push+bash deploy.sh jah 4.0.25 --backup(image déjà construite/sondée, rien à refaire). ⚠️ PAT 4.0.24 toujours à révoquer. Piège noté :scpd'un script a perdu un caractère (jahmessenge) → vérifiersha256sumlocal↔serveur.
06/10 ~03:50 — Admin : on feuillette les cartes, une à la fois. Handoff. Quatre lots sont sur
main: coquille #356, villages #357, soirées et ponts #358, exploitation #359. Invitations, comptes et maintenance (#360) ont été fusionnés dans la branche coquille, pas dansmain: #361 les ramène. Live inchangé 4.0.24. Pas de tag, pas de déploiement (runners off). R2 non coché.
06/10 ~02:30 — 4.0.24 EN LIVE : hotfix papillon déployée à la main, vu de ses yeux. Handoff. Chaîne hors CI (runners off) : release 4.0.24 (#348 fusionnée) + #347 (trace) → image
ghcr.io/fgdidou/jahmessenger:4.0.24@sha256:445cb5ab…, construite sur le VPS (le poste n'a pas Docker), poussée GHCR (PAT FGwrite:packages), sondée à l'écart (/readyz4.0.24) puisbash deploy.sh jah 4.0.24 --backup: backupjah-20261006-001959, voile posé avant l'arrêt, hub Healthy,/readyz4.0.24, repli armé vers 4.0.23. Sonde externe :/readyz4.0.24,/ws401,RestartCount=0,LogConfigjson-file/10m/3 (OPS-09). Maintenance posée/levée en live pour la mue (chenille → cocon → papillon). Issue #343 fermée. Notif didou + Telegram envoyée (ingress,notify_telegram:true, relais VFGate confirmé). Article 4.0.24 : déployer à la main, et voir le papillon (catalogue 736). ⚠️ PAT FG à révoquer (passé par le chat).
06/10 ~01:50 — Suite du dispatch : preuve BUG-PAPILLON sur le clone, AUDIT-QG clos, worktrees qualifiés, BLOG-01/02 publiés. Handoff. BUG-PAPILLON (#344 déjà sur
main) : preuve visuelle sur le clone prod — chenille → cocon → papillon pendant un arrêt de maintenance, et bandeau « Reconnexion… » sans overlay hors maintenance ; chemin réelserver.close()→realtime.shutdown()exercé (les signaux n'aboutissent pas par TerminateProcess sous Windows → harnais local). Captures 1280×800 + 390×844 →handoffs/captures/2026-10-06/+preuve-papillon.json; issue #343 prête à fermer. AUDIT-QG : P-04 clos (0dead-export, cliquet à zéro) ; P-06 confirmé (11 lectures / 0 écriture) ; batterie unité+intégration rejouée Node 24.19 — 1068 tests, 1066 ✓, 0 ✗, 2 skip ; addendum daté dans REGISTRE + SYNTHESE. Worktrees : inventaire corrigé (lemergeddu 05/10 testait le HEAD du dépôt, toujours « oui ») → 10 worktrees à commits uniques, décision proposée (retirer 13, conservert1b+L08+racine) ; 2 worktrees non protégés sauvés par refs. Retrait = action FG (§14). BLOG-01/02 publiés : ciblé ≠ FULL + Retours — catalogue 735, flux 476, pages HTTP 200 ; RAPPORT 0/0 (divergence levée).
06/10 ~01:27 — Ordonnanceur : sync propre, BUG-PAPILLON livré (PR #344), HYGIENE fait. Handoff. V0 sync : local divergé
19/1et 17 fichiers sales →0/0propre surorigin/main(6339f4d) ; hybride (restesjah-tools+ skills) mis de côté en stash, rien d'unique perdu. BUG-PAPILLON : cause =shutdown()fermait toujoursreason:'restart'; rouge d'abord (actual 'restart' / expected 'maintenance') puis correctifsrc/realtime/realtime.mjs; porte PR verte (1068 tests, 0 échec, 2 skip env) ; PR #344 (issue #343), CI non exécutée (workflows off). HYGIENE : worktrees 48 → 17, branches 89 → 27 (63 purgées) ; L08 préservé ; pièges ignorés (.metrics,.claude, logs) sauvés dans../_hygiene-preserved-1006/;.tools(133 Mo Node portable) non copié (re-téléchargeable). Reste : fusionner #344, qualifier les 15 worktrees non fusionnés. Clôture (06/10 ~01:29) : #344 fusionnée par FG pendant la session (mergefd3111a, correctif surmain, pas encore déployé) ; #345CLEAN, en attente de fusion FG ; issue #343 à fermer après vérification ; article possible inscrit au handoff (pas de mandat).
06/10 ~01:00 — Clôture session (outillage visuel + blog + dispatch). Handoff. Résumé : plan dispatchable (#333, file 4.1.0 remise vraie) ; hub + matrices de priorités + nav partagée + instantané régénérable (#334–#338) ; D1 tranché = GitHub privé → dépôt dédié
jah-tools(#339, pointeur #340) ; article publié Le worktree était un détour. 0 PR ouverte. Prochaine action : dispatcher les P0BUG-PAPILLON∥HYGIENE.
06/10 — Outillage visuel sorti vers un dépôt dédié (
jah-tools). Décision FG D1 = GitHub privé. L'outillage d'organisation (hub, matrices de priorités, kanban des lots, « où on bute », état des vues STAB) vit désormais dans jah-tools (https://github.com/FGDidou/jah-tools, privé ; dépôt voisin) — retiré de JahMessenger par #339. Ici : pointeurdocs/plans/outillage-deplace.md+npm run tools. Écrire dansjah-toolsdésormais :npm run boards(instantané),npm run metrics,npm run stab-vues. JahStyle (design) rejoint le même espace de travail VS Code (JahMessenger.code-workspace) pour homogénéiser l'aspect.
06/10 — Outillage agents : deux séances « hors voie normale » outillées (hors produit). Ajout de deux paires skill + agent découvrables (skill
.agents/skills/<nom>/SKILL.md, agent.github/agents/<nom>.agent.md), sans aucun code produit ni dépendance (§12).clone-prod-local(+ agentJah Cloneur Prod) : monte un Jah local sur une copie jetable des données de prod (village PTR « à la main ») — mesure, copie lecture seule du backup +filesdejah-hub-1, mot de passe local, piège CRLF des migrations, démarrage surdata/clone-prod/, sonde/readyz, connexion, destruction. Prouvé en réel le 06/10 : Jah 4.0.23 local sur backupjah-20261005-215910-142.db, connexionfg@jahOK, vrais contacts/salons visibles.local-player(+ agentJah Joueur Local) : joue dans l'interface locale à la place de FG via les outils navigateur (cliquer, écrire, naviguer, capturer), local seulement, sans secret, un geste vérifié à la fois, bug = reproduction (pas correctif). Indexés dans.agents/README.md,CLAUDE.md,AGENTS.md,.cursor/rules/jah-core.mdc. PR #337 (brouillon, basemain, mode CIaffected). Lint vert (1363 fichiers). Handoff.
Plan dispatchable (05/10) :
docs/plans/plan-2026-10-05-dispatch-parallele.md— lots priorisés pour agents parallèles. Constat : 48 worktrees pour ~4 chantiers utiles ; 21 branches déjà fusionnées ; la file 4.1.0 marquaitpret7 lots déjà live (corrigés enlivrece jour). P0 =BUG-PAPILLON(overlay de maintenance, test rouge d'abord) ∥HYGIENE(recycler worktrees/branches). Gelé : train 4.1.0 (L07/L08/L09/L10) et portes humaines. PR #332 = superseded (à fermer). Un agent = un lot = un worktree réutilisé.
Consigne FG du 05/10 — ménage : quota Actions de 2000 minutes épuisé ; les dix workflows sont désactivés manuellement (état GitHub vérifié). FG effectue toutes les fusions de cette passe. L’agent prépare les lots et preuves locales, sans réactiver les workflows, lancer un run, créer un tag ou déployer. Aucun vert local ne vaut préprod runner. Nouvelle instruction FG : issues CI/CD et métriques de runs mises de côté pendant cet arrêt.
Avancement : PR #326 documentaire fusionnée par FG (06ff944) ; sauvegardes vérifiées. Reprises de releases immutables intégrées par #327 (df64a81). Archives intégrées par #329 (7c263b7). Concurrence et garde d’état reprises dans une PR locale regroupée, avec bilan du ménage. Porte locale sur la reprise finale : 602 unitaires réussis, zéro échec, deux contrôles Docker non exécutés ; lint/audit verts en 38,8 s. Restitution des 16 worktrees modifiés et 35 fichiers vérifiée. #317 fermé sur preuve existante. 33 worktrees et 31 branches retirés après preuve ; 48 worktrees conservés. Root sale et L08 inchangés ; junctions et fichiers ignorés non qualifiés conservés. Handoff de reprise. Répartition local/cloud proposée : local récupération/M3/ménage, cloud C1/C2 intégré par #330, scopes exclusifs ; compression des PR cohérentes autorisée par FG, une PR à la fois. #230/#312/#313 réconciliées et fermées ; #316 clôturée ; #318 ouverte jusqu’à fusion M3 ; #319 ouverte pour Q-I différé, Q-G cloud intégré par #330.
05/10 — Issues CI-flux / préprod en pause (#312–#315) : label
pause:ci-minutes, ferméesnot_planned(runners off). PAT cloud documenté dansdocs/plans/cloud-pat-droits.md(Issues R/W prouvé ; Actions pas encore). Attente plan agent « Bilan » pour travail parallèle hors CI.
05/10 — Outillage : skill
hotfix-hors-cidéposé (hors produit). Séance d'hotfix prod sans CI/CD documentée en skill complet (.agents/skills/hotfix-hors-ci/SKILL.md) : autorisation FG (porte §14 serveur), mesure d'état, gate locale, image sondée à la main,deploy.sh jah <v> --backup,/readyz, retour arrière. Aucun déploiement effectué à ce stade (4.0.23 déployée juste après, cf. entrée ci-dessous). Handoff. Lint vert (1352 fichiers).
05/10 ~23:43 —
hotfix-hors-ciTrack A exécutée : 4.0.23 en live (deploy manuel, runners off). Autorisation FG (« déploie à la main »). Mesures : live 4.0.22, hubjah-hub-1healthy,jah.deployed=4.0.22 (repli), image 4.0.23 absente du serveur, GHCR privé (unauthorized).compose.ymlserveur sans OPS-09 →scpdes 5 fichiersops/*(5 empreintes SHA256 serveur = locales).docker login ghcr.io(jetonghread:packages, piped) →bash deploy.sh jah 4.0.23 --backup: pull digestsha256:6a625e5f…(= manifeste), backupjah-20261005-214254-588.db, voile, hub Healthy,/readyz4.0.23, re-up→docker logout. Sonde externe :/readyz4.0.23,/ws+Origin 401, CSP conforme ;RestartCount=0, pas de boucle. OPS-09 désormais appliqué en prod (json-file/10m/3). Repli =bash deploy.sh jah 4.0.22. Handoff.
05/10 — À VÉRIFIER (mandat du relais, non tranché) : l'overlay « papillon » de maintenance ne s'affiche pas pendant une mise à jour. Constat par lecture du source (pas une mesure) : un
deploy.shpose le voile par la CLI (processus séparé, hub non notifié) puis redémarre (reason: 'restart') ; côté client,events.mjs:197ne montre l'overlay que sireason === 'maintenance', etrealtime.mjs:130metreconnecting(bandeau) pour unrestart— comportement voulu pour un arrêt propre (testé). Donc l'habitant voit « Reconnexion… », jamais chenille → cocon → papillon. Chemin complet + pistes A/B/C dans le handoff. Prochaine action : test rouge d'abord (scénario pose CLI + restart), ticketbug-prod. Ne pas livrer de correctif sans rouge reproduit.
05/10 ~23:59 — Agent
Jah Déployeur Hors-CItesté en réel ; 4.0.24 bloquée (jeton GHCR read-only). Agent créé (.github/agents/jah-deployeur-hors-ci.agent.md). Test : aller-retour 4.0.23 → 4.0.22 → 4.0.23 vert surjah.vfg.lol(retour arrière prouvé, EXIT=0 chaque étape) ; garde fail-closed prouvée (deploy.sh jah 4.0.24→unauthorized, EXIT=1, prod intacte). 4.0.24 non déployée : elle n'existe pas — pas de bump, pas de tag, pas d'image. Et publier une nouvelle image est impossible : le jetonghn'a queread:packages(sondedocker push→permission_denied). Un vrai test 4.0.24 exigewrite:packages(décision FG, §14) + un contenu de version. Live inchangé 4.0.23. Article publié (blog vfjah, catalogue 730, dérive 0/0). Ping Telegram : non envoyé — aucun jeton dans la session (TELEGRAM_NOTIFY_*absent, VFGate 401, FG_Pulse 4330 éteint) → repli fichier_ssot/monitoring-events.jsonl(rattrapable). Handoff.
| Porte machine | Live 4.0.28 (06/10, deploy manuel hors CI Track B) : Tableau des quêtes suit la nuit + héritage import legacy. /readyz 4.0.28 ; image ghcr.io/fgdidou/jahmessenger:4.0.28 @ sha256:1def0a29… (publiée GHCR 06/10 ~19:50, aussi sha-7f1aacb00a35). Précédentes : 4.0.27 @ sha256:65e96080…, 4.0.26 @ 379f469b…. Repli deploy.sh jah 4.0.27. OPS-09 appliqué (json-file / 10m / 3). Campagne STAB 13/13 en 4.0.22. TodoStatut : BLOG-01/02 publiés ; issue #343 fermée. #246 reste ouverte pour OPS-02. Pas de FULL (runners off) → seule la dette de preuve reste. Action FG : JAH_IDEAPIT_URL (§14) ; merger #377 → 4.0.29 ; révoquer le PAT local au retour de deploy.yml (D9). |
| Porte V2 | Post-STAB autonome terminé : quatre PR #322–#325 fusionnées ; tag v4.0.23 sur main, FULL 1332/1332, zéro skip, image préprod publiée sous hold. Preuve, run. Aucun deploy CI ; promue en live par deploy manuel (05/10) ; live 4.0.23. OPS-09 vérifié runner puis appliqué en prod. |
| Live | 4.0.28 (06/10 : Tableau des quêtes jour/nuit, deploy manuel hors CI) — /readyz 4.0.28. Précédents : 4.0.27, 4.0.26, 4.0.25, 4.0.24, 4.0.23, 4.0.22. Web Push ALLUMÉ en prod (06/10, clés VAPID générées sur le serveur ; repli jah.env.bak-push-20261006-190417). |
| File machine (agents) | STAB prod 13/13 tous livre en live (00–10). Vague 5 file 4.1.0 : OPS-09 livre (deploy manuel 05/10) ; 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 restent off jusqu’à phrase « allume X » (pas de sollicitation) — push désormais ALLUMÉ (06/10) ; Boum allumée (0021) ; F1–F11 / Q9-05 / Q10 |
05/10 — Campagne STAB 13/13 en live 4.0.22. STAB-10 métriques (#305) : modes CI, coût des relances, lots campagne ; viewer docs/metrics/etat.html ; fix main rouge tags (fetch-tags). FULL eb6592e vert → release v4.0.22 (preuve parent FULL) → deploy 37266429140. /readyz 4.0.22. REGISTRE anomalies STAB → ferme. Relais : handoffs/2026-10-05-0510-cloture-stab10-live-4022.md.
05/10 — Audit + captures clôture (Cursor Cloud). Instantané stab-vues 4.0.22 / 13/13, métriques strict, kanban, PNG sous handoffs/captures/2026-10-05/. Audit global qualité / exécution / agentique : [chemin local] (réservé version locale). Handoff : handoffs/2026-10-05-0720-audit-cloture-campagne-stab.md. Blog public /jah-stab-vues encore à republier (hors porte).
05/10 — STAB-09 en live 4.0.21. Mesure d'abord (HUD 250 ms travaillant onglet caché) → correctif (#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) — fait en 4.0.22.
05/10 — PR-B en live 4.0.20 (handoff interrompu). #287 fusionnée ; FULL vert 74be1aa ; release --ci-verified ; deploy Release 37254532148 success ; /readyz 4.0.20. Leçon agents #291. Relais : handoffs/2026-10-05-0215-prb-release-interrompu.md.
05/10 — Chantier CI flux (hors porte STAB). Plan SSOT docs/plans/ci-flux-preprod-light.md (lots 1–8) — lot 0 livré : #301 fusionnée (fbf85ae). Clôture session handoffs/2026-10-05-0652-cloture-session-ci-flux-preprod-light.md. Relais remplacé par V2 : aucune collecte de stabilité ni skip dans FULL ; voir le plan de récupération et ménage du 05/10.
05/10 — TodoStatut blog a-publier. Articles prêts dans Jah (branche cursor/article-cible-ne-vaut-pas-full-da50) : méthode ciblé ≠ FULL + produit Retours ; brouillon CI flux 2026-10-05-jah-ci-flux-preprod-light.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 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.
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 (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.
Qualité : Q0 #69, Q1 #72, Q2 #73, Q3 #70, Q4 #71, Q5 #74, Q6 via #78 (#77 fermée), Q7 #78, Q8 #75, Q9 #76, J6-05 #80, lint Q5 #81.
Qualité : Q0 #69, Q1 #72, Q2 #73, Q3 #70, Q4 #71, Q5 #74, Q6 via #78 (#77 fermée), Q7 #78, Q8 #75, Q9 #76, J6-05 #80, lint Q5 #81.
Session post-STAB V2 — autonome, production retenue
Instruction FG : plan V2. V2 clôturée : #322–#325 fusionnées, tag v4.0.23, FULL et image verts au premier essai ; prod retenue en 4.0.22 à la clôture V2, promue ensuite en live par deploy manuel (4.0.23 le 05/10, 4.0.24 le 06/10 — bandeau Session, handoff 0230). Live actuel = 4.0.24. V1 archivée ; aucune porte humaine ajoutée.
| Lot | Besoin | Représentation | Contrainte | Action | Preuve | Récompense |
|---|---|---|---|---|---|---|
| A (Vérifié préprod) | PR moins coûteuses | Plan CI/jobs | FULL tag main ; hold | Adapter outils/règles | Contrats rouges puis verts + runner | Fusion courte fiable |
| B (Vérifié préprod) | Logs bornés | Compose hub | Aucun serveur modifié | Rotation 10m × 3 | Résolu + inspect runtime | Stockage borné après promotion |
| C (Prouvé) | Parcours démontré | Tag/SHA/digest/runs | Même artefact ; live 4.0.22 à la clôture V2 | Préparer, fusionner, taguer | FULL + image préprod + manifeste | Preuve récupérable sans FG |
Périmètre A : scripts check/ci-plan/release/tag-proof, workflows CI/release/image/promotion/deploy, tests de contrat et règles associées. Aucun code produit ni nouvelle dépendance. A : #323 fusionnée, run 37284420072 court + préprod verts, FULL skipped. Périmètre B : ops/compose.yml, preuve avant/après, notes et relais ; aucun serveur modifié. Critère B : logging résolu et effectivement appliqué à json-file / 10m / 3 sur runner. #246 reste ouverte jusqu’à production.
Live
https://jah.vfg.lol/readyz = 4.0.28 (06/10 : Tableau des quêtes suit la nuit, deploy manuel hors CI Track B — handoff). Image ghcr.io/fgdidou/jahmessenger:4.0.28 @ sha256:1def0a296e1b4e6859a27a7ab3035361014d5a55e409581eea92bc469fa381ac (publiée GHCR 06/10 ~19:50 ; aussi sha-7f1aacb00a35 = même digest). Repli deploy.sh jah 4.0.27. OPS-09 (json-file / 10m / 3). Précédents : 4.0.27, 4.0.26, 4.0.25, 4.0.24. 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 : 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/.
- Secrets serveur /
DEPLOY_*: posé (27/09). Ponts : README › Brancher les ponts. - DNS
jah: fait.jah-prereporté. - Coturn / STUN : prêt éteint — README › Allumer le TURN (S10).
- Relire banques (quêtes, questions, Lundi, Crieur, bal) et allumer ou non.
- Dessin Lulu (5 PNG) ; recalibrage après un mois (S15-03).
- Tags stables v4.x.0 (S15-04) ; S16 sur ordre.
- Copie backups hors serveur (hebdo) ;
restore-checkmensuel. - Veille prod : configurée (#64), workflow désactivé avec les autres sur consigne FG du 05/10.
- Boum : allumée (0021) ; éteindre via Admin si besoin.
- 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 modifierci-plan.mjs. - Exports morts (W3) : les 148 avertissements du 29/09 sont une mesure historique. Lint du 05/10 : 1351 fichiers vérifiés, aucun constat ; ne pas reprendre ce compteur comme dette active.
- Node 24 : poste vérifié en 24.19.0 le 05/10 ; cloud C1/C2 en 24.21.0.
- 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) ; F3docs/runbooks/vs README long ; F5typescripten dev (Q9-05) ; F6 qui fusionne ; F7 six maillons hors STATUS ; F8–F11 (Q10) : villages client, retirer message, démo prod, rôlevisiteur. - Contenus : FG relit au fur et à mesure ; un mode interne de validation des textes proposés est à prévoir (à cadrer — nouvelle fonctionnalité, donc Q10).
- CN-04B : on accepte — un diff de docs reste en mode
- 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.24 (06/10 ; correctif BUG-PAPILLON, deploy manuel hors CI — handoff). 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). 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 (relais 0706) — JahStyle ; porte humaine : vote DA V5 étape 3 (ouverte).
File prioritaire : STAB reprise 05/10 ; 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 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 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), S12-02 non reproduit.
05/10 — Clôture V2 : handoff. SHA edf06586c622dc10fedfb388c7f8134ecb7e3c0c ; digest sha256:6a625e5fb4e3d47de82b4e54320f377b6650e1bc7bf1c57459874db179feebf2. Compose résolu et Docker effectif : json-file / 10m / 3. Publication de preuve en prerelease ; production non déployée, aucune action FG requise pour la V2.
05/10 — Récupération et ménage autorisés, en cours. Plan, inventaire sauvegardé (réservé version locale). Production retenue ; aucun nouveau tag.