Zum Inhalt

ADR-002: Branch Protection prüfen, bevor die Defaults geändert werden

Status: Angenommen (2026-08-01) · Issue: #387

Kontext

In .github/settings.yml deklarierte Branch Protection wird häufig nicht angewendet. Die Deklaration sieht korrekt aus, die Probot-Settings-App meldet nichts, und der Schutz fehlt. Eine Erhebung über neun Consumer am 2026-07-26 fand fünf mit Drift, in mindestens drei verschiedenen Ausprägungen.

Eine Ursache ist bestätigt. Die Commons deklarieren restrictions.apps für develop und master. GitHub akzeptiert Push-Restriktionen nur bei organisationseigenen Repositories, und nolte ist ein Nutzerkonto. Die Settings-App verwirft daraufhin die gesamte Protection-Aktualisierung, statt nur das eine nicht unterstützte Feld zu überspringen.

Diese Ursache erklärt den Rest nicht. Drei Repositories deklarieren restrictions: null und haben trotzdem gar keinen Schutz. Eines hat Schutz mit null Kontexten, obwohl es einen deklariert. Ein weiteres erhält drei seiner vier deklarierten Kontexte.

Entscheidung

Einen Check bauen, der deklarierte gegen tatsächliche Protection über das Portfolio vergleicht, und ihn nach Zeitplan laufen lassen. Erst danach anhand seiner Ergebnisse entscheiden, was sich in den Commons ändert.

Erwogene Alternativen

restrictions jetzt aus den develop-Commons entfernen. Vorerst verworfen. Es würde den Fall dieses Repositories schließen und vier ungeklärte unberührt lassen, während es aussähe, als wäre das Problem gelöst.

Jeden Consumer restrictions: null deklarieren lassen. Verworfen. Es wiederholt Boilerplate in jedem Repository, und ein Vergessen scheitert lautlos, was genau der Mechanismus hinter diesem Problem ist.

Das Portfolio in eine Organisation überführen. Zurückgestellt. Damit funktionierte restrictions.apps wie vorgesehen, aber die Folgen reichen weit über Branch Protection hinaus.

Folgen

Die prägende Eigenschaft dieser Fehlerklasse ist Unsichtbarkeit. Es gibt keinen Fehler, kein Log und keinen roten Check. Das Repository sieht konfiguriert aus und ist es nicht. Niemand merkt es, bis ein Merge durchgeht, der hätte blockiert werden müssen. Ein Vergleichs-Check adressiert diese Eigenschaft statt eines einzelnen Vorkommens.

Solange der Check fehlt, ist jede Behauptung, ein Required Check sei in diesem Portfolio aktiv, unbelegt. ADR-003 fügt einen Required Check hinzu und erbt diesen Zweifel. Seine Akzeptanzkriterien verlangen deshalb eine Prüfung über die API statt über die Einstellungsseite.

Die offene Frage, ob restrictions auf develop überhaupt etwas bringt, bleibt offen. Die Commons begründen es für master, wo die Release-Kaskade mit einem App-Token pusht. Diese Begründung überträgt sich nicht ohne Weiteres.