conformite.test.ts ne fournit aucun contexte au harnais : depuis 0.12.0, l'étage d'intégration d'un clone neuf est rouge sur 27 règles jamais jouées #32
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce qui ne va pas
apps/api/test/integration/conformite.test.tsappellerunConformance(demarreur)sans second argument. Le harnais fabrique donc ce qu'il peut depuis
l'application démarrée (
contexteDe), et tout le reste —boot,envValide,collecteur,routeValidation,routeCrash,rolesYaml,connexion,creerCleHorsDroits, les troisjetons,root/globsTests,check— n'arrivejamais.
Tant que
testing.regle-jamais-joueeétait cassé (eqs-platform #73), ça ne sevoyait pas : le cas était rouge pour une autre raison. Le correctif de 0.12.0
l'a réparé, et il rend maintenant le vrai chiffre.
Reproduction
Un clone du gabarit,
@eqs/*en 0.12.0, Docker levé :Sortie (mesurée le 2026-09-17 sur un satellite
nestmonté sur ce gabarit,fichier de conformité non modifié) :
Le nouveau seau « sans objet » fonctionne (les 6 règles
httpdumutatorsortent du compte, comme prévu par D-046) : ce qui reste est bien du câblage
manquant, pas un défaut de comptabilité.
Ce que ça coûte
Bloquant, et pour tout le monde en même temps. La CI du gabarit et celle de
chaque satellite lancent
integration(.forgejo/workflows/ci.yml), donctrente dépôts passent au rouge le jour où ils montent en 0.12.0 — sur un cas
qu'aucun d'eux n'a écrit et qu'aucun d'eux ne sait remplir seul.
Le message du socle est juste : « Fournir au harnais ce qui leur manque, ou dire
par une dispense datée pourquoi ce dépôt ne peut pas les jouer. » C'est
exactement ce qu'il faut faire. Mais ce n'est pas au trentième satellite de le
découvrir : c'est un dispositif de test, et le gabarit est censé le livrer
debout. C'est le même raisonnement que #30 et que
testing.etage-declare-vide— un étage qui ne peut pas être vert n'est paslivré.
Et il y a une partie que le satellite ne peut vraiment pas trancher seul :
errors.500-sans-piledemande une route qui lève une exception non gérée,errors.validationune route POST qui valide un corps. Une route de crashdélibérée dans du code déployé est une décision, pas un détail de test — elle a
sa place dans le gabarit, décidée une fois, pas réinventée trente fois avec
trente formes différentes.
Ce que je proposerais
Câbler dans le gabarit ce que le gabarit possède déjà, et dispenser le reste
avec la raison :
errors.validationpingavec un DTO validé — le gabarit a déjàValidationPipeerrors.500-sans-pile@Public(), montée uniquement quandNODE_ENV === 'test'— ou assumée et documentéeconfig.refus-sans-requise,incoherence-bloquante,secret-par-defautboot+envValide: lancerdist/main.jsavec un environnement et lire son code de sortie. Le message du socle le décrit précisémenttelemetrydemarrerCollecteur()de@eqs/telemetry/testing, livré exprès pour ça en 0.10.0, plusrootetrouteJournaltesting.check-budget,fichier-orphelincheck: { ms, budgetMs }etroot/globsTests— lus depuis.eqs/check.jsonetvitest.configauth.roles-yaml,scope-borne,cookie, lesjetonsroles.yamlexiste déjà ;creerCleHorsDroitspeut réutiliserapps/api/scripts/creer-cle.mjstesting.base-detruiteconteneursou une dispenseSi tout n'est pas faisable d'un coup, la moitié utile serait déjà :
livrer le câblage que le socle a explicitement préparé (le collecteur,
boot/envValide,root/globsTests,check) et poser danseqs-baseline.jsonune dispensedatée nommant les règles qui restent, avec la raison. Un satellite verrait
alors un étage vert et une liste écrite de ce qui manque encore — au lieu d'un
rouge sans mode d'emploi.
Versions
@eqs/*0.12.0,eqs --version0.12.0, gabarit228f8e4, profilnest,Node 24.15.0, pnpm 11.8.0, Windows 11, Docker 29.1.3.
Contournement posé
Aucun. L'étage reste rouge sur ce seul cas dans notre satellite ; les 280 autres
tests passent,
pnpm check,eqs doctor,eqs auditetpnpm test:e2esontverts. Rien n'est désactivé : il n'y aura rien à retirer.