---
title: "Plan prioritaire du 15 septembre : cohérence Flux / Journal / Santé"
subtitle: "Pourquoi P0 a précédé Pulse, ce que le snapshot partagé a corrigé, et les preuves datées de la livraison 0.4.0"
date: 2026-09-30
time: "20:00"
author: VFG / Fil (Chronowflow)
publishedBy: code
status: pub
tags: ["fil", "chronowflow", "devblog", "plan", "flux", "journal", "sante", "priorite"]
---

Après WP0–WP8, Fil capturait déjà. Pourtant Flux, Journal et Santé pouvaient encore **raconter trois journées différentes**. Le [plan prioritaire](https://github.com/FGDidou/Chronowflow/blob/main/docs/PLAN-PRIORITAIRE-2026-09-15.md) du 15 septembre 2026 a choisi de fiabiliser d’abord la cohérence interne, puis la qualité amont — et de livrer `fil@0.4.0` avec des preuves datées, pas une narration de roadmap.

## La décision : P0 avant Pulse

Le dernier handoff captation proposait Pulse en premier. La revue du code a inversé l’ordre : des défauts **correctibles dans Fil** (périmètres Git divergents, budget avant tri, repliés inaccessibles, dispersion calculée sur le bruit) passaient avant l’ajout ou le nettoyage de sources.

Ordre retenu :

| Ordre | Lot | Intent |
| --- | --- | --- |
| 1–3 | **P0-A / B / C** | Même instantané · classement consultable · bilans interprétables |
| 4–5 | **P1-A / B** | Qualité Pulse · couverture historique Chronos |
| 6 | **P1-C** | Parcours d’usage + livraison `0.4.0` |
| 7+ | **P2** | Digests et extensions — **après** preuves P0/P1 |

## Ce qui clochait (constats vérifiés dans le code)

**P0-A — périmètres divergents.** `FilApp` transmettait `repoPaths` à Flux, pas à Journal ni au bandeau Santé. Sans variables Git serveur, un commit visible dans Flux pouvait manquer ailleurs. `captureFlows` partageait le *code* de collecte, pas un *instantané* : deux appels successifs n’étaient pas la même lecture. Une source jamais interrogée (blog `live` hors collecte) pouvait paraître « vide observée ».

**P0-B — budget avant tri.** `applySourceBudget` précédait le tri de pagination : les meilleurs scores n’étaient pas garantis parmi les conservés. Une recherche ne retrouvait pas un item déjà retiré. « Voir plus » ne dépassait pas vraiment le Top-20.

**P0-C — bilans ambigus.** Dispersion Flux comptait le bruit ; le Journal l’excluait. Minutes API vs rollups incohérents. Journal court ou plafond Chronos 1000 événements sans état de **couverture** → risque de conclure à tort « journée vide ».

## Livraison P0 : un instantané, un ordre, une couverture

| Correctif | Effet |
| --- | --- |
| Collecte client partagée | Même `snapshotId`, mêmes `repoPaths`, même date de lecture pour Flux / Journal / Santé |
| Panne après succès | Données conservées, lecture **périmée** signalée |
| Source non interrogée | Distinguée d’une archive silencieuse observée |
| Pipeline Flux | filtre → focus/score → tri → budget → pagination ; surplus et pages accessibles |
| Dispersion | horloge de l’instantané ; travail / échanges seulement |
| Journal | sept jours calendaires ; couverture partielle Chronos / Pulse / Git exposée |

### Preuve P0 (handoff plan prioritaire)

| Contrôle | Résultat déclaré |
| --- | --- |
| `npm test` | **247/247** PASS |
| `npm run build` | PASS |
| `npx eslint src tests` | PASS |
| `tests/capture.browser.mjs` | PASS sur `:4478`, mobile et panne upstream inclus |

## Livraison P1 : qualité amont + curseur Chronos

| Lot | Mesure / livrable (sources handoff) |
| --- | --- |
| **P1-A** Pulse `1f9b393` | `window=6h` honoré ; volume observé **500 → 98** actes ; historique intact |
| **P1-B** Chronos `30456cd` | Curseur `(at,id)` ; **1005** événements sans perte/doublon (côté Chronos) |
| Fil | Jusqu’à 20 pages / période ; serveur ancien → couverture **partielle** annoncée |
| Tests Fil après P1 | **249/249** PASS · build · lint |

### Preuve P1-C (validation d’usage)

| Contrôle | Résultat déclaré |
| --- | --- |
| Scénario navigateur | PASS sur `:4478` · **161** items · journal cohérent · panne upstream sans erreur JS · mobile 390 px |
| Smoke post-`npm start` | page HTTP **200** · `/api/flows?days=7` → **72** items · `snapshotId` présent |
| Couverture affichée | `chronos:partial,pulse:partial` — attendu tant que Chronos ancien / Pulse borné |

Package et tag documentés dans STATUS : **`fil@0.4.0`** · tag local `v0.4.0`.

## Ce qui attend encore (P2 et hors séquence)

- Digests `fil.journal.v1` de jours clos (après couverture vérifiable).
- Blog / Telegram dans la chaîne `FlowItem` (ponts Inbox distincts aujourd’hui).
- Scores Carte / Inbox, focus persistant — extensions, pas bloqueurs P0.
- IdeaPit, sync multi-appareils, MCP produit — hors séquence prioritaire.

Le plan rappelle aussi : les chiffres « 201 / 245 items de bruit » sont une **ancienne mesure** captation ; à reprendre sur un échantillon frais avant citation permanente.

### Non exécuté dans ce billet

- Rejeu `npm test` / build / Playwright au moment de la rédaction éditoriale.
- Certification runtime live de Pulse / Chronos / VFGate au moment de la publication.
- Déploiement du curseur Chronos dans *toutes* les branches workspace (dépendance hors Fil).
- Digests figés (non livrés).

## Une phrase pour la suite

Fiabiliser **la même vérité** entre Flux, Journal et Santé valait mieux qu’une source de plus : le plan prioritaire l’a prouvé en chiffres, et la suite digests / bruit Pulse à la source ne reprend qu’après cette base.

---

*Sources : `docs/PLAN-PRIORITAIRE-2026-09-15.md`, `handoffs/2026-09-15-handoff-plan-prioritaire.md`, `STATUS.md`, `DERNIERE-INFO.md`. Miroir : `Chronowflow/docs/devblog/`.*