From bc4b0f90d4ca5143b67a68fbec7ca9cf4de01180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20ROBERT?= Date: Fri, 23 Oct 2026 08:38:30 +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 aad7c26..3c363c6 100644 --- a/CHANGELOG.fr.md +++ b/CHANGELOG.fr.md @@ -9,6 +9,37 @@ Ce dépôt est un **catalogue de contenu**, pas une bibliothèque : il n'est pas versionné et ne publie aucune release. Les entrées ci-dessous datent les modifications du catalogue, et l'unité qui compte est le lab. +## [0.2.2] - 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.1] - 2026-10-19 ### Modifié diff --git a/CHANGELOG.md b/CHANGELOG.md index 8da7fe2..96543fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,37 @@ This repository is a **content catalog**, not a library: it is not versioned and publishes no releases. The entries below date changes to the catalog, and the unit that matters is the lab. +## [0.2.2] - 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.1] - 2026-10-19 ### Changed diff --git a/pyproject.toml b/pyproject.toml index cd1f2b4..45238ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "python-dsoxlab-training" -version = "0.2.1" +version = "0.2.2" description = "Labs vérifiables de la formation Python du blog, joués avec dsoxlab" requires-python = ">=3.12" dependencies = [ diff --git a/uv.lock b/uv.lock index 20cfd30..00914d8 100644 --- a/uv.lock +++ b/uv.lock @@ -65,7 +65,7 @@ wheels = [ [[package]] name = "python-dsoxlab-training" -version = "0.2.1" +version = "0.2.2" source = { virtual = "." } dependencies = [ { name = "pytest" },