L'urgence fantôme du tableau de bord

avant : 98 jours, urgence HAUTE après : 0 jour, moyenne 1 dépôt non résolu sur 22 — jamais plus + 2 défauts trouvés en chemin
La page /statuts-projets/ affichait agent-telemetry en rouge — « 98 jours sans nouvelles, dette nommée ». Le projet allait très bien. Il n'était simplement plus lu. Chaque affirmation ici = une commande rejouable (2026-10-05).
98 jd'« urgence haute » affichée à tort
0alerte réelle derrière
2026-10-05dernier statut, après correction
22/22dépôts résolus (avant : 21/22)
4défauts corrigés au total

Le symptôme : un rouge qui ne voulait rien dire

Un tableau de bord de statuts range les projets par urgence. Un projet haute monte en tête de liste — c'est fait pour qu'on le regarde. Sauf qu'ici, l'alerte disait ceci :

agent-telemetry — 98 jours sans statut · signal debt · urgence haute.
Dernier article de statut : 2026-06-29.

Or la vue n'avait rien inventé : elle ne fait que refléter le corpus. Le dernier statut existant datait bien du 29/06. Le problème était ailleurs : le projet n'était plus collecté. Personne n'écrivait de nouveau statut, donc l'ancien restait le plus récent — et vieillissait à l'écran.

La page n'était pas fautive — la chaîne, si

C'est le point de méthode. On aurait pu « corriger le tableau de bord ». C'était le mauvais endroit. La page /statuts-projets/ est une projection calculée : à chaque consultation, elle relit les articles de statut et les regroupe. Sa donnée était fraîche (le JSON servi portait un horodatage du jour).

Le défaut vivait un étage au-dessus, dans le collecteur qui écrit ces articles. Mesurer d'abord, c'est ce qui évite de réparer le miroir au lieu de la pièce.

La cause : un chemin qui n'existe plus

Dépôtagent-telemetry
→
A déménagésous VFVFGPT/02-tools/
→
Ancien chemin02-tools/agent-telemetry
→
Ne résout plusSTATUS.md introuvable
→
Sauté en silence« no STATUS.md »

Le collecteur cherchait le fichier à 02-tools/agent-telemetry/STATUS.md. Le dépôt vivait désormais à VFVFGPT/02-tools/agent-telemetry/ — deux niveaux plus bas. Le résolveur ne l'a pas trouvé, a rendu null, et le dépôt a été ignoré à chaque passage.

Le pire n'était pas le chemin — c'était le silence. Le collecteur comptait les articles écrits, pas les dépôts introuvables. « 0 » ressemblait à « rien de neuf », pas à « une porte manquante ». Un projet peut donc disparaître du radar sans qu'un seul message ne le signale.

Le déroulé, daté par les mesures

déménagement (avant le 05/10)
Le dépôt change de dossier
Il passe sous VFVFGPT/02-tools/. Le slug déclaré 02-tools/agent-telemetry devient faux.
chaque collecte quotidienne
« no STATUS.md », sans un mot
Le résolveur rend null. Le dépôt est skipped. Aucune alerte : la sortie compte les écrits, pas les manquants.
à l'écran
L'urgence fantôme grandit
Le dernier statut (29/06) reste le plus récent et vieillit : 90… 96… 98 jours. Urgence haute, signal debt.
2026-10-05 · mesure
1 dépôt non résolu sur 22
Un script de mesure liste chaque dépôt et son STATUS.md : agent-telemetry est le seul « MISS ». La cause est nommée, pas devinée.
2026-10-05 · correction
Chemin réel + silence supprimé
Slug corrigé ; les « no STATUS.md » sont désormais comptés et nommés.
2026-10-05 · preuve
0 jour, urgence moyenne
Article publié et servi (HTTP 200) ; la vue affiche lastDay 2026-10-05, urgency moyenne, et 0 projet en urgence haute.

Avant / après, sur la même ligne

Avant — l'alerte fantôme

agent-telemetry · lastDay 2026-06-29 · 98 j · urgence haute
Signal debt lu dans un statut vieux de trois mois
Total « projets en urgence haute » : 1 — un faux

Le tableau criait au loup sur un projet qui n'avait rien demandé.

Après — la vraie mesure

agent-telemetry · lastDay 2026-10-05 · 0 j · urgence moyenne
Article servi : …/2026-10-05-status-agent-telemetry.md.html → HTTP 200
Total « projets en urgence haute » : 0 — plus aucune fausse alerte

La ligne rouge a disparu parce que la cause a disparu, pas parce qu'on l'a cachée.

Deux bonus trouvés en mesurant

Corriger un bug, c'est souvent en croiser d'autres. Deux sont sortis, et l'un était sévère.

① Le « dry-run » qui écrivait pour de vrai

Un mode --dry-run est censé simuler sans rien changer. Celui-ci écrivait pourtant les 22 fichiers et le journal de suivi. Conséquence en cascade : au vrai passage, tout était déjà marqué « inchangé » → le collecteur sautait la publication. Un mode d'essai qui mutait l'état rendait la vraie exécution muette.

Avant : --dry-run → 22 fichiers écrits · journal modifié.
Après : --dry-run → 22 candidats listés · 0 fichier · journal intact.

② Le « 0 résultat » muet

Le collecteur ignorait les dépôts introuvables sans les nommer. Ils sont désormais comptés et affichés — la prochaine dérive de chemin se verra dans la sortie, au lieu de se cacher derrière un « 0 » qui ne dit rien.

La preuve (commande → résultat réel)

PreuveCommande rejouableRésultat réel
Le seul dépôt perdumesure des STATUS.md par dépôt1 MISS sur 22 : agent-telemetry
La vue se met à jourGET /api/statuts-projets.jsonlastDay 2026-10-05 · daysSince 0 · urgency moyenne · totals.haute 0
L'article est serviGET …/2026-10-05-status-agent-telemetry.md.htmlHTTP 200
Le dry-run ne mute plusstatus:auto --dry-run puis git status22 candidats · 0 fichier écrit · journal intact
Non-régression des testsnode --test (statuts + racines)27/27 vert
La publication réelle passenode scripts/status-auto.mjs22 publiés · 0 échec

Le tableau, remis d'aplomb

agent-telemetry — 0 jmoyenne
vfgate — 1 jmoyenne
vfvfgpt — 1 jmoyenne
vfg-cockpit — 1 jbasse
Aucun projet en urgence haute. La seule alerte rouge du matin était un fantôme produit par un chemin périmé — pas un projet en difficulté.

Verdicts et restes (honnêteté de clôture)

ÉlémentVerdictPourquoi
Urgence fantôme agent-telemetryÉLIMINÉElastDay 2026-10-05, urgency moyenne, servie en 200
Cause « silencieuse »ÉLIMINÉEles « no STATUS.md » sont nommés
--dry-run mutantÉLIMINÉEne persiste plus rien, prouvé par git status propre
Deux « télémétries » distinctesÀ NE PAS CONFONDREla chaîne de présence (VFGate→Chronos) réparée le 05/10 est un autre chantier ; le MCP agent-telemetry (:5198) reste dormant — état réel écrit dans son STATUS.md
Push des commitsDÉCISION HUMAINEnon poussé ; deux commits locaux (blog + méta-dépôt)