Le registre qui refuse un chiffre sans instrument
Un dossier par projet, une question énoncée avant une réponse énoncée, et chaque chiffre porteur de l'instrument qui l'a produit, de la méthode qui l'encadre et du nombre d'échantillons sur lequel il repose. À défaut des trois, c'est une estimation, et elle le dit.
Chiffres relevés le 21 août 2026 en exécutant les suites de tests, et non recopiés des fichiers README.
Le moment où un chiffre plausible devient porteur
La plupart des chiffres de référence publiés seraient refusés à l'entrée de cet outil. Non parce qu'ils sont faux, mais parce que rien en eux ne dit combien d'exécutions ont été moyennées ni ce qui a mesuré la puissance. C'est dans cet écart qu'un nombre plausible devient discrètement porteur d'une décision.
Le refuser au point d'entrée coûte quelques secondes par enregistrement. Le découvrir trois mois plus tard coûte le résultat. Ce dépôt est le pendant des autres : celui où les estimations qu'ils publient, toutes étiquetées comme telles, seront confrontées à un relevé.
Un chiffre sans attribution est une anecdote
« La lacune est comptée par l'outil lui-même, et non par une note en bas de page. »
Trois refus, et c'est l'essentiel de ce que fait l'outil. Un enregistrement qui ne nomme pas son instrument n'entre pas. Un écart entre estimation et mesure ne se calcule pas tant que la mesure n'existe pas, et l'outil dit alors précisément ce qui lui manque. Et l'inventaire du registre affiche en permanence le nombre d'estimations qu'aucun relevé n'a encore remplacées.
$ wb summary
energy-model-calibration 0 measured 7 estimate(s)
lora-range-survey 0 measured 0 estimate(s)
$ wb record --project energy-model-calibration --board uno-q \
--quantity inference --unit J --samples 0.71 0.68 0.74
wb: a measurement must name the instrument that produced it;
an unattributed figure is an anecdote
$ wb gap --project energy-model-calibration --quantity inference
wb: a gap needs one estimate and one measurement of the same quantity;
found 2 estimate(s) and 0 measurement(s)
L'état affiché est celui du jour : zéro mesure, sept estimations, dont deux portent sur la quantité interrogée par la troisième commande. Aucune carte n'a encore été mise sous tension, et la valeur de ce dépôt n'est pas dans les chiffres qu'il contient mais dans ceux qu'il refuse d'accepter.
Cent cinquante-sept tests, la plupart négatifs
Exécutés le 21 août 2026 sur le dépôt public. Le fichier README du dépôt en annonce encore 150. La suite éprouve surtout ce que l'outil rejette, ce qui est la seule façon de tester un dispositif dont la fonction est de refuser.
| Groupe | Tests | Ce qu'il éprouve |
|---|---|---|
test_repository.py | 31 | Le registre, ses règles d'écriture et ce qu'il refuse d'enregistrer |
test_record.py | 23 | La structure d'un relevé, et les champs sans lesquels il n'existe pas |
test_naming.py | 22 | Le nommage des projets, des cartes et des quantités |
test_cli.py | 17 | L'interface en ligne de commande, refus compris |
test_security.py | 14 | Ce que l'outil fait d'un fichier qu'il n'a pas écrit |
test_stats.py | 14 | Les statistiques et le calcul d'écart entre estimation et mesure |
test_smoke, store, inventory, canonical, functional | 36 | Démarrage, stockage, inventaire matériel, forme canonique et bout en bout |
| Total | 157 | 97 % |
La barrière d'intégration enchaîne l'analyse statique, le typage strict, la revue de sécurité du code et un plancher de couverture à 90 pour cent. Le dépôt n'a aucune dépendance d'exécution, et son analyseur de fichiers est soumis à un test aléatoire.
Les lacunes connues, telles que le dépôt les énonce
Le modèle de menace du dépôt énumère six risques résiduels. Le cinquième est le plus important, et il est le seul que ce dépôt existe pour fermer.
- Aucun essai de recette sur banc. La suite prouve que l'outil est honnête sur les chiffres ; elle ne peut pas prouver qu'un chiffre est juste, puisque rien n'a encore été mesuré. Fermer cette lacune demande un instrument lisant une charge connue.
- La provenance d'un échantillon s'arrête à la parole de l'opérateur. Le champ d'instrument est une chaîne saisie par une personne, et rien ne relie un relevé au composant qui l'a produit. La capture automatique depuis l'INA219 vers le registre est l'outil suivant.
- Les conditions d'essai sont en texte libre. Rien n'impose de consigner un état thermique, donc deux chiffres incomparables peuvent voisiner en paraissant comparables.
- Le fichier n'est ni chaîné ni signé. Qui a le droit d'écrire peut produire un fichier trafiqué cohérent qui se charge sans erreur. La défense contre un collègue disposant des droits est la revue de code et l'historique, pas la cryptographie.
- L'inventaire matériel énonce aussi ce que chaque carte ne fera jamais. Aucune n'est un contrôleur de sécurité certifié, et le dépôt le consigne carte par carte plutôt que de laisser le lecteur le supposer.
Quatre documents, dans l'ordre où ils se lisent
- docs/GETTING_STARTED.mdNe suppose ni terminal ni Python, et prend une vingtaine de minutes.
- docs/MEASUREMENT.mdCe qui constitue une mesure, et ce qui n'en est pas une.
- docs/HARDWARE.fr.mdLes cinq cartes, ce que chacune ouvre et ce qu'elle ne fera jamais.
- docs/THREAT_MODEL.mdLes six risques résiduels, énoncés sans atténuation.
Une revendication de gouvernance se vérifie ou ne vaut rien
Si l'un de ces maillons correspond à une question ouverte chez vous, la conversation commence par le code.