blog.vfg.lol

STATUS — Chronowflow — 2026-10-08

STATUS — Chronowflow

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

Fil (Chronowflow) — STATUS

POC GitHub JahMessenger — 30 septembre 2026

Worktree : [chemin local] · branche poc/github-jahmessenger.
Plan : PLAN-POC-GITHUB-JAH-2026-09-30.md · handoff L0→L6.

Lots L0→L6 livrés dans le worktree (adaptateur GitHub, capture, Carte digression, chaleur, stub Hero). Source github → live après preuve FGDidou/JahMessenger (35 événements REST, token gh en session, sans secret logué). Preuves exécutées ce jour (worktree) : npm test 358/358 PASS (lot initial) · tests ciblés sources/monitor 19/19 PASS (post-live) · tsc 0 · eslint 0 · npm run build PASS (+ /api/github, /api/hero). Branche poussée poc/github-jahmessenger · tag POC annoté (voir handoff).

Statut : On y reviendra — POC commit 736a968, tag poc, branche poussée ; merge vers main demandé (voir handoff). Worktree conservé.

Prochaine action FG : reprendre depuis tag poc ou branche poc/github-jahmessenger ; recette UI plan §5 ; redémarrer Fil :4477 si besoin après main à jour.

Dette résiduelle — close (17 septembre 2026)

Plan : dette résiduelle agents légers — §5 tous lots clos / worktrees nettoyés. Clôture : handoff orchestration. Vague 3 : handoff.

