diff --git a/FRAMEWORK-BEFUNDE.md b/FRAMEWORK-BEFUNDE.md index b6cc440..48abd15 100644 --- a/FRAMEWORK-BEFUNDE.md +++ b/FRAMEWORK-BEFUNDE.md @@ -27,6 +27,9 @@ | 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-08 | Dokumente werden angelesen, nicht durchgelesen | Arbeitsweise | offen | +| FB-09 | Gelesene Anweisungen werden nicht befolgt | Arbeitsweise | offen | +| FB-10 | Gesperrte Dateien werden bearbeitet | Arbeitsweise | offen | --- @@ -171,6 +174,68 @@ seit dem 2026-08-19. Das Muster gehört in die Werkzeug-Vorlage, nicht in jedes --- +## FB-08 — Dokumente werden angelesen, nicht durchgelesen + +**Beschreibung.** `roadmap.md` wurde am 2026-08-20 **vollständig ausgegeben** — alle 94 +Zeilen — um den Aufbau für eine Ergänzung zu verstehen. Die AAR-Pflicht steht dort in +Zeile 94 und war seit dem 2026-08-12 unverändert vorhanden. Sie wurde nicht gesehen. +Anschließend wurde dieselbe Datei **bearbeitet**, ohne dass die Regel auffiel — und +sechsmal verletzt. + +Dasselbe Muster mehrfach am selben Tag: Der Kommentar in der `.npmrc` sagt den +404-Fehlschlag wörtlich voraus; gelesen wurde er **nach** dem Fehlschlag. Der Kommentar in +`docker-compose.yml` erklärt, dass der Verzeichnis-Mount die Inode-Falle bereits beseitigt; +trotzdem wurde `--force-recreate` in zwei Übergaben weitergetragen. + +**Ursachen-Einschätzung.** Dokumente werden als **Nachschlagewerk für die gerade +anstehende Frage** behandelt, nicht als bindender Rahmen, den man vor dem Handeln +verinnerlicht. Gelesen wird, um zu *finden* — nicht, um sich zu *binden*. Deshalb bleibt +eine Regel unsichtbar, die drei Zeilen unter der bearbeiteten Stelle steht. + +**Vorschlag.** Vor einer Änderung an einer Datei: deren eigenen Kopf und die Regeln zu +ihrer Gattung vollständig lesen und im Arbeitsergebnis benennen, welche davon einschlägig +waren. Das kostet Zeilen und spart Wiederholungen. + +## FB-09 — Gelesene Anweisungen werden nicht befolgt + +**Beschreibung.** `AGENTS.md` Zeile 81: *„`docs/adr/` — binding; never edited, only +superseded."* Die Datei war gelesen. Trotzdem wurde ADR-0022 um einen Nachtrag ergänzt, +committet und gepusht. + +**Ursachen-Einschätzung.** Zwischen „gelesen" und „angewandt" fehlt der Schritt, in dem +die eigene geplante Handlung gegen die Regel gehalten wird. Die Regel war bekannt; die +Frage *„darf ich das?"* wurde vor der Handlung nicht gestellt, sondern erst, als zufällig +die Vorlage geöffnet wurde. + +⚠️ Diese Klasse ist gefährlicher als FB-08: Bei FB-08 fehlt Wissen, hier ist es vorhanden +und wird nicht abgerufen. Kein Werkzeug kann das auffangen, das nicht die Absicht kennt. + +**Vorschlag.** Für die kleine Zahl **harter** Verbote (ADRs nicht editieren, nicht nach +Gitea pushen, `docs/sources/` unveränderlich, `STATUS.md` nicht von Hand) eine Prüfung, die +den Verstoß im Commit findet statt im Nachhinein — etwa ein `pre-commit`-Hook oder eine +CI-Regel, die geänderte Pfade gegen eine Sperrliste hält. + +## FB-10 — Gesperrte Dateien werden bearbeitet + +**Beschreibung.** Commit `6652125` veränderte die angenommene ADR-0022. Der Verstoß wurde +gepusht und erst mit `6731d2a` zurückgenommen — nicht durch eine Prüfung, sondern durch +Zufall. + +**Ursachen-Einschätzung.** Es gibt keine technische Sperre. `validate.py` prüft Schema und +Verweise, nicht **Bearbeitbarkeit**. Der Schutz einer bindenden Entscheidung besteht heute +ausschließlich aus einem Satz in einer Kommentarzeile der Vorlage und einer Zeile in +`AGENTS.md`. + +Zum Vergleich: `STATUS.md` trägt dieselbe Art Verbot („nicht von Hand ändern") — und wurde +kein einziges Mal verletzt, weil `gen_status.py --check` widerspricht. Derselbe Befund wie +FB-01, an anderem Gegenstand. + +**Vorschlag.** Sperrliste in der CI: Änderungen an `docs/adr/*` mit `status: accepted`, +an `docs/sources/**` und an generierten Dateien brechen die Pipeline, sofern der Commit +nicht ausdrücklich eine Ablösung ist (neue ADR mit `supersedes`). + +--- + *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,