FRAMEWORK-BEFUNDE.md: wo das Verfahren nicht getragen hat

Auf Wunsch von sorb: eine Eingangsliste fuer die Framework-Ernte, damit
wiederkehrende Fehlerklassen in der naechsten neckbeard-Iteration nicht erneut
passieren muessen. Je Befund kurze Beschreibung, Ursachen-Einschaetzung, Belege
und ein Vorschlag.

Name bewusst FRAMEWORK-BEFUNDE statt 'Framework Defects': 'Befund' ist im Projekt
der feststehende Begriff (gruppenpruefung meldet Befunde, quittungen quittiert
sie, AGENTS.md: 'Jeder Befund gehoert als Issue erfasst'). 'Defect' waere zudem
zu eng - das Uebergehen der AAR-Pflicht ist kein Defekt DES Frameworks, sondern
eine Abweichung, die eine Luecke darin sichtbar macht. Umbenennen ist ein git mv.

Sieben Erstbefunde, alle aus dieser Sitzung belegt:
FB-01 AAR-Pflicht setzt sich ohne Werkzeug nicht durch
FB-02 'meldet Erfolg, ist aber blind' - sieben Vorkommen, fuenf Werkzeuge
FB-03 Pruefungen erzeugen Befunde, die niemand beheben kann
FB-04 Issues behaupten Zustaende, die laengst ueberholt sind
FB-05 Dashboards und Pruefungen ohne Datenbeleg
FB-06 Dokumente werden ergaenzt, aber nicht revidiert
FB-07 Werkzeuge messen unbemerkt die falsche Instanz

Verlinkt in README (Struktur) und roadmap (Kadenz, bei der Retro) - eine Datei,
die niemand findet, waere selbst ein Befund der Klasse FB-06.