Dette résiduelle close côté orchestration : lots E1–E7 intégrés ; registre worktree = seul Chronowflow ; handoffs cleanup e2…e6b sur main. Branches dette/* et presentable/* orphelines (-d refusé, pas de -D). Dossiers disque résiduels possibles. Aucun push. npm test non rejoué à la clôture.

Prochaine action FG : trancher -D sur orphelines et/ou supprimer dossiers Chronowflow-e* ; sinon usage courant.

La section « À traiter » plus bas est historique (15 septembre) : le tableau §3 du plan fait foi.

Finalisation personnelle — 16 septembre 2026

Plan courant : trois lots essentiels. Suivi : handoff d'intégration. Le plan initial est archivé pour réflexion. Usage personnel, version maintenue à 0.4.0, aucun push ni publication dans ce lot.

Le LAN existant est intégré. Base remesurée : 309 tests PASS. Une installation propre a révélé un verrouillage cn incohérent : corrigé, puis npm ci réussi dans le worktree de validation. Les preuves finales des trois lots sont consignées dans le handoff, sans confondre fixtures navigateur, lecture Git réelle et transport de présence VFG.

Preuves exécutées — vérification du 16 septembre 2026

PérimètreContrôles réellement exécutésRésultat
main après intégration des lotsnpm test309/309 PASS · 0 échec · 0 ignoré
idemnpx next typegen puis npx tsc --noEmitexit 0 (obligatoire : .next/types périmé après suppression de routes)
idemnpx eslint src tests scripts0 erreur / 0 avertissement
idemnpm run buildPASS · 9 routes (/, /_not-found, blog, chronos, flows, git, journal, pulse, telegram, debug/flux)
Preuve captation (fixtures + chaîne vivante)node tests/capture.browser.mjsPASS — 11 assertions
Recette autonome (sans VFG)node tests/presentable.browser.mjsPASS — 5 interceptions, workflow, panne/reprise, mobile
Lecture Git réelleGET /api/flows?days=7&repos=…65 items · chronos=up/21 pulse=up/6 git=up/40 · références identiques au git log réel
Origines devisCsrfOriginAllowed de Next.js127.0.0.1, localhost, IP LAN autorisés ; hôte inconnu bloqué
Transport de présence VFGnode tests/workflow.browser.mjs + PRESENCE_EMITTER réelPASS — 2 assertions, EXIT 0
idem — traverséeGET :4344/v1/events après émissionévénements source: "vfgate" · cycle started → progress → completed · git_branch: main
idem — spool%LOCALAPPDATA%\VFG\agent-presenceaucun spool.jsonl : livraison directe, sans repli différé
Agent natif réel observéGET :4344/v1/query/agents/activesession claude-code, synthetic: false, RainbowPiano, 33 outils
idem — ledgerGET :4344/v1/events?limit=1000132 événements, tous source: "vfgate", device: "claude-code"
idem — interfacevue Présence, capture navigateurtuile ACTIF, client · 33 outils · dépôt · dossier · « activé il y a 4s », aucune erreur JS

Preuve de présence — ce qui est réellement prouvé

A. Transport par le harnais (session étiquetée workflow-browser-<timestamp>) :

  • node tests/workflow.browser.mjs → PASS sur les 2 assertions, EXIT=0 (création, brief, copie de secours, flux réel, liaison, résultat, rechargement, retrait après rétention 60 s, mobile, aucune erreur JS).
  • Chronos expose les événements correspondants avec source: "vfgate" et le cycle de vie complet (started → progress avec tool_count: 1 → completed). C'est la preuve que VFGate a reçu et publié, pas seulement renvoyé 200.
  • Aucun événement n'est resté en attente dans le spool : la livraison est directe.

B. Observation d'un agent natif réel — la preuve qui manquait, obtenue le 16 septembre 2026 :

Fait mesuréValeur observée
Sessione931043c-f98d-47fb-8975-6ee229ac6476, synthetic: false
Client / deviceclaude-code (agent natif, pas le harnais)
Dépôt / brancheRainbowPiano, main — un autre dépôt que Fil
Volume132 événements, progress 123 · subagent.started 4 · subagent.completed 4 · started 1
Provenance132/132 portent source: "vfgate" et device: "claude-code"
État dans FilACTIF puis stale, tuile avec 33 outils, dossier réel, suggestion de liaison

Fil a donc capté, classé et rendu l'activité d'un agent réellement en train de travailler, sans aucune émission artificielle de cette session. La tuile affiche le client, le compte d'outils, le dépôt et le dossier — exactement les champs attendus, et aucun autre.

Ce qui reste non prouvé : le rendu depuis un second appareil physique. La pagination Chronos est partielle (1 000 événements lus, réponse bornée) : 132 est un compte observé sur cette fenêtre, pas une garantie sur la totalité de la session.

Piège réparé le 2026-09-16 — mode LAN et boucle locale

npm run dev:lan démarre Next sur 0.0.0.0, qui devient le hostname de démarrage. Or Next.js 16 n'autorise d'office que localhost et **.localhost : http://[hôte interne] était donc refusé, le websocket HMR recevait un 403 et la page restait figée sur « Chargement de ton espace… », sans erreur console. LOOPBACK_HOSTS (127.0.0.1, ::1) est désormais toujours déclaré dans allowedDevOrigins. Vérifié dans un navigateur réel : les trois origines rendent l'application.

Historique — reprise DeepSeek du 15 septembre 2026

Plan détaillé par sous-tâche : L1 tests obligatoires → L2 mesures Chronos → correction conditionnelle → L3 fusion → L4 retrait → L5 usage optionnel. Une sous-tâche active, lots séquentiels. Base observée 2b167ee ; arbre propre avant ce dépôt documentaire. Aucun test ni service relancé pour ce plan. Prochaine action : L1.1. Handoff de reprise.

Les SHA, écarts Git et PID dans les sections historiques ci-dessous ne constituent pas un état courant ; les relever à la reprise.

Version: 0.4.0
Tag historique: v0.4.0 local — publication distante non revérifiée ; ne contient pas les corrections personnelles courantes. Tags locaux : v0.1.0-init-prompt-gen, v0.2.0, v0.4.0 Port: 4477
Rôle: captation des flux de travail existants (ranger · catégoriser · scorer · taguer · journaliser · surveiller) + mindmap chronologique
Package: fil@0.4.0
Process docs: docs/PROCESS-DOCUMENTATION.md (mapping Rainbow → Fil, allègement volontaire)

État relu le 15 septembre 2026. HEAD : 1e03088 (refactor: retrait de l'alias mort pulseActHaystack). Branche main : +4 locaux vs origin/main (pas de push). (Photo datée ; le 16 septembre, origin/main...main → 0 0.)

Preuves exécutées (ce lot — refacto R0)

PérimètreContrôles réellement exécutésRésultat
Refacto R0 (Tâches A et B)npm test293/293 PASS · 0 échec · 0 ignoré (baseline mesurée 279)
idemnpx tsc --noEmitexit 0
idemnpx eslint src tests0 erreur / 0 avertissement
idemnpm run buildPASS · 7 routes (blog chronos flows git journal pulse telegram)
idemgrep duplicationreadJson 4→1 · AbortController 5→0 · enveloppe 2→1 · alias mort 0

Non exécuté (décision de session) : aucune preuve navigateur pour ce lot — comportement revu comme neutre sur les seuls chemins lus et testés. Aucune mesure de latence.

Preuves exécutées (prototype — usage réel)

PérimètreContrôles réellement exécutésRésultat
Chaîne locale sondéeGet-NetTCPConnection sur 4477 / 4344 / 4330 / 5191 / 5210Fil · Chronos · Pulse · VFGate écoutent ; VFJah libre (conforme : declared)
/api/flows?days=7&repos=…requête HTTP réelle63 items · 3 sources up (chronos 20 · pulse 10 · git 36) · mergedDuplicates 3 · couverture partial
/api/journal?days=7requête HTTP réelle7 jours calendaires · jour courant 17 items · 10 repliés (excluded) · couverture partial
Parcours captationnode tests/capture.browser.mjsPASS — 11 assertions (rendu 860c184)
Boucle de travailnode tests/workflow.browser.mjs + émetteur de présence réelPASS — 2 assertions, retrait après rétention confirmé

Piège rencontré et réparé : un npm run build lancé pendant qu'un next start tournait réécrit .next/static avec de nouveaux hachages ; le processus en place continuait de servir un HTML construit sur les anciens → 1 chunk en 404 → l'app restait sur « Chargement de ton espace… ». Arrêt du PID, relance, contrôle 9/9 chunks en 200. Voir handoff prototype.

activeMinutes: 0 est honnête : les actes Pulse sont repliés en ambient (comptés dans excluded) et les items de travail (Chronos, git) ne portent aucune durée mesurée. Un item sans durée contribue 0.

Errata — réconcilié par mesure : STATUS.md annonçait 279 tests, le handoff D5 annonçait 259. La mesure donne 279 avant ce lot : le chiffre du handoff D5 était périmé (écrit avant l'ajout des 20 tests de dedupe / flows-to-nodes).


Livré

  • Produit Fil 0.4.0 — P0/P1 du plan prioritaire ; captation WP0→WP8 (plan) ; Flux / Journal / Santé sur instantané partagé ; fils nestés Carte + anti-doublon inter-sources.
  • Refacto R0 (lot courant) — src/lib/envelope.ts + src/lib/fetch-json.ts ; supprime la duplication de décodage d'enveloppe, de readJson et des couples abort/timeout ; alias mort retiré. Plan : docs/PLAN-REFACTO-R0-2026-09-15.md.
  • Tutoriels — WORKFLOW-BASIQUE (porte d’entrée) · WORKFLOW-COMPLET.
  • POC vfg-gate-trigger/ — harnais d’observation hors src/ (--dry / --live / --presence) ; étape plan 1 close ; docs AUDIT / PLAN / README / ARTICLE / HANDOFF.
  • Consignes agents — AGENTS.md · CLAUDE.md · .cursor/rules/00-fil.mdc · skills cw-boot / cw-verify / cw-handoff.
  • Process documentation — mapping Rainbow→Fil ; index titres devblog ; sections état / preuves / prochaine action FG alignées.
  • Devblog — huit articles status: ready dans docs/devblog/ (captation, chaîne présence, hygiène, ports, plan prioritaire, fils nestés, tutoriel deux étages, process Rainbow→Fil) ; vfg-gate-trigger/ARTICLE-BLOG.md = renvoi ; index à jour (aucun titre « prévu » orphelin).

Détail todos historiques : tableau Phase / todos plus bas.


Vérifications

Preuves exécutées (héritées — non rejouées dans le lot process-docs)

PérimètreSourceVerdict / mesure
POC vfg-gate-trigger (dry + live --presence, helpers, syntaxe)vfg-gate-trigger/VERIFICATION.md — session ~16:36–16:38, révision c662246PASS · --dry → mock-only · live présence → Chronos + Fil (TROUVÉE, state=active)
Produit Fil (fils nestés + anti-doublon)handoff279 tests · tsc 0 · eslint 0/0 · build PASS · navigateur (doublons fusionnés, fils visibles)
Plan prioritaire / captationhandoffs plan prioritaire + WP7/WP8Preuves datées dans chaque handoff (ne pas les recompter ici)
Boot VFG (lot process-docs)node scripts/dev-meta.js boot --project Filexit 0 (2026-09-15T14:58:59Z UTC, clôture)

Non exécuté / non rejoué (ce lot process-docs)

  • Rejeu simulate-trigger.mjs (dry/live) — on s’appuie sur VERIFICATION.md existant.
  • npm test / tsc / eslint / build / Playwright Fil racine — non relancés pour l’alignement documentaire.
  • Étapes plan POC 0.4 / 0.5 — hors ownership Fil / hors exécution ici. (0.6 fait ailleurs — RainbowPiano playwright.capture.config.ts défaut 5183, aligné playwright.config.ts.)
  • Aucun docs:check / docs:test — volontairement absents du dépôt Fil (process).

À traiter

  • Refacto R0 — clos. Trois lots commités, aucun push : a2ff021 (plan) · dfa2bee (D4+D2/D3) · 1e03088 (D6). Plan de référence : docs/PLAN-REFACTO-R0-2026-09-15.md — table de progression à jour, critère d'acceptation corrigé après mesure (le critère « diff négatif » du plan était faux : le lot remplace 11 définitions dupliquées mais ajoute des modules documentés et 14 tests).
  • Prochaine action FG (bloquant chaîne / hors Fil produit) :
    1. 0.5 — Identifier le PID qui sert :5191 (sonde clôture : 24972 = node src/server.js, health ok, /settings/env expose encore des clés runtime → pas encore le main masqué) ; arrêter puis relancer l’API depuis [chemin local] main (pas depuis le chantier Fil).
    2. 0.4 — Arbitrage humain : rotation des tokens exposés pendant l’audit (ne pas consignier de valeurs).
    3. Optionnel : smoke filters/delete-all quand Fil :4477 est up.
  • 0.6 fait (RainbowPiano) : playwright.capture.config.ts défaut 5183 (aligné playwright.config.ts).
  • Optionnel Fil : seuils de profondeur Carte face aux fils automatiques ; retirer le log [FlowMapSync] ; arbitrer double représentation Pulse (Inbox + Carte) — handoff fils nestés.
  • Dette technique ouverte : fil-store.tsx (672 lignes, merge/prune inlinés) ; tests/live-flux-mindmap.test.ts creux (importOrSkip skip au lieu d'échouer) ; 800 ms partagé par les deux appels de /api/chronos — qualifié de « point de fragilité le plus probable » dans vfg-gate-trigger/AUDIT.md. Extrait sans être corrigé par le lot R0 : la correction demande une mesure de latence réelle.
  • Éditorial : huit billets prêts listés dans docs/devblog/README.md ; publication live blog non affirmée ici.
  • Lots R0 commités (a2ff021 · dfa2bee · 1e03088) ; pas de push sans demande.
  • Filters/delete-all : déjà dans le produit (STATUS todos ✅) — reste smoke FG, pas une implémentation ouverte.

Handoff de ce lot : handoffs/2026-09-15-handoff-refacto-d6-alias-mort.md (+ Tâche A).
Handoff précédent (process-docs) : handoffs/2026-09-15-handoff-process-documentation.md.


Phase / todos

idStatutNotes
scaffold-next✅Next.js 16 App Router · Tailwind 4 · shadcn
modele-noeuds✅Session · ThoughtNode · sources · seuils profondeur
chronarbre-ui✅Layout L→R, Dense/Large, repli branches
capture-manuelle✅Barre bas + parent focus / racine
capture-auto-demo↪Remplacé par Chronos live (polling 750 ms)
persist-local✅fil.workspace.v1 (décisions + captures manuelles) · Chronos/ponts RAM only · migration fil.session.v2
alertes-profondeur✅WARN ≥4 · CRITICAL ≥5 · bandeau + Remonter
zip-export🚫Retiré le 2026-09-16 — /get-zip, /download et public/fil-chronoflow.zip supprimés (archive datée de la v0.1)
ponts-vfg↪Pulse · Telegram · Blog : Inbox RAM ✅ ; git livré dans Flux ; IdeaPit non câblé
pont-pulse✅api/pulse · pulse-to-fil · poll → Inbox (plus chronarbre)
pont-telegram✅api/telegram · telegram-to-fil · poll → Inbox
pont-blog✅api/blog · blog-to-fil · poll → Inbox
ponts-ui-poll✅fil-app poll 1500 ms · Inbox view (hors mindmap)
chronos-agent-grid✅/api/chronos · polling 1500 ms (10 s en arrière-plan) · reconstruction agent.turn sans localStorage
chronos-agent-tests✅Mapping état, aliases contrat, reconstruction/collision
chronos-agent-fields✅agent-fields.ts — prompt, modèle, tokens in, repo, dossier
chronos-agent-lifecycle✅Hide terminal only (finished 60s · failed/interrupted 5min) · silence → stale visible · legacy 90s unused
chronos-agent-dismiss✅fil.agent.dismiss.v1 · hide vue only (ledger append-only)
chronos-to-fil✅buildFilPatchFromChronos → ids stables fil:agent:* / fil:event:*
chronos-mindmap-sync✅AgentGrid.onSnapshot → buildFilPatchFromChronos → upsertChronosPatch → pruneChronosNodes
debug-flux-crud✅/debug/flux · debug-flux-store · merge poll · panel inject — page dev uniquement depuis le 2026-09-16 (notFound() en production)
delete-bloc✅applyDeleteBloc · UI détail · dismiss Chronos vue-only
fil-view-filters✅source chips (blog/pulse/telegram off by default) · max depth
fil-delete-all✅applyDeleteAllFil · header « Supprimer tout » · dismiss agents · marqueur cleared (pas de résurrection démo)
blog-root-cap✅fil:blog:root + max 5 posts · default filter hide blog
workspace-model✅Project/Task/Link/InboxTriage · workspace-types + useWorkspace · persist dans fil.workspace.v1
execution-link✅Suggestions repo/path à confirmer · execution-link.ts · PresenceLinkHints + Inbox
ui-nav-workspace✅Nav Présence / Projets / Tâche / Inbox / Carte · Reprendre (clipboard brief)
flux-registry✅flows/sources.ts — registre unique des sources (statut live/declared, fraîcheur stream/archive)
flux-model✅flows/{types,classify,tags,score,scope,items}.ts — fonctions pures : catégorie · tags · score 0–100 + reasons[]
flux-noise-keep✅Le bruit n'est plus supprimé : category: "noise" (dépriorisé, compté, jamais perdu) — 201 items récupérés
flux-chronos-adapter✅flows/from-chronos.ts — agent.turn + act + presence (les 209 act étaient ignorés)
flux-pulse-adapter✅flows/from-pulse.ts — tout acte identifié devient un item, plus de hard-drop
flux-git-adapter✅flows/from-git.ts + flows/server/git-source.ts — git log seul (jamais de diff), racine de dépôt exigée
flux-git-api✅/api/git — borné (40/dépôt, 120 total), fail-open, dépôt invalide → erreur explicite, jamais un commit inventé
flux-api✅/api/flows — agrégat catégorisé/tagué/scoré · fail-open · no-store
flux-monitor✅flows/monitor.ts — santé par source + lagMs · fail-open prouvé · healthSummary
flux-journal✅flows/journal.ts — rollup par jour local · minutes actives mesurées · dispersionIndex
flux-journal-api✅/api/journal — ?day= / ?days= · dérivé, jamais un second ledger
flux-capture-shared✅flows/server/capture.ts — collecte unique partagée par /api/flows et /api/journal
flux-journal-fold✅Le journal replie noise/ambient (comptés dans excluded/byCategory) — 141 items → 4 de travail
flux-discipline✅flows/discipline.ts — focus projet (pénalité hors-focus) · budget par source (surplus → 1 ligne compteur) · suggestFocusSlug
flux-focus-ui✅Bouton « Concentrer sur X » · pénalité affichée en tête de ligne (jamais tronquée)
flux-budget-ui✅Ligne compteur épinglée en haut et exemptée du filtre catégorie (plafond jamais silencieux)
capture-browser-test✅tests/capture.browser.mjs — parcours captation : onglets, santé, items, focus, journal, fail-open, mobile
flux-view-logic✅flows/view.ts — filtres, recherche, pagination Top-N, badges santé, résumés de jour (purs)
flux-health-ui✅flow-health-strip.tsx — bandeau par source · empty distingué de down (vérifié navigateur)
flux-ui✅Onglet Flux — catégories, tags, score, recherche, plafond Top-20
flux-journal-ui✅Onglet Journal — sélecteur de jour, rollup, top items, repliés rendus visibles
flux-repo-client✅Le client transmet les Project.repoPath → source git up(13), 8 items git visibles
flux-turn-collapse✅collapseChronosTurns — 1 item par session (compteur tours/outils)
flux-privacy✅sanitizeFlowPayload — prompt/diff/clipboard/message_content retirés, titres bornés 120
delete-cleared✅Marqueur cleared — « Supprimer tout » reste vide après rechargement (vérifié navigateur)
multi-session⬜Une session démo hardcodée
lint-react-hooks✅ESLint clean (0 erreur, 0 warning) — npx eslint src tests
flux-git✅Adaptateur git livré (WP3) — source promue live après preuve sur dépôt réel (11 commits)
anti-dispersion✅Focus projet · Top-N · bruit replié · budget par source · alerte dispersion (WP7)
fils-nestes-carte✅flows/to-nodes + dédup inter-sources · pont Flux → Carte (2026-09-15)
vfg-gate-trigger-poc✅Harnais observation hors src/ · VERIFICATION PASS (dry + live présence)
refacto-coercion-r0✅coerce.ts — coercion partagée (−41 lignes, 8 copies supprimées)
refacto-d5-stale-notice✅staleReadNotice partagé · garde-fou anti-ré-inline
refacto-d4-d2-d3-envelope✅envelope.ts + fetch-json.ts — readJson 4→1 · abort 5→0 · divergence errorDetail paramétrée
refacto-d6-alias-mort✅Alias pulseActHaystack retiré (PULSE_SPAM_PATTERNS conservé)

Déployé (local)

ComposantStatut
npm run dev → http://[hôte interne]✅
npm run build✅ (2026-09-15 — TS + routes ponts + modules flux ; preuve héritée handoffs)
npm run lint✅ 0 erreur / 0 warning (preuve héritée)
Backend / API— (client-only + proxy Chronos/Pulse/Blog)
Remote git✅ privé GitHub (init release)

Non activé (volontaire)

  • Ingest réel IdeaPit / Signal Ledger
  • Auth / multi-appareils / sync serveur
  • MCP produit
  • Mutation / delete Chronos (interdit — hide = vue Fil seulement)
  • Catalogue docs / docs:check (allègement documenté)

POC vfg-gate-trigger — 2026-09-15

  • Dossier vfg-gate-trigger/ : harnais VFGate → Chronos → Fil, hors src/.
  • Étape 1 du plan POC livrée ; preuves : VERIFICATION.md PASS (révision test c662246).
  • Suite hors Fil : 0.5 (VFGate main), 0.4 (tokens) ; 0.6 fait (RainbowPiano playwright.capture.config.ts → 5183).
  • Article long : ownership autre agent (ARTICLE-BLOG.md → index devblog).

Plan captation — WP0 → WP8 livrés (2026-09-15)

Plan maître : docs/PLAN-CAPTATION-FLUX.md. Synthèse : bruit conservé (noise), journal replié honnête, monitoring empty ≠ down, anti-dispersion (focus + budget), scénario navigateur tests/capture.browser.mjs. Preuves détaillées dans les handoffs captation — non rejouées dans le lot process-docs.

Run

cd [chemin local]
npm install
npm run dev
# → http://[hôte interne]

npm run build
npm start

source markdown

Concepts de cet article

handoffworktreePulseVFGateIdeaPitdériveSignal LedgerVFG HeroVFJah MessengerMCP

Partage le plus de concepts avec