Skip to content

Le garde-fou du compte n'était gardé par rien - #3

Merged
pymenvert merged 1 commit into
mainfrom
fix/dire-vrai-avant-2.1.1
Aug 17, 2026
Merged

Le garde-fou du compte n'était gardé par rien#3
pymenvert merged 1 commit into
mainfrom
fix/dire-vrai-avant-2.1.1

Conversation

@pymenvert

Copy link
Copy Markdown
Owner

Objectif

Préparation de la 2.1.1. Avant d'écrire les notes de version, on a cherché
les problèmes — pour que ces notes disent la vérité. La campagne de mutation
ciblée sur ce qui a bougé depuis la 2.1.0 est passée sans un aveugle (25/25),
mais elle a révélé ce qu'elle ne pouvait pas atteindre.

tests/mutation.js ne sait casser que server.js. Rien de tools/ n'avait
donc jamais été éprouvé — et c'est là que se cachait le trou.

Les changements

  1. Le garde-fou du compte de tests est enfin gardé.
    tools/verifie-compte-tests.js empêche le badge du README de mentir. Sa
    fonction de décision n'était exercée par aucun test : neutraliser sa
    conclusion (if (fautes)if (false)) laissait la suite verte et la CI
    verte
    . Cinq tests ferment ça, plus trois défauts trouvés en relecture —
    dont un actif : compteRendu prenait le premier « tests N » de la
    sortie au lieu du dernier, si bien qu'un console.log dans un test pouvait
    lui faire lire 12 au lieu de 344. Latent, jamais déclenché, corrigé.

  2. Les chiffres qui mentaient sont corrigés.
    Le README annonçait 262 tests huit lignes sous un badge qui en disait 344
    (nombre supprimé : recopié à la main, il rementira) · le CLAUDE.md se
    contredisait sur les tests d'interface (45 vs 46 — c'est 46) · « 38
    mutations » n'a jamais été vrai (36, le CHANGELOG le disait) ·
    ETAT-DU-PROJET.md portait six compteurs périmés.

  3. L'icône de zone de notification n'est plus « JAMAIS EXÉCUTÉE ».
    Essayée le 2026-08-17 sur une vraie machine Windows 11. Pastille visible
    (dans le tiroir caché, comme prévu), infobulle, menu au clic droit,
    double-clic : tout répond. Les trois sorties ont été chronométrées et le
    retrait ne laisse pas de pastille fantôme, y compris par le chemin brutal
    que le commentaire redoutait. server.js ne change qu'en commentaire,
    zéro ligne de code, et dist/ suit.

Vérifications réellement effectuées

Check Commande Résultat
format / lint / typecheck non configuré dans ce projet
tests npm test 346 tests, 0 échec, 0 ignoré
build node sync-dist.js --check dist/ synchrone avec les sources
garde-fou du compte node tools/verifie-compte-tests.js ✅ conforme à 346
server.js = commentaire seul diff filtré des lignes non-commentaires 0 ligne de code
les nouveaux tests mordent 7 cassages rejoués dans un clone 7 détectés sur 7

Deux relectures indépendantes (revue de code, ingénierie de test) ont été
passées ; leurs sept accusations ont été vérifiées une par une avant correction,
y compris une qui portait contre une erreur introduite dans cette branche même
(« 38 à l'époque » — c'était 36).

