Repository navigation
chore(garde-fous): le verdict séparé de ce qu'il mesure, et un contrôle mort retiré - #16
Merged
Merged
Conversation
…le mort retire Deux corrections venues des catalogues Bases de donnees et GitLab CI, ou elles ont ete trouvees et eprouvees le 2026-10-22. UN VERDICT NE SE COMMITE PAS AVEC CE QU'IL MESURE La peremption d'un verdict se jugeait en comparant des DATES : un lab etait « a reattester » des qu'un commit posterieur touchait ses fichiers. Cette comparaison repond a une autre question que celle qu'on pose, et elle s'est trompee dans les DEUX SENS le meme jour. Faux negatif, le sens dangereux : une correction du code partage et les verdicts qu'elle rendait caducs ont ete commites ENSEMBLE. Aucun verdict n'etait posterieur a quoi que ce soit, le controle a conclu que tout allait bien, et vingt et un verdicts VALIDE ne valaient plus rien. Faux positif : des labs reattestes sur une branche sont ressortis « a reattester » apres leur fusion, parce que le SQUASH ecrase la branche en un commit date de la fusion. Contenu inchange. Systematique, dans tout depot qui fusionne ainsi. Le controle qui fait foi compare desormais deux arbres git cote site, ce qui ne depend plus de la facon de fusionner. Mais un cas echappe a toute mesure a posteriori : une pull request squashee qui retouche un test APRES sa campagne. Le commit unique porte les deux et le squash a detruit ce qui les distinguait. Ni une date, ni un diff entre deux arbres, ni une empreinte inscrite ensuite ne peuvent dire lequel est venu avant. Il ne se constate donc pas, il s'empeche. Le hook refuse un commit portant `validation-labs.json` a cote de ce que le cycle joue : `challenge/tests/`, `setup.yaml`, `cleanup.yaml`, `lab.yaml` d'un lab, et l'outillage partage. L'enonce reste autorise, il n'est pas joue par le cycle et l'interdire obligerait a une campagne pour une coquille. Quatorze tests l'accompagnent, les deux sens couverts, et il a ete eprouve en le forcant a tout refuser : les cas legitimes tombent alors, ce qui est bien ce qu'on veut lire. UN CONTROLE PLUMBER QUI NE CONTROLE PLUS RIEN `pipelineMustNotLeakSecretsInConfig` a ete RETIRE de Plumber, qui repond desormais « was removed and is now ignored: secret detection is no longer part of Plumber; remove this block ». Il etait declare DEUX fois ici, dans les sections gitlab et github. Le garder, c'etait laisser croire que la detection de secrets est couverte. Elle ne l'est pas, et c'est `detect-private-key` qui s'en approche, en hook.
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.
Deux corrections venues des catalogues Bases de données et GitLab CI, où elles ont été trouvées et éprouvées le 2026-10-22. Elles sont posées à l'identique dans tous les catalogues.
1. Un verdict ne se commite pas avec ce qu'il mesure
La péremption d'un verdict se jugeait en comparant des dates : un lab était « à réattester » dès qu'un commit postérieur touchait ses fichiers. Cette comparaison répond à une autre question que celle qu'on pose, et elle s'est trompée dans les deux sens le même jour.
Faux négatif, le sens dangereux. Une correction du code partagé et les verdicts qu'elle rendait caducs ont été commités ensemble. Aucun verdict n'était postérieur à quoi que ce soit, le contrôle a conclu que tout allait bien, et vingt et un verdicts VALIDE ne valaient plus rien.
Faux positif. Des labs réattestés sur une branche sont ressortis « à réattester » après leur fusion, parce que le squash écrase la branche en un commit daté de la fusion. Contenu inchangé. Systématique dans tout dépôt qui fusionne ainsi.
Le contrôle qui fait foi compare désormais deux arbres git côté site, ce qui ne dépend plus de la façon de fusionner. Mais un cas échappe à toute mesure a posteriori : une pull request squashée qui retouche un test après sa campagne. Le commit unique porte les deux et le squash a détruit ce qui les distinguait — ni une date, ni un diff entre deux arbres, ni une empreinte inscrite ensuite ne peuvent dire lequel est venu avant.
Il ne se constate donc pas, il s'empêche. Le hook refuse un commit portant
validation-labs.jsonà côté de ce que le cycle joue :challenge/tests/,setup.yaml,cleanup.yaml,lab.yamld'un lab, et l'outillage partagé. L'énoncé reste autorisé : il n'est pas joué par le cycle, et l'interdire obligerait à une campagne pour une coquille d'orthographe.2. Un contrôle Plumber qui ne contrôle plus rien
pipelineMustNotLeakSecretsInConfiga été retiré de Plumber, qui répond désormais « was removed and is now ignored: secret detection is no longer part of Plumber; remove this block ». Il était déclaré deux fois, dans les sectionsgitlabetgithub. Le garder laissait croire que la détection de secrets est couverte ici. Elle ne l'est pas, et c'estdetect-private-keyqui s'en approche, en hook.Contrôles joués
lab.yaml) et ce qu'il doit laisser passer (chacun seul, relevé + énoncé, rien du tout)..plumber.yamlet.pre-commit-config.yamlrechargés après modification : les deux se parsent, et le hook n'est déclaré qu'une fois.validation-labs.jsonest inchangé et les verdicts restent valides.