feat(pruefungen): acknowledge known findings so red means something again (#0104)

All three scheduled checks were permanently red, which is how a nine-day outage of
the canonize job went unnoticed: one more red cross among red crosses is invisible.
A check that can only ever be red cannot report anything.

An acknowledgement takes a known finding out of the red verdict without hiding it -
it still prints, with its reason and its deadline. Red is reserved for what is not
acknowledged, which is to say: for the new.

Three rules keep the list from becoming the next blind spot, which is the obvious
objection to this whole idea:

- Every entry needs a deadline. Once it passes, the entry stops acknowledging and
  says so, so the finding counts again.
- "Permanent" is only expressible as an ADR reference. A permanent exception
  without a decision record is already an error per AGENTS.md; here it cannot even
  be written down.
- An entry that matches nothing reports itself, so the file cannot quietly
  accumulate lines for problems that no longer exist.

Four entries to start: notfallhandbuch (ADR-0016, deliberately unmirrored),
threadnet-wiki (ADR-0015, the wiki mirrors the other way round), gameserver (sorb:
not part of ThreadNet - dated, so the ADR-or-move decision does not drift), and the
zero-job pipeline artifact.

Verified rather than argued, including the counter-proofs #0104 asks for: today
four are acknowledged and one real finding stays red; adding a fresh finding still
turns it red; and with the clock moved past the deadlines the dated entries stop
acknowledging and report themselves. The scope column was added after the first run
showed each check reporting the other's entries as ineffective.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Thore Cimbal
2026-08-18 12:00:00 +00:00
co-authored by Claude Opus 5
parent 9915b979a6
commit 61b0540525
5 changed files with 167 additions and 8 deletions
+20
View File
@@ -0,0 +1,20 @@
# Quittierte Befunde — bekannt, faerben nicht rot (#0104).
#
# Format: pruefung <TAB> muster <TAB> gueltig_bis <TAB> grund
# pruefung Geltungsbereich: stillstand | gruppe
# muster Teilzeichenkette des Befundtextes (keine Regex)
# gueltig_bis Datum JJJJ-MM-TT, oder ADR-00NN fuer dauerhaft
# grund warum das hier steht — vollstaendiger Satz, kein Stichwort
#
# Dauerhaft geht NUR mit ADR-Verweis. Alles andere braucht eine Frist; laeuft sie
# ab, faerbt der Befund wieder rot. Eine Quittung, auf die nichts mehr passt,
# meldet sich selbst. Details im Kopf von scripts/quittungen.py.
#
# Vor dem Eintragen die Frage beantworten: Ist das wirklich bekannt und
# entschieden — oder faellt es mir nur gerade lastig? Im zweiten Fall gehoert es
# nicht hierher.
stillstand notfallhandbuch: kein aktiver Push-Mirror ADR-0016 Das Notfallhandbuch wird bewusst nicht gespiegelt: es beschreibt Ablageort der Sicherungen und Fundort der Schluessel und waere auf dem oeffentlich erreichbaren Gitea die Landkarte fuer einen Angreifer. Vertraulichkeit vor Verfuegbarkeit; die Verfuegbarkeit deckt ein lokaler Clone ab.
stillstand threadnet-wiki: kein aktiver Push-Mirror ADR-0015 Beim Wiki laeuft die Spiegelung umgekehrt: Wiki.js schreibt aus dem Cluster nach Gitea, der CI-Job canonize_wiki holt es nach git.lab. Ein Push-Mirror git.lab->Gitea waere hier falsch herum und wuerde die Wiki-Inhalte ueberschreiben.
stillstand gameserver: kein aktiver Push-Mirror 2026-09-30 sorb 2026-08-18: der gameserver ist nicht Teil von ThreadNet, die Spiegel-Topologie aus ADR-0001 gilt fuer ihn nicht. Bis zur Frist ist zu entscheiden, ob das als ADR festgehalten wird oder das Projekt die Gruppe verlaesst — siehe #0032. Danach faerbt der Befund wieder rot.
stillstand ThreadNet-Web: Pipeline 424 (main) ist rot, hat aber NULL Jobs 2026-10-31 Artefakt der workflow-Regeln: ein Commit, der keinen Pfad aus .pfade_mit_pipeline beruehrt, erzeugt eine Pipeline ohne Jobs, die GitLab als rot fuehrt. Das Skript benennt es selbst als "kein Fehler". Bis zur Frist klaeren, ob die Regel so bleiben soll.
Can't render this file because it contains an unexpected character in line 20 and column 271.