Risques et ce qui reste à surveiller

  • La CI n'avait pas encore parlé au moment d'ouvrir cette demande : elle
    seule exécute la suite sur Ubuntu et sur Windows.
  • Le format de sortie réel de la CI (TAP) n'a pas été observé : la machine de
    développement produit l'autre format. Le défaut n°1 a été mesuré sur une sortie
    fabriquée, pas sur une vraie sortie de runner.
  • Non corrigé, écrit et daté dans docs/reste-a-faire.md plutôt que promis :
    un repère faux sur deux passe encore inaperçu (il faudrait rendre la racine
    injectable — pas la veille d'un tag), et les nombres écrits en prose ne sont
    gardés par rien.
  • L'essai de l'icône vaut pour une machine Windows 11. Sur un Windows plus
    ancien, la pastille morte peut rester jusqu'au survol de la souris — c'est
    écrit tel quel dans la documentation, sans être présenté comme une garantie.

⚠ Cette branche ne bumpe pas la version : package.json et le CHANGELOG
restent inchangés. La 2.1.1 fait l'objet d'un travail séparé.

Préparation de la 2.1.1. La campagne de mutation ciblée sur ce qui a bougé
depuis la 2.1.0 a passé ses 25 cassages sans un aveugle — mais elle a mis au
jour ce qu'elle ne pouvait PAS atteindre : `tests/mutation.js` ne sait casser
que `server.js`, donc rien de `tools/` n'a jamais été éprouvé.

Mesuré : `tools/verifie-compte-tests.js` — celui qui empêche le badge du README
de mentir — avait sa fonction de décision exercée par aucun test. Neutraliser sa
conclusion (`if (fautes)` → `if (false)`) laissait la suite verte ET la CI verte.
Le garde-fou pouvait devenir purement décoratif sans que rien ne le dise : le
défaut exact qu'il existe pour empêcher, retourné contre lui.

Cinq tests le ferment, et deux relectures ont trouvé pire encore :

- `compteRendu` prenait le PREMIER « tests N » de la sortie, pas le dernier. Avec
  le rapporteur que la CI obtient, un `console.log` dans un test produit une
  ligne indiscernable d'un résumé : l'outil lisait 12 au lieu de 344. Le piège se
  referme ensuite tout seul — CI rouge, on recopie 12 dans le badge, et le badge
  devient faux avec une CI verte. Latent, jamais déclenché : corrigé quand même.
- rien ne lançait l'outil comme la CI le lance. Supprimer son `process.exit`
  laissait tout vert, pour toujours. Un test le lance en vrai processus.
- un témoin s'appuyait sur l'absence du mot « conforme » sans que rien n'en
  affirme la présence : il pouvait se vider en silence. Les deux assertions se
  verrouillent maintenant l'une l'autre.

Les sept cassages sont rejoués : sept détectés sur sept.

Et puisque ce commit corrige des chiffres qui mentaient, il corrige aussi les
autres : le README annonçait 262 tests huit lignes sous un badge qui en disait
344 (le nombre est supprimé — recopié à la main, il rementira), le CLAUDE.md se
contredisait sur les tests d'interface (45 contre 46, c'est 46), « 38 mutations »
n'a jamais été vrai (36, le CHANGELOG le disait), et `ETAT-DU-PROJET.md` portait
six compteurs périmés. La formule est devenue « chacune détectée au moins une
fois » : aucune campagne n'a éprouvé les 41 d'un bloc, et il fallait le dire.

Enfin, l'icône de zone de notification n'est plus « JAMAIS EXÉCUTÉE ». Essayée
le 2026-08-17 sur une vraie machine Windows 11 : pastille visible dans le tiroir
caché, infobulle, menu au clic droit, double-clic — tout répond. Les trois
sorties ont été chronométrées, et le retrait ne laisse pas de pastille fantôme,
y compris par le chemin brutal (tué en 0,4 s) que le commentaire redoutait :
Windows 11 nettoie de lui-même. Mesure sur UNE machine, pas une garantie — c'est
écrit tel quel. `server.js` ne change qu'en commentaire, zéro ligne de code, et
`dist/` suit.

Ce qui n'est pas corrigé est écrit et daté dans `docs/reste-a-faire.md` plutôt
que promis : un repère faux sur deux passe encore inaperçu (il faudrait rendre
la racine injectable — pas la veille d'un tag), et les nombres écrits en prose
ne sont gardés par rien.

346 tests, 0 ignoré. dist/ synchrone.
@pymenvert
pymenvert merged commit f5bcb25 into main Aug 17, 2026
2 checks passed
@pymenvert
pymenvert deleted the fix/dire-vrai-avant-2.1.1 branch August 17, 2026 14:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant