STATUS — Chronowflow
Article généré automatiquement depuis le STATUS.md de Chronowflow — 2026-10-10. 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ètre | Contrôles réellement exécutés | Résultat |
|---|---|---|
main après intégration des lots | npm test | 309/309 PASS · 0 échec · 0 ignoré |
| idem | npx next typegen puis npx tsc --noEmit | exit 0 (obligatoire : .next/types périmé après suppression de routes) |
| idem | npx eslint src tests scripts | 0 erreur / 0 avertissement |
| idem | npm run build | PASS · 9 routes (/, /_not-found, blog, chronos, flows, git, journal, pulse, telegram, debug/flux) |
| Preuve captation (fixtures + chaîne vivante) | node tests/capture.browser.mjs | PASS — 11 assertions |
| Recette autonome (sans VFG) | node tests/presentable.browser.mjs | PASS — 5 interceptions, workflow, panne/reprise, mobile |
| Lecture Git réelle | GET /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 dev | isCsrfOriginAllowed de Next.js | 127.0.0.1, localhost, IP LAN autorisés ; hôte inconnu bloqué |
| Transport de présence VFG | node tests/workflow.browser.mjs + PRESENCE_EMITTER réel | PASS — 2 assertions, EXIT 0 |
| idem — traversée | GET :4344/v1/events après émission | événements source: "vfgate" · cycle started → progress → completed · git_branch: main |
| idem — spool | %LOCALAPPDATA%\VFG\agent-presence | aucun spool.jsonl : livraison directe, sans repli différé |
| Agent natif réel observé | GET :4344/v1/query/agents/active | session claude-code, synthetic: false, RainbowPiano, 33 outils |
| idem — ledger | GET :4344/v1/events?limit=1000 | 132 événements, tous source: "vfgate", device: "claude-code" |
| idem — interface | vue Présence, capture navigateur | tuile 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→PASSsur 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→progressavectool_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 |
|---|---|
| Session | e931043c-f98d-47fb-8975-6ee229ac6476, synthetic: false |
| Client / device | claude-code (agent natif, pas le harnais) |
| Dépôt / branche | RainbowPiano, main — un autre dépôt que Fil |
| Volume | 132 événements, progress 123 · subagent.started 4 · subagent.completed 4 · started 1 |
| Provenance | 132/132 portent source: "vfgate" et device: "claude-code" |
| État dans Fil | ACTIF 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ètre | Contrôles réellement exécutés | Résultat |
|---|---|---|
| Refacto R0 (Tâches A et B) | npm test | 293/293 PASS · 0 échec · 0 ignoré (baseline mesurée 279) |
| idem | npx tsc --noEmit | exit 0 |
| idem | npx eslint src tests | 0 erreur / 0 avertissement |
| idem | npm run build | PASS · 7 routes (blog chronos flows git journal pulse telegram) |
| idem | grep duplication | readJson 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ètre | Contrôles réellement exécutés | Résultat |
|---|---|---|
| Chaîne locale sondée | Get-NetTCPConnection sur 4477 / 4344 / 4330 / 5191 / 5210 | Fil · Chronos · Pulse · VFGate écoutent ; VFJah libre (conforme : declared) |
/api/flows?days=7&repos=… | requête HTTP réelle | 63 items · 3 sources up (chronos 20 · pulse 10 · git 36) · mergedDuplicates 3 · couverture partial |
/api/journal?days=7 | requête HTTP réelle | 7 jours calendaires · jour courant 17 items · 10 repliés (excluded) · couverture partial |
| Parcours captation | node tests/capture.browser.mjs | PASS — 11 assertions (rendu 860c184) |
| Boucle de travail | node tests/workflow.browser.mjs + émetteur de présence réel | PASS — 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, dereadJsonet 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 horssrc/(--dry/--live/--presence) ; étape plan 1 close ; docs AUDIT / PLAN / README / ARTICLE / HANDOFF. - Consignes agents —
AGENTS.md·CLAUDE.md·.cursor/rules/00-fil.mdc· skillscw-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: readydansdocs/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ètre | Source | Verdict / mesure |
|---|---|---|
POC vfg-gate-trigger (dry + live --presence, helpers, syntaxe) | vfg-gate-trigger/VERIFICATION.md — session ~16:36–16:38, révision c662246 | PASS · --dry → mock-only · live présence → Chronos + Fil (TROUVÉE, state=active) |
| Produit Fil (fils nestés + anti-doublon) | handoff | 279 tests · tsc 0 · eslint 0/0 · build PASS · navigateur (doublons fusionnés, fils visibles) |
| Plan prioritaire / captation | handoffs plan prioritaire + WP7/WP8 | Preuves datées dans chaque handoff (ne pas les recompter ici) |
| Boot VFG (lot process-docs) | node scripts/dev-meta.js boot --project Fil | exit 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 surVERIFICATION.mdexistant. 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.tsdéfaut5183, 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) :
- 0.5 — Identifier le PID qui sert
:5191(sonde clôture :24972=node src/server.js, health ok,/settings/envexpose encore des clés runtime → pas encore lemainmasqué) ; arrêter puis relancer l’API depuis[chemin local]main(pas depuis le chantier Fil). - 0.4 — Arbitrage humain : rotation des tokens exposés pendant l’audit (ne pas consignier de valeurs).
- Optionnel : smoke filters/delete-all quand Fil
:4477est up.
- 0.5 — Identifier le PID qui sert
- 0.6 fait (RainbowPiano) :
playwright.capture.config.tsdéfaut5183(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.tscreux (importOrSkipskip au lieu d'échouer) ; 800 ms partagé par les deux appels de/api/chronos— qualifié de « point de fragilité le plus probable » dansvfg-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
| id | Statut | Notes |
|---|---|---|
| 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)
| Composant | Statut |
|---|---|
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, horssrc/. - Étape 1 du plan POC livrée ; preuves :
VERIFICATION.mdPASS (révision testc662246). - Suite hors Fil : 0.5 (VFGate
main), 0.4 (tokens) ; 0.6 fait (RainbowPianoplaywright.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