From 86103b65ab598a9e12f49d831bec6424fd3b6bd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20ROBERT?= Date: Fri, 23 Oct 2026 08:36:34 +0200 Subject: [PATCH] chore(release): l'entree de CHANGELOG du garde-fou des verdicts Le hook `verdicts-et-commun-separes` et le retrait du controle Plumber mort sont entres sans entree de CHANGELOG ni bump. La convention de ce depot ne le permet pas : ce commit le solde, dans les deux langues, et prepare le tag. --- CHANGELOG.fr.md | 31 +++++++++++++++++++++++++++++++ CHANGELOG.md | 31 +++++++++++++++++++++++++++++++ pyproject.toml | 2 +- uv.lock | 2 +- 4 files changed, 64 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.fr.md b/CHANGELOG.fr.md index 5416e24..7ee180c 100644 --- a/CHANGELOG.fr.md +++ b/CHANGELOG.fr.md @@ -21,6 +21,37 @@ ne recule pas, et 0.2.0 sous v1.2.0 aurait menti sur l'ordre des choses. --- +## [0.2.3] - 2026-10-23 + +### Ajouté + +- Un verdict ne peut plus être commité avec ce qu'il mesure. Le hook + `verdicts-et-commun-separes` refuse un commit portant `validation-labs.json` + à côté de ce que le cycle joue : `challenge/tests/`, `setup.yaml`, + `cleanup.yaml`, `lab.yaml` d'un lab, et l'outillage partagé. Il est lui-même + éprouvé, dans les deux sens, par un hook à lui. + + Cela ferme un cas **qu'aucune mesure ne rattrape après coup**. La péremption + d'un verdict se jugeait en comparant des DATES, et cette comparaison s'est + trompée dans les deux sens le 2026-10-22 : une correction commitée avec les + verdicts qu'elle périmait est passée pour saine, et des labs réattestés sur + une branche sont ressortis « à réattester » après leur fusion en squash, + contenu inchangé. Quand une pull request squashée retouche un test *après* sa + campagne, le commit unique porte les deux et le squash a détruit ce qui les + distinguait. Cela ne se constate pas, donc cela s'empêche. + + L'énoncé reste autorisé à côté d'un relevé : il n'est pas joué par le cycle, + et l'interdire obligerait à une campagne pour une coquille. + +### Corrigé + +- `pipelineMustNotLeakSecretsInConfig` est retiré du `.plumber.yaml`, où il + était déclaré deux fois. Plumber a supprimé ce contrôle et répond « was + removed and is now ignored: secret detection is no longer part of Plumber; + remove this block ». Le garder laissait croire que la détection de secrets + était couverte ici. Elle ne l'est pas, et c'est `detect-private-key` qui s'en + approche, en hook. + ## [0.2.2] - 2026-10-19 ### Sécurité diff --git a/CHANGELOG.md b/CHANGELOG.md index 1aba995..8081593 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,37 @@ backwards, and 0.2.0 under v1.2.0 would have lied about the order of things. --- +## [0.2.3] - 2026-10-23 + +### Added + +- A verdict can no longer be committed together with what it measures. The + `verdicts-et-commun-separes` hook refuses a commit carrying + `validation-labs.json` alongside anything the cycle plays: + `challenge/tests/`, `setup.yaml`, `cleanup.yaml`, `lab.yaml` of any lab, and + the shared tooling. It is itself tested, in both directions, by a hook of its + own. + + This closes a case **no measurement can catch afterwards**. The staleness of + a verdict used to be judged by comparing DATES, and that comparison was wrong + in both directions on 2026-10-22: a correction committed together with the + verdicts it invalidated passed as healthy, and labs re-attested on a branch + came back "to be re-attested" after their squash merge, their content + unchanged. When a squashed pull request touches a test *after* its campaign, + the single commit carries both and the squash has destroyed what told them + apart. It cannot be observed, so it is prevented. + + The statement stays allowed next to a verdict: it is not played by the cycle, + and forbidding it would demand a campaign for a typo. + +### Fixed + +- `pipelineMustNotLeakSecretsInConfig` is removed from `.plumber.yaml`, where + it was declared twice. Plumber dropped that control and answers "was removed + and is now ignored: secret detection is no longer part of Plumber; remove + this block". Keeping it suggested that secret detection was covered here. It + is not, and `detect-private-key` is what comes closest, as a hook. + ## [0.2.2] - 2026-10-19 ### Security diff --git a/pyproject.toml b/pyproject.toml index e5f4ed7..ede129d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "github-actions-training" -version = "0.2.2" +version = "0.2.3" description = "Labs vérifiables de la formation GitHub Actions du blog, joués avec act" requires-python = ">=3.12" dependencies = [ diff --git a/uv.lock b/uv.lock index c8ecbcf..88d05bb 100644 --- a/uv.lock +++ b/uv.lock @@ -13,7 +13,7 @@ wheels = [ [[package]] name = "github-actions-training" -version = "0.2.2" +version = "0.2.3" source = { virtual = "." } dependencies = [ { name = "pytest" },