Deux groupes par ecosysteme, et un garde-fou qui avait perdu sa marge - #22
Merged
Merged
Conversation
Le groupement etait `patterns: ["*"]` par ecosysteme, donc une seule demande par
mois et par ecosysteme. La premiere demande npm qui en est sortie portait six
montees, dont TypeScript 7 -- que svelte-check refuse encore, il declare
`peer typescript@"^5.0.0 || ^6.0.0"`. npm ci echouait AVANT le premier test :
npm error ERESOLVE
Found: typescript@7.0.2
peer typescript@"^5.0.0 || ^6.0.0" from svelte-check@4.7.4
Cinq montees parfaitement saines -- @types/node, svelte-check, jsdom et deux
autres -- etaient donc retenues par la sixieme, sans autre issue que de fermer la
demande entiere et de tout perdre. C'est le defaut du groupement, pas celui de la
demande.
Majeures et mineures voyagent desormais separement, dans les trois ecosystemes.
Les mineures deviennent independantes : elles passent seules, et une majeure qui
casse attend dans son propre lot aussi longtemps qu'il faut sans rien bloquer.
Le cout est une demande de plus par ecosysteme et par mois. C'est peu au regard de
ce qu'on achete : la difference entre une montee qu'on relit et une montee qu'on
subit. La cadence mensuelle et le groupement restent, pour la raison ecrite en
tete du fichier -- une cooperative sans mainteneur a temps plein cesse de regarder
un depot qui ouvre une demande par dependance et par semaine.
C'est sur le front que la separation compte le plus, et le commentaire le dit :
les dependances y sont epinglees a la version EXACTE (§14.1), donc chacune de
leurs majeures est une rupture potentielle de peer dependency.
… runner
hang valait 5 s, et son commentaire promettait « it never elapses in a passing
run : it is a guard, not a delay ». La CI a dementi la promesse :
--- FAIL: TestAnAmputatedCatalogIsRefusedAgainstTheRealGuard (5.54s)
failures_catalog_test.go:1619: la grille n'a jamais compte 331 tuiles
L'echec est tombe sur une demande qui ne change QUE deux empreintes d'actions dans
deux fichiers YAML. Il ne pouvait donc pas venir du code teste, et c'est ce qui
permet de le nommer sans hesiter : ce n'est pas une regression, c'est le budget.
Ce n'est pas non plus une course entre goroutines, et la premiere piste ecrite
dans SUIVI.md -- la famille skipUnderShort que ci.yml documente -- etait fausse.
MESURE sur ce test, le plus lourd du paquet parce qu'il decode les 181 images du
flv.csv REEL deux fois :
isole, sans -race 0,52 s (cinq executions, stable)
isole, sous -race 1,07 s
budget 5 s
observe en CI 5,54 s
L'ecart vient du runner. `go test ./...` joue les paquets EN PARALLELE, si bien
qu'internal/web et cmd/openscale -- 25 s et 21 s a eux seuls -- concourent avec
celui-ci sur quatre vCPU, sous le detecteur de courses. Une seconde de travail en
devient cinq, et un garde-fou qui n'avait qu'un facteur cinq de marge n'en a plus.
Trente secondes, et le choix ne coute RIEN sur une execution verte : awaitCondition
rend la main des que sa condition tient, donc aucun test qui passe ne ralentit
d'une microseconde. Ce qu'on paye, c'est trente secondes au lieu de cinq pour
declarer un vrai blocage, une fois, sur une execution qui echoue deja. C'est
exactement l'arbitrage que le commentaire revendiquait, et que la valeur 5 ne
tenait pas.
Les mesures sont ecrites a cote de la constante et non ici : la prochaine personne
tentee de la redescendre a « une valeur ronde » les trouvera sur place.
…ee etait fausse L'entree de la passe de securite laissait une observation ouverte : une execution de la suite sur douze signalait un echec dans un paquet, jamais reproduit, et la commande de comptage n'en avait pas garde le nom. Elle renvoyait vers la famille de tests sensibles au planificateur que ci.yml documente, skipUnderShort. Ce n'etait pas ca, et une piste fausse laissee dans le suivi coute plus qu'une observation sans piste : elle envoie chercher au mauvais endroit. Le test est nomme, la cause est mesuree, et le correctif est dans le commit precedent. Le suivi porte desormais les quatre chiffres qui la montrent -- 0,52 s isole, 1,07 s sous -race, 5 s de budget, 5,54 s observe -- et l'explication de l'ecart : les paquets tournent en parallele, donc les trois plus lourds concourent sur quatre vCPU sous le detecteur de courses. L'entree dit aussi ce que le groupement de dependabot.yml a coute, pour la meme raison qu'on ecrit les echecs plutot que de les corriger en silence : la prochaine personne tentee de regrouper tout en une demande y trouvera pourquoi cela avait ete essaye, et ce que cela a bloque. Rien d'autre ne change : ni un compteur, ni un chiffre de la passe de securite.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Suite des trois demandes Dependabot. Deux étaient bonnes et sont fusionnées (#19, #20) ; la troisième était ininstallable et a été fermée (#21). Cette branche corrige la cause de la troisième, et referme au passage l'observation que la passe de sécurité avait laissée ouverte.
ci(deps)— une majeure incompatible retenait cinq montées sainesMon
dependabot.ymlgroupait tout enpatterns: ["*"]par écosystème. La première demande npm portait six montées, dont TypeScript 7 — quesvelte-checkrefuse encore :npm ciéchouait avant le premier test, et cinq montées parfaitement saines (@types/node,svelte-check,jsdom…) étaient retenues par la sixième, sans autre issue que de tout fermer.Majeures et mineures voyagent désormais séparément, dans les trois écosystèmes. Coût : une demande de plus par écosystème et par mois. La cadence mensuelle et le groupement restent — une coopérative sans mainteneur à temps plein cesse de regarder un dépôt qui ouvre une demande par dépendance et par semaine.
test(station)— le garde-fou anti-blocage n'avait plus de margehangvalait 5 s et son commentaire promettait « it never elapses in a passing run : it is a guard, not a delay ». La CI a démenti la promesse, sur la demande qui ne changeait que deux empreintes d'actions dans deux fichiers YAML — donc sur un diff qui ne pouvait pas causer un échec de test Go :Ce n'est pas une course entre goroutines. Mesuré sur ce test, le plus lourd du paquet parce qu'il décode les 181 images du
flv.csvréel deux fois :-race-racehangL'écart vient du runner :
go test ./...joue les paquets en parallèle, doncinternal/webetcmd/openscale— 25 s et 21 s à eux seuls — concourent avec celui-ci sur quatre vCPU sous le détecteur de courses. Une seconde de travail en devient cinq, et un garde-fou avec un facteur cinq de marge n'en a plus.hangpasse à 30 s. Le changement ne coûte rien sur une exécution verte :awaitConditionrend la main dès que sa condition tient, aucun test qui passe ne ralentit d'une microseconde. Il coûte trente secondes au lieu de cinq pour déclarer un vrai blocage, une fois, sur une exécution qui échoue déjà — l'arbitrage exact que le commentaire revendiquait.Les mesures sont écrites à côté de la constante, pour que la prochaine personne tentée de la redescendre à une valeur ronde les trouve sur place.
docs— et la piste que j'avais donnée était fausseSUIVI.mdrenvoyait vers la familleskipUnderShortqueci.ymldocumente. Ce n'était pas ça. Une piste fausse laissée dans le suivi coûte plus qu'une observation sans piste : elle envoie chercher au mauvais endroit. L'entrée porte maintenant le nom du test, les quatre chiffres, et ce que le groupement dedependabot.ymla coûté.Vérification