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:
co-authored by
Claude Opus 5
parent
9915b979a6
commit
61b0540525
@@ -26,6 +26,12 @@ import subprocess
|
||||
import sys
|
||||
import urllib.parse
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
|
||||
import quittungen
|
||||
|
||||
# Repo-Wurzel: das Skript liegt in scripts/, die Quittungsliste daneben.
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
|
||||
GITLAB = "https://git.lab/api/v4"
|
||||
GITEA = "https://rohana.axion1337.de/api/v1"
|
||||
@@ -235,13 +241,20 @@ def main():
|
||||
for u in uebersprungen:
|
||||
print(f" - {u}")
|
||||
print()
|
||||
if befunde:
|
||||
print(f"BEFUNDE ({len(befunde)}):")
|
||||
for b in befunde:
|
||||
|
||||
# Bekanntes quittieren (#0104): Rot bleibt dem Neuen vorbehalten, sonst
|
||||
# verliert die Alarmanlage ihre Aussage. Quittiertes verschwindet nicht,
|
||||
# es zaehlt nur nicht mehr gegen die Pipeline.
|
||||
offen, quittiert, meldungen = quittungen.anwenden(befunde, ROOT, "stillstand")
|
||||
quittungen.ausgeben(quittiert, meldungen)
|
||||
|
||||
if offen:
|
||||
print(f"BEFUNDE ({len(offen)}):")
|
||||
for b in offen:
|
||||
print(f" ! {b}")
|
||||
print("\nJeder Befund gehoert als Issue erfasst, nicht weggeklickt.")
|
||||
return 1
|
||||
print("Keine Befunde.")
|
||||
print("Keine offenen Befunde.")
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user