⚠️ validate.py prueft nur unterhalb von docs/. Diese Datei ist damit NICHT
schema-geprueft - bei einer Liste ueber fehlende Durchsetzung ist das eine
Ironie, die im Refinement einen Blick wert ist.
This commit is contained in:
Thore Cimbal
2026-08-20 12:00:00 +00:00
parent 9925f279fd
commit 21797a005a
3 changed files with 181 additions and 0 deletions
+177
View File
@@ -0,0 +1,177 @@
# Framework-Befunde
> **Wofür diese Datei da ist:** Stellen, an denen das Verfahren nicht getragen hat —
> weil ihm etwas fehlt, weil niemand widersprochen hat, oder weil derselbe Fehler
> wiederkam. Sie ist die Eingangsliste für die **Framework-Ernte**: Was hier steht,
> soll in der nächsten neckbeard-Iteration nicht erneut passieren müssen.
>
> **Was hierher gehört:** wiederkehrende Fehlerklassen, Abweichungen vom Verfahren,
> Regeln, die sich ohne Werkzeug nicht durchsetzen, und Prüfungen, die etwas melden,
> das niemand beheben kann.
>
> **Was nicht:** normale Issues (die gehören nach `docs/issues/`) und einzelne
> Vorfälle (die gehören als AAR nach `docs/aar/`). Hier steht, was aus mehreren
> davon als **Muster** hervorgeht.
>
> **Pflege:** Ein Befund wird `geerntet`, wenn die nächste Iteration ihn abdeckt —
> nicht schon, wenn er einmal behoben wurde. Das Refinement geht die offenen durch.
## Übersicht
| # | Befund | Klasse | Stand |
|---|---|---|---|
| FB-01 | Die AAR-Pflicht setzt sich ohne Werkzeug nicht durch | Durchsetzung | offen |
| FB-02 | „Meldet Erfolg, ist aber blind" — sieben Vorkommen in fünf Werkzeugen | Fehlerklasse | offen |
| FB-03 | Prüfungen erzeugen Befunde, die niemand beheben kann | Verfahrenslücke | teilweise |
| FB-04 | Issues behaupten Zustände, die längst überholt sind | Verfahrenslücke | offen |
| FB-05 | Dashboards und Prüfungen ohne Datenbeleg | Fehlerklasse | offen |
| FB-06 | Dokumente werden ergänzt, aber nicht revidiert | Fehlerklasse | offen |
| FB-07 | Werkzeuge messen unbemerkt die falsche Instanz | Fehlerklasse | offen |
---
## FB-01 — Die AAR-Pflicht setzt sich ohne Werkzeug nicht durch
**Beschreibung.** `roadmap.md` verlangt einen AAR nach jedem Deploy mit Übergabe und nach
Incidents. Zwischen dem 17. und 20.08.2026 gab es **sechs** solche Ereignisse. Geschrieben
wurde zunächst **keiner**; alle sechs entstanden nachträglich auf Nachfrage von sorb.
**Ursachen-Einschätzung.** Nicht Nachlässigkeit, sondern eine strukturelle Asymmetrie:
Im selben Zeitraum wurde **kein einziges Mal** vergessen, was ein Werkzeug prüft —
Frontmatter (`validate.py`), `STATUS.md` (`gen_status --check`), Spiegel
(`spiegel_issues.py`), Commit-Konvention (`gruppenpruefung.py`). Der Unterschied ist, **wer
widerspricht**. Der AAR-Pflicht widerspricht niemand.
Verschärfend: Die Regel steht in `roadmap.md`, nicht in `AGENTS.md` — und auf `AGENTS.md`
verweist jedes `CLAUDE.md`. Wer nur der Zeigerkette folgt, findet die Pflicht nicht.
**Belege.** `docs/issues/0040-*` (Rückmeldung), sechs AARs vom 17.20.08.
**Vorschlag für die nächste Iteration.** Entweder eine Prüfung, die geschlossene Vorfälle
und Deploy-Übergaben ohne zugehörigen AAR meldet — dafür bräuchte es ein maschinell
lesbares Merkmal „war ein Vorfall" am Issue. Oder die ehrliche Alternative: Wenn eine Regel
dauerhaft nur auf Nachfrage befolgt wird, ist zu prüfen, ob die Schwelle stimmt. Sechs
AARs in vier Tagen sind viel.
---
## FB-02 — „Meldet Erfolg, ist aber blind"
**Beschreibung.** Ein Schritt läuft durch, meldet Erfolg und hat nichts getan. **Sieben
belegte Vorkommen in fünf verschiedenen Werkzeugen** — ausführlich in
[docs/wiki/stolpersteine/meldet-erfolg-ist-aber-blind.md](docs/wiki/stolpersteine/meldet-erfolg-ist-aber-blind.md).
**Ursachen-Einschätzung.** Das Verfahren verlangt verifizierbare Abnahmekriterien, aber
**nichts verlangt, dass eine selbstgebaute Prüfung einmal absichtlich rot war**. Ein Tor,
das nur grün gesehen wurde, ist eine Vermutung — genau so entstanden vier der sieben
Vorkommen.
Zweiter Anteil: Das Muster war seit dem 2026-08-18 als solches erkannt („viertes Vorkommen"
in #0054) und stand trotzdem nur in einem Issue. Es lag nicht dort, wo `AGENTS.md` die
Lehren sucht — und wurde deshalb dreimal neu entdeckt.
**Vorschlag.** Positivkontrolle als Pflichtbestandteil jeder neuen Prüfung: Wer ein Tor
baut, weist nach, dass es mit eingebautem Fehler rot ist. Denkbar als Gate im Design-Doc
oder als Zeile in der Abnahme.
---
## FB-03 — Prüfungen erzeugen Befunde, die niemand beheben kann
**Beschreibung.** Am 2026-08-18 waren alle geplanten Prüfungen dauerhaft rot (25 Befunde),
womit keine mehr etwas meldete. Behoben über den Quittungsmechanismus (ADR-0020). **Zwei
Tage später kam dieselbe Klasse zurück:** Der Upstream-Merge brachte 70.265 fremde Commits,
welche die Git-Hygiene-Prüfung bemängelte — Commits, die unserer Konvention nie folgen
konnten (ADR-0023).
**Ursachen-Einschätzung.** Beim Bau einer Prüfung wird gefragt, was sie finden **soll**,
nicht, welche Befunde sie erzeugen wird, die **niemand beheben kann**. Der
Quittungsmechanismus behandelt das Symptom gut (mit Pflichtfrist), verhindert aber nicht,
dass die nächste Prüfung dieselbe Lage erzeugt.
**Vorschlag.** Bei jeder neuen Prüfung im Voraus beantworten: *Welche Befunde wird sie
erzeugen, die strukturell nicht behebbar sind?* Wenn es welche gibt, gehört die Ausnahme in
dieselbe Änderung — nicht in eine spätere Aufräumrunde.
---
## FB-04 — Issues behaupten Zustände, die längst überholt sind
**Beschreibung.** Mehrfach an einem Tag: **#0083** nannte drei Dateien als Einzeldatei-
Mounts, die längst Verzeichnis-Mounts waren. **#0088** nannte Zahlen („13 Ingress-Regeln,
ein Egress-Vorkommen"), die nicht mehr stimmten. **#0002** führte die Firewall als Ursache,
die es nie war. **#0030** trägt im Titel „Der Restore ist nie geprobt", obwohl der
Datenbank-Restore geprobt und überwacht ist.
**Ursachen-Einschätzung.** Issues sind append-only — richtig so, git ist die Historie.
Aber **Kopf und Titel bleiben stehen**, während die Anhänge sie widerlegen. Wer ein Issue
öffnet, liest zuerst die veraltete Fassung. Es gibt keine Pflicht, einen widerlegten Befund
im Kopf zu markieren.
Praktische Folge, mehrfach beobachtet: Arbeit wird auf einer Prämisse begonnen, die
inzwischen falsch ist — und muss nach dem Nachmessen umgeplant werden.
**Vorschlag.** Ein leichtgewichtiges Mittel, etwa eine `⚠️ überholt`-Zeile direkt unter dem
Titel, sobald ein Anhang die Ausgangsdiagnose widerlegt. Oder ein Feld `letzte_messung`, das
sichtbar altert.
---
## FB-05 — Dashboards und Prüfungen ohne Datenbeleg
**Beschreibung.** `dashboards/gameserver/pterodactyl-server.json` war **drei Monate
dauerhaft leer** — es fragte Metriken eines Exporters ab, der nie funktioniert hat.
Niemandem ist es aufgefallen. Dasselbe Muster beim ClamAV-Dashboard: Der Vorschlag im Issue
nutzte ein Label, das in dieser Loki gar nicht existiert.
**Ursachen-Einschätzung.** Ein Dashboard gilt als fertig, wenn es angelegt ist. Es gibt
keine Abnahme „liefert Daten". Ein leeres Panel sieht aus wie „gerade nichts los" und ist
von „fragt Unsinn ab" nicht zu unterscheiden.
**Vorschlag.** Abnahmekriterium für jedes neue Dashboard: Jede Query wurde gegen die
laufende Instanz geprüft und hat Daten geliefert — oder es steht dabei, warum sie
berechtigt leer ist.
---
## FB-06 — Dokumente werden ergänzt, aber nicht revidiert
**Beschreibung.** `docs/axion1337-fork.md` beschrieb nach dem Upstream-Merge weiterhin ein
Repo ohne gemeinsamen Vorfahren. `dns-soll.md` nannte einen Absender, der so nie versandte.
`monitoring/README.md` beschrieb Targets als „antworten aktuell nicht", ohne den Grund und
nach der Umstellung mit falscher Adresse.
**Ursachen-Einschätzung.** Anhängen ist billig und fühlt sich vollständig an; das
Widerlegen einer früheren Aussage kostet Mut und Aufmerksamkeit. Beim Abschluss einer
Arbeit wird gefragt „ist es dokumentiert?", nicht „welche bestehende Aussage ist dadurch
falsch geworden?".
**Vorschlag.** Beim Abschluss einer Arbeit ausdrücklich die Gegenfrage stellen und die
Antwort in der Abnahme festhalten — auch wenn sie „keine" lautet.
---
## FB-07 — Werkzeuge messen unbemerkt die falsche Instanz
**Beschreibung.** Über den Entwicklungstunnel zeigen `cfgmon.lab:9090` und `:3100` auf
einen **anderen** Stack (`host=dokploy-host`); der operating-Stack ist nur aus dem
matrix-Cluster über `10.0.0.3` erreichbar. Zusätzlich wird im Lab **Port 53 abgefangen**
eine `dig`-Anfrage an eine TEST-NET-Adresse liefert ein Ergebnis. Beides hat an einem Tag
je zwei Diagnosen ins Leere laufen lassen.
**Ursachen-Einschätzung.** Die Umgebung beantwortet Fragen, die sie nicht beantworten
kann, statt zu schweigen. Ein Werkzeug, das eine Adresse anspricht, kann nicht erkennen,
dass jemand dazwischen sitzt. Dokumentiert war das teilweise
([reference: Diagnose-Fallen](docs/wiki/admin/cfgmon.md)) — aber nicht dort, wo die
Werkzeuge laufen.
**Vorschlag.** Gegenprobe als Standardbestandteil von Diagnose-Skripten, **vor** der
eigentlichen Messung. `pruefe-dns.sh` macht das seit dem 2026-08-20 vor; `pruefe-ports.sh`
seit dem 2026-08-19. Das Muster gehört in die Werkzeug-Vorlage, nicht in jedes Skript neu.
---
*Angelegt 2026-08-20 auf Wunsch von sorb, nach einer Sitzung, in der mehrere dieser
Befunde gleichzeitig sichtbar wurden. Erstbefüllung stammt von der Seite, die die
Abweichungen verursacht hat — das ist kein Argument gegen die Befunde, aber ein Grund,
sie im Refinement gegenzulesen.*
+1
View File
@@ -35,6 +35,7 @@ GitLab-Issue-Template. **Alle Issues leben auf git.lab.**
| [`schema.yaml`](schema.yaml) | Frontmatter-Schema — einzige Wahrheit über den Aufbau der Artefakte |
| [`STATUS.md`](STATUS.md) | Generierte Übersicht; **nicht von Hand ändern** (`scripts/gen_status.py`) |
| `roadmap.md` | Linien, Meilenstein-Kandidaten, Kadenz — die Gruppen-Milestones halten den Stand |
| [`FRAMEWORK-BEFUNDE.md`](FRAMEWORK-BEFUNDE.md) | Wo das Verfahren nicht getragen hat — Eingangsliste für die Framework-Ernte |
| `docs/adr/` | ADRs — Pflicht bei Architektur-/Prozessentscheidungen **und dauerhaften Ausnahmen** |
| `docs/issues/` | Das kanonische Backlog der ganzen Gruppe ([ADR-0012](docs/adr/0012-issues-im-repo-gitlab-als-spiegel.md), [ADR-0019](docs/adr/0019-komponenten-issues-adoptiert.md)) |
| `docs/design/`, `docs/aar/` | Design-Dokumente je Vorhaben; AARs zu Vorfällen und größeren Abweichungen |
+3
View File
@@ -94,6 +94,9 @@ Ablauf und Timeboxes: [verfahren/refinement.md](docs/wiki/admin/refinement.md).
- **AAR** nach jedem Deploy mit Übergabe und nach Incidents — offene Punkte daraus
werden im selben Zug zu Issues.
- **Retro light** (~monatlich, 2030 min): Verfahren/ADRs prüfen — fasert etwas aus?
Eingangsliste dafür ist [FRAMEWORK-BEFUNDE.md](FRAMEWORK-BEFUNDE.md):
wiederkehrende Fehlerklassen und Abweichungen, die in der nächsten
neckbeard-Iteration nicht erneut passieren sollen.
**Der Einstieg ist erfolgt:** [Struktur-Workshop (#17)](https://git.lab/axion1337.chat/management/-/issues/17)
am 2026-08-06 — Visionen geschärft, M1M4 angelegt, Board gesichtet, Kadenz und