diff --git a/.gitea/workflows/checks.yml b/.gitea/workflows/checks.yml index 0d7d692..a7c3155 100644 --- a/.gitea/workflows/checks.yml +++ b/.gitea/workflows/checks.yml @@ -114,13 +114,25 @@ name: checks # "Mechanically" holds only for a reintroduced filter that still names the # PR's own base. For blind spots 1 and 3 the defence IS this comment, because # the guard lives inside the workflow that a filter makes Gitea skip. Blind -# spot 3 is the one that matters: a filter naming a branch nothing targets -# (`branches: [main]` from a template - this repo has no `main`, and no pull -# request in 99 has ever targeted `master`) is itself skipped, lands green and -# untested, and then every subsequent pull request is skipped too. That is the -# gate off for everything, silently. Closing it needs a SECOND permanently -# unfiltered workflow posting its own context, with that context added to -# `release/1.0`'s `status_check_contexts` - a forge change, with the owner. +# spot 3 is the one that matters: a filter naming a branch THIS pull request +# does not target is itself skipped, lands green and untested, and then every +# subsequent pull request matching it is skipped too. That is the gate off, +# silently. +# +# ⚠️ AND THE DANGEROUS ONE IS NOT `branches: [main]`, WHICH AT LEAST LOOKS +# WRONG. It is `branches: [release/1.0]`, which looks like tightening onto the +# protected branch and is what a careful person would write. Every day-to-day +# pull request still runs and still goes green, so nothing appears broken - +# and the only thing switched off is the `release/1.0` -> `master` release +# PR, i.e. the one whose content reaches an installed system. SEC-2 made that +# PR the mandated release path (docs/RELEASE.md), so this is now a live route +# rather than a hypothetical one. +# +# Closing it needs a SECOND permanently unfiltered workflow posting its own +# context, with that context added to the `status_check_contexts` of BOTH +# `release/1.0` AND `master` - both carry the rule since SEC-2, and adding it +# to one alone leaves the hole open on the other. A forge change, with the +# owner. # # THE MEASUREMENT, because the obvious guess is wrong and was nearly written # here as fact. A skip-ci keyword in a commit message (`[skip ci]`, `[ci skip]`,