Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/<version>`, pushes that branch and opens its
Expand Down
21 changes: 12 additions & 9 deletions docs/nis2-compliance.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 13 additions & 0 deletions tests/test_nis2_evidence.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Loading