diff --git a/CHANGELOG.md b/CHANGELOG.md index 764873f..ee462f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,6 +96,10 @@ what has already shipped, and for nothing else. See `RELEASING.md`. ### Changed +- **The NIS2 document describes the branch rules as they are since 2026-10-12.** The ruleset on + main lost the owner's bypass and requires a pull request for every change, the version bump + included; the document said the maintainer could bypass the rules, that no rule required a pull request and that release commits went straight to main. A test holds the new + wording and refuses the old. - **The release goes through a pull request.** main now takes pull requests only, the owner included, after a cloud session pushed straight to it with the owner's account. `bump_version.py` commits the bump on `release/`, pushes that branch and opens its diff --git a/docs/nis2-compliance.md b/docs/nis2-compliance.md index 8b7a532..7e524c2 100644 --- a/docs/nis2-compliance.md +++ b/docs/nis2-compliance.md @@ -232,17 +232,20 @@ dipendenze (nessun avviso registrato a quella data) e gli aggiornamenti di sicur automatici di Dependabot; `.github/dependabot.yml` chiede ogni settimana gli aggiornamenti delle dipendenze Python, delle GitHub Actions e dell'immagine di base. -Le regole del ramo `main`, lette dalle impostazioni del repository il 2026-10-11 -(ruleset "main protection", attivo), vietano la cancellazione del ramo e la riscrittura -della storia e richiedono due controlli superati: Tests e Quality. Non c'è una regola -che imponga la pull request, né una che imponga una storia lineare, e l'account -`maksimtech` del manutentore può scavalcare le regole. CodeQL, Security Posture e gli -altri strumenti della tabella girano su ogni pull request ma non sono tra i controlli -obbligatori. +Le regole del ramo `main`, lette dalle impostazioni del repository il 2026-10-12 +(ruleset "main protection", attivo), impongono che ogni modifica passi da una pull +request, senza approvazioni richieste, e che superi due controlli: Tests e Quality; +vietano la cancellazione del ramo e la riscrittura della storia. Non impongono una +storia lineare. Non prevedono eccezioni, nemmeno per l'account del manutentore: anche +il commit che aggiorna il numero di versione arriva su `main` attraverso una pull +request. Fino a quel giorno non c'era una regola che imponesse la pull request, e +l'account `maksimtech` del manutentore poteva scavalcare le altre. CodeQL, Security +Posture e gli altri strumenti della tabella girano su ogni pull request ma non sono +tra i controlli obbligatori. PatchRadar ha un manutentore unico. Non c'è nessuna revisione obbligatoria da parte di -una seconda persona: le modifiche vengono unite dal manutentore dopo che la CI è verde, -e i commit di release vanno direttamente su `main`. È un limite noto di un progetto con +una seconda persona: le modifiche vengono unite dal manutentore dopo che la CI è verde. +È un limite noto di un progetto con una sola persona. ## 6. Qualcuno dall'esterno ha provato a entrare diff --git a/tests/test_nis2_evidence.py b/tests/test_nis2_evidence.py index 98ba66b..dccd20d 100644 --- a/tests/test_nis2_evidence.py +++ b/tests/test_nis2_evidence.py @@ -728,3 +728,16 @@ def test_vuldb_is_declared_as_contacted_only_with_its_key(doc): request = source.index("await client.post(") assert refuse < request assert "solo se `VULDB_API_KEY` è impostata" in prose(doc) + + +def test_the_branch_rules_are_described_without_an_exception(doc): + """On 2026-10-12 the ruleset on main lost the owner's bypass and requires a pull + request for every change, the version bump included (release.sh opens one). The + document says so with the date it was read, and keeps the earlier state as past.""" + text = prose(doc) + assert "lette dalle impostazioni del repository il 2026-10-12" in text + assert "Non prevedono eccezioni, nemmeno per l'account del manutentore" in text + for stale in ("è configurato per poter scavalcare", "può scavalcare queste regole", + "può scavalcare le regole", "vanno direttamente su `main`", + "Non c'è una regola che imponga la pull request"): + assert stale not in text, stale