runward

RW™ · V0.35.0

Treize agents ont audité runward. Verdict : pas fini..

Avant d'annoncer une version « finalisée », nous avons retourné l'audit contre notre propre dépôt : neuf lecteurs, trois réfutateurs avec pour consigne de réfuter, 95 constats ancrés fichier:ligne. Les deux plus graves vivaient dans la couche de preuve elle-même. 0.35.0 les corrige et livre la couche verdict.

Avant d'annoncer une version « finalisée », nous avons retourné l'audit contre notre propre dépôt : neuf lecteurs en parallèle, trois réfutateurs avec pour consigne de réfuter, 95 constats, chacun ancré fichier:ligne. La question posée : runward est-il fini ?

La réponse est non. « La limite est atteinte » : réfuté. « Prêt à annoncer » : réfuté. Et les deux constats les plus graves ne vivaient pas dans la doc. Ils vivaient dans la couche de preuve elle-même.

Faux vert n° 1 : l'homonyme JUnit

Un pointeur test:report.xml::monTest se résout contre le rapport committé. L'adaptateur s'arrêtait à la première occurrence du nom. Deux suites, deux cas homonymes, le premier vert, le second rouge :

<testcase name="t" classname="A"/>
<testcase name="t" classname="B"><failure/></testcase>

Le pointeur lisait « pass ». Un test rouge invisible derrière un homonyme vert, dans l'outil qui vend « un test rouge n'est pas une preuve ». Corrigé : toutes les occurrences sont scannées, un seul rouge rougit le verdict, et Classe::Nom épingle un cas quand les homonymes sont des tests légitimement différents.

Faux vert n° 2 : la profondeur ignorée

spec-check vérifiait qu'un critère d'acceptation pointe vers un fichier présent, et ignorait silencieusement le #Symbole et le ::nomDeTest que l'auteur avait écrits. Un critère lié à un symbole disparu ou à un test rouge lisait « linked ». La machinerie pour vérifier existait déjà dans la couche de preuve de la porte ; elle n'était pas branchée. Elle l'est : mêmes vérifications, même profondeur, et un critère ne passe que si tous ses pointeurs vérifient.

Ce que 0.35.0 livre

La couche verdict entière : check --attest (le verdict en Statement in-toto v1, non signé, lié à l'état exact de la mission), runward verify (re-dérivation offline sur le dépôt seul, avec l'écart de version nommé pour que l'évolution ne se confonde jamais avec une falsification), runward bundle (une provenance unique pour un assesseur), runward spec-check, l'adaptateur JUnit, et le corpus partagé épinglé sans registry : update --corpus <chemin>, un chemin, jamais une coordonnée, résolu depuis des octets committés, réseau coupé.

Le détail est dans le CHANGELOG, avec la note de migration : deux faux verts meurent volontairement, trois règles gagnent une signature, et la note dit qui rougit et la correction en une ligne.

La ligne d'humilité

L'audit n'a pas absous le reste. La limite n'est pas atteinte : l'adaptateur SARIF que notre propre code se promet, la preuve Windows de « même dossier, même verdict », la signature opt-in restent devant, datés dans la ROADMAP. Et le vrai plafond n'est pas du code : personne d'autre que nous n'a encore fait tourner cette porte sur un dépôt que nous n'avons pas écrit. Un audit interne, même adversarial, ne remplace pas ça.

← Toutes les nouveautés