Files
management/verfahren/stillstandspruefung.md
T
Thore Cimbal d4004ee6f4 fix: treat an unverifiable mirror as a finding, and repair auth headers
game-operating was made private on Gitea, and the check quietly skipped the mirror comparison. A repo that IS mirrored but whose far side cannot be read is unverified, and unverified must not look like fine. It is now a finding that names the missing GITEA_TOKEN.

While testing that, a second bug surfaced: the header helper built 'Authorization: token: <value>' from a name that already contained the schema, producing a silently invalid header. The Authentik check had the same defect and would have failed the moment a token was added - it never ran, so nobody would have connected the two.

Refs axion1337.chat/management#28, #31
2026-08-09 12:00:00 +00:00

3.2 KiB

Stillstandsprüfung

Sucht Dinge, die leise aufgehört haben zu funktionieren. Beschlossen in der Retro 2026-08-09.

Warum es sie gibt

In neun Augusttagen sind sechs Fehler aufgefallen, die alle dasselbe Merkmal hatten: Sie sahen erfolgreich aus, ohne es zu sein — eine grüne Pipeline, die nie ein Artefakt hochlud; ein veröffentlichtes npm-Paket ohne Inhalt; ein Blueprint, der bei jedem Lauf verworfen wurde, während Flux grün meldete.

Keiner davon wurde durch eine Überwachung gefunden. Vier durch Zufall beim Suchen nach etwas anderem. Genau diese Lücke schließt das Skript.

Was geprüft wird

Jede Prüfung bildet einen real passierten Fall ab. Nichts steht hier auf Vorrat.

Prüfung Der Fall dahinter
Repo ohne aktiven Push-Mirror game-operating wurde angelegt und nie gespiegelt — auf Gitea existierte es nicht
Mirror-Drift MIRROR-01 (management#28): fällt der Mirror aus, liefert Flux still den letzten Stand weiter
Pipeline mit null Jobs ThreadNet-Web 203/204, threadnet-call 187 — rot, ohne dass etwas kaputt war
Erfolgreicher Job ohne Artefakt build_embedded lief seit jeher grün und lud nichts hoch
npm-Paket zu klein 0.19.2-threadnet.6: 12,5 KB statt 12,8 MB, ohne dist/
Authentik-Blueprint ≠ successful matrix-recovery-flow wurde tagelang bei jedem Lauf verworfen

Die Projektliste wird zur Laufzeit aus der Gruppe gelesen, nicht im Code gepflegt — eine Liste im Quelltext wäre genau die Stelle, an der ein neues Repo jahrelang durchrutscht. (Beim ersten Lauf kamen so zwei Projekte zum Vorschein, die niemand auf dem Schirm hatte.)

Wie sie läuft

Geplanter CI-Job im management-Repo, zusätzlich von Hand über Run pipeline auslösbar. Befunde färben die Pipeline rot — das ist bei uns die Alarmanlage, nicht ein zusätzlicher Meldeweg (siehe gitops/CLAUDE.md zur TURN-Rotation).

Lokal:

export GITLAB_TOKEN=$(cat ~/.config/gitlab-lab/token)
export GITEA_TOKEN=$(cat ~/.config/gitea-rohana/push-token)   # fuer private Spiegel
export LAB_CA=.../ci/lab-ca-chain.crt
python3 scripts/stillstandspruefung.py

Zwei Regeln für diese Prüfung

Ein „kann nicht geprüft werden" ist ein Befund, kein Übersprungen. Real aufgefallen am 2026-08-09: game-operating wurde auf Gitea privat gestellt, und die Prüfung übersprang den Mirror-Abgleich klaglos. Ein Repo, das gespiegelt wird, dessen Gegenseite aber unlesbar ist, ist ungeprüft — und das darf nicht wie „in Ordnung" aussehen.

Ein Befund wird zum Issue, nicht weggeklickt. Sonst wird die Prüfung zu dem, was sie sucht: etwas, das läuft, ohne dass jemand hinsieht.

⚠️ Fehlt ein Zugang, bricht sie ab — sie überspringt sich nicht still. Eine Prüfung, die sich bei fehlendem Token selbst deaktiviert, ist wertlos: Sie meldet dann jahrelang nichts, und niemand merkt den Unterschied zu „alles in Ordnung". Ausnahme sind die klar benannten optionalen Teile (Authentik), die ihr Fehlen im Ergebnis ausweisen.

Erweitern

Neue Prüfungen kommen dazu, wenn wieder etwas still ausgefallen ist — mit einem Docstring, der den konkreten Fall nennt. Prüfungen auf Verdacht erzeugen Rauschen und kosten die Glaubwürdigkeit, die diese hier braucht.