diff --git a/AGENTS.md b/AGENTS.md index 80208f5..21df684 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -171,9 +171,10 @@ Ohne Lab-Zugang: dieses Repo ist als Push-Mirror unter `in-progress` vergibt **nur sorb**; Sessions bilden ab (`waiting` mit `wartegrund`, Erledigtes `done` mit Begründung im Issue-Commit), sagen aber nichts zu. -- **ADR-Pflicht** bei Architektur-/Prozessentscheidungen und **jeder - dauerhaften Ausnahme von einer Regel** — eine Ausnahme nur zu - dokumentieren statt sie zu entscheiden, ist ein Fehler. +- **ADR-Pflicht** bei Architektur- und Prozessentscheidungen. Die zweite + Hälfte dieser Regel — dauerhafte Ausnahmen brauchen eine Entscheidung, + nicht nur eine Notiz — steht seit v0.1.2 im Upstream-Teil oben + (§1, *Exceptions need decisions*) und wird hier nicht wiederholt. ### Prüfungen @@ -205,10 +206,13 @@ dadurch **sechs** AARs auf einmal, alle nachträglich geschrieben. ⚠️ Kein Werkzeug erzwingt sie. Sie hängt an der Aufmerksamkeit dessen, der ausrollt. -**Wiederkehrende Fehlerklassen und Abweichungen vom Verfahren** gehören in -[FRAMEWORK-BEFUNDE.md](FRAMEWORK-BEFUNDE.md) — die Eingangsliste für die Framework-Ernte. -Dort steht, was aus mehreren Issues und AARs als **Muster** hervorgeht, damit die nächste -neckbeard-Iteration es abdecken kann. Vor dem Vorschlagen von Optionen gehört sie zu den +**Wiederkehrende Fehlerklassen und Abweichungen vom Verfahren** bekommen je eine +Seite unter `docs/wiki/stolpersteine/` mit `status` und, wo zutreffend, `harvested_in` +(ADR-0009 des Rahmenwerks) — dort steht, was aus mehreren Issues und AARs als **Muster** +hervorgeht, damit die nächste neckbeard-Iteration es abdecken kann. ⚠️ `harvested` nur, +wenn eine **veröffentlichte** Version es abdeckt; übergeben ist nicht geerntet. Die +geclusterte Übersicht erzeugt `gen_status.py` nach [STATUS.md](STATUS.md); +[FRAMEWORK-BEFUNDE.md](FRAMEWORK-BEFUNDE.md) ist nur noch der Wegweiser dorthin. Vor dem Vorschlagen von Optionen gehört sie zu den Dokumenten, die man gelesen hat (§4). ### Secrets & Credentials diff --git a/FRAMEWORK-BEFUNDE.md b/FRAMEWORK-BEFUNDE.md index fbf5006..1e721b2 100644 --- a/FRAMEWORK-BEFUNDE.md +++ b/FRAMEWORK-BEFUNDE.md @@ -7,7 +7,7 @@ als Wiki-Seiten unter [docs/wiki/stolpersteine/](docs/wiki/index.md) — eine Seite je Muster, mit Stand und, wo zutreffend, der Version, die es abdeckt (ADR-0009 des Rahmenwerks). -**Die geclusterte Übersicht steht in [STATUS.md](STATUS.md)**, Abschnitt *Fehlerklassen*: 2 offen, 0 teilweise, 1 geerntet, 0 nicht abgedeckt. +**Die geclusterte Übersicht steht in [STATUS.md](STATUS.md)**, Abschnitt *Fehlerklassen*: 5 offen, 3 teilweise, 4 geerntet, 2 nicht abgedeckt. Diese Datei hält keinen eigenen Bestand mehr. Sie bleibt als Wegweiser bestehen, weil angenommene Entscheidungen auf sie diff --git a/README.md b/README.md index bd29dd5..3dea299 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ 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** | +| [`FRAMEWORK-BEFUNDE.md`](FRAMEWORK-BEFUNDE.md) | Erzeugter Wegweiser; die Fehlerklassen liegen als Seiten in `docs/wiki/stolpersteine/`, die Übersicht in [`STATUS.md`](STATUS.md) | +| `docs/adr/` | ADRs — Pflicht bei Architektur- und Prozessentscheidungen; für dauerhafte Ausnahmen gilt dieselbe Pflicht aus dem Upstream-Teil von [`AGENTS.md`](AGENTS.md) | | `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 | | `docs/components/` | Eine Datei je Projekt der Gruppe — wer hier fehlt, wird zum Befund | diff --git a/STATUS.md b/STATUS.md index bdb8fba..172b3cb 100644 --- a/STATUS.md +++ b/STATUS.md @@ -131,17 +131,34 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). - [AAR — Game-Host-Anbindung: Deploy über zwei Übergaben, Ursache war nie die Firewall](docs/aar/2026-08-20-game-host-anbindung.md) - [AAR — rohana lief voll, der ThreadNet-Web-Spiegel riss](docs/aar/2026-08-20-rohana-platte-voll-spiegel-gerissen.md) -## Fehlerklassen (5) +## Fehlerklassen (16) -### offen (2) +### offen (5) +- [Die AAR-Pflicht setzt sich ohne Werkzeug nicht durch](docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md) +- [Prüfungen erzeugen Befunde, die niemand beheben kann](docs/wiki/stolpersteine/befunde-die-niemand-beheben-kann.md) +- [Issues behaupten Zustände, die längst überholt sind](docs/wiki/stolpersteine/issues-behaupten-ueberholte-zustaende.md) - [Eine Datei kann nicht maßgeblich und zugleich unveränderlich sein](docs/wiki/stolpersteine/massgeblich-aber-unveraenderlich.md) - [Eine Quittung bezeugt Aufmerksamkeit, nicht Vollständigkeit](docs/wiki/stolpersteine/quittung-bezeugt-aufmerksamkeit.md) -### geerntet (1) +### teilweise gedeckt (3) +- [Gelesene Anweisungen werden nicht befolgt](docs/wiki/stolpersteine/gelesene-anweisungen-nicht-befolgt.md) — neckbeard v0.3.0 +- [Regeln ohne maschinellen Widerspruch werden nicht befolgt](docs/wiki/stolpersteine/regeln-ohne-widerspruch.md) — neckbeard v0.3.0 +- [Der Upgrade-Pfad ins Rahmenwerk war beschrieben, nie begangen](docs/wiki/stolpersteine/upgrade-pfad-nie-begangen.md) — neckbeard v0.3.1 + +### geerntet (4) + +- [Dashboards und Prüfungen ohne Datenbeleg](docs/wiki/stolpersteine/artefakt-existiert-liefert-aber-nichts.md) — neckbeard v0.1.3 +- [Dokumente werden ergänzt, aber nicht revidiert](docs/wiki/stolpersteine/dokumente-ergaenzt-nicht-revidiert.md) — neckbeard v0.1.3 +- [Gesperrte Dateien werden bearbeitet](docs/wiki/stolpersteine/gesperrte-dateien-werden-bearbeitet.md) — neckbeard v0.2.0 - [„Meldet Erfolg, ist aber blind" — die häufigste Fehlerklasse dieses Projekts](docs/wiki/stolpersteine/meldet-erfolg-ist-aber-blind.md) — neckbeard v0.1.3 +### vom Rahmenwerk nicht abgedeckt — bleibt unseres (2) + +- [Dokumente werden angelesen, nicht durchgelesen](docs/wiki/stolpersteine/dokumente-angelesen-nicht-durchgelesen.md) — neckbeard v0.1.3 +- [Werkzeuge messen unbemerkt die falsche Instanz](docs/wiki/stolpersteine/werkzeug-misst-die-falsche-instanz.md) — neckbeard v0.1.3 + ### ohne Ernte-Stand (2) - [Stolpersteine aus der neckbeard-Migration (2026-08-11)](docs/wiki/stolpersteine/neckbeard-migration.md) diff --git a/docs/ledger/2026-08-21-v031-adoption-stage-2.md b/docs/ledger/2026-08-21-v031-adoption-stage-2.md index 474fbf0..b93199f 100644 --- a/docs/ledger/2026-08-21-v031-adoption-stage-2.md +++ b/docs/ledger/2026-08-21-v031-adoption-stage-2.md @@ -17,7 +17,8 @@ related: | 2 | afaa74a | sorb | DONE | Auflage erfuellt: Regeln vollstaendig uebernommen, inhaltlicher Rest offen. Option A gewaehlt. | | 3 | b179246 | sorb | DONE | Ausfuehrung von A angepasst (Wegweiser statt Loeschung); Enum auf Einwand um `declined` erweitert. | | 4.1 | 0a95437 | sorb | DONE | Tracer Bullet: Schema, Generator, eine Seite. Acht Kontrollen gefahren, davon sieben absichtliche Brueche. | -| 4.2 | | sorb | DONE | Schema-Deckung als Widerspruch zum Handabgleich; zwei Befundseiten fuer die naechste Ernte. 16 Zusicherungen, sechs Brueche. | +| 4.2 | fe5286c | sorb | DONE | Schema-Deckung als Widerspruch zum Handabgleich; zwei Befundseiten fuer die naechste Ernte. 16 Zusicherungen, sechs Brueche. | +| 4.3 | | sorb | DONE | Elf Befunde umgezogen, Ernte-Stand je Seite belegt; doppelte Regel aus AGENTS.md entfernt, drei Beschreibungen nachgezogen. | ## Ladder @@ -34,9 +35,18 @@ related: | `apply_rules()` in `validate.py`, für die Beleg-Pflicht bei entschiedenen Ständen | vier Regeln nach demselben Muster, u. a. `waiting_requires_reason` | reused: eine fünfte Regel im selben Schalter, kein eigener Prüfer | | | `pruefe_upstream_drift.py`, bevor ein eigener Schema-Vergleicher entsteht | prüft bereits Baselines, Zuordnung und Abgleichs-Quittung — nur nicht den Inhalt der erweiterten Dateien | reused: fünfte Prüffunktion im selben Skript samt dessen Selbsttest, kein neues Werkzeug | | | `FRAMEWORK-BEFUNDE.md`, wohin die zwei neuen Befunde gehören | seit heute erzeugter Wegweiser ohne Bestand; Muster leben als Wiki-Seiten (ADR-0009) | built: zwei `stolpersteine`-Seiten — der erste Einsatz des neuen Mechanismus | | +| die Befundtexte, bevor sie für die Seiten neu geschrieben werden | vollständig in der Historie des Registers (`b179246`) | reused: aus git gezogen und unverändert übernommen, nur Links umgebogen — Redigieren war Gate-1-Nichtziel | | +| Ernte-Stände, bevor sie aus dem Issue-Status geschlossen werden | die Regeltexte der Tags selbst: v0.1.3 trägt zwei Regeln wörtlich, v0.2.0 `check_locked.py`, v0.3.0 Ledger und Spurenpflicht | reused: am Tag-Stand nachgeprüft statt abgeleitet — dabei fiel auf, dass Issue 0028 FB-06 abdeckt | | ## Notes +**Zwei Zuordnungen aus Gate 2 waren falsch und sind korrigiert.** FB-06 galt +dort als offen — tatsächlich hat das Rahmenwerk das Sammel-Item aufgeteilt +und die Hälfte als Issue 0028 in v0.1.3 erledigt. FB-09 und FB-11 galten als +offen; v0.3.0 deckt sie über Ledger und Spurenpflicht teilweise ab. Beides +kam nur heraus, weil die Stände am Regeltext der Tags geprüft wurden und +nicht am Issue-Status. + **Die neue Prüfung hat beim Bauen zweimal etwas über sich selbst gelernt.** Erst brach sie den bestehenden Selbsttest, weil dessen Fixture `schema.yaml` als Prosa schrieb — genau die unrealistische Fixture, die FB-12 für dieses diff --git a/docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md b/docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md new file mode 100644 index 0000000..efe0968 --- /dev/null +++ b/docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md @@ -0,0 +1,41 @@ +--- +type: wiki-page +area: stolpersteine +status: open +--- + +# Die AAR-Pflicht setzt sich ohne Werkzeug nicht durch + +> **Stand: offen.** Bis zum 2026-08-21 als **FB-01** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** Issue 0020 des Rahmenwerks ist offen. + +**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 war: Die Regel stand nur in `roadmap.md`, nicht in `AGENTS.md` — und auf +`AGENTS.md` verweist jedes `CLAUDE.md`. Wer nur der Zeigerkette folgte, fand die Pflicht +nicht. + +**Teilweise behoben 2026-08-20** (Entscheidung sorb): `AGENTS.md` trägt im Projektabschnitt +jetzt den Abschnitt „Nach Deploys und Vorfällen" mit der AAR-Pflicht und dem Verweis auf +diese Datei. ⚠️ Das schließt die Wissenslücke, **nicht** die Durchsetzungslücke — kein +Werkzeug erzwingt die Pflicht, und genau das steht dort auch ausdrücklich. + +**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. + +➡️ Die hier vermutete Asymmetrie ist am 2026-08-20 über den **gesamten** Regelsatz +nachgemessen worden und hat sich bestätigt: **FB-11**. +Dieser Befund bleibt als Einzelfall gültig; FB-11 trägt die Regelmäßigkeit. diff --git a/docs/wiki/stolpersteine/artefakt-existiert-liefert-aber-nichts.md b/docs/wiki/stolpersteine/artefakt-existiert-liefert-aber-nichts.md new file mode 100644 index 0000000..2ae3f52 --- /dev/null +++ b/docs/wiki/stolpersteine/artefakt-existiert-liefert-aber-nichts.md @@ -0,0 +1,24 @@ +--- +type: wiki-page +area: stolpersteine +status: harvested +harvested_in: "neckbeard v0.1.3" +--- + +# Dashboards und Prüfungen ohne Datenbeleg + +> **Stand: geerntet.** Bis zum 2026-08-21 als **FB-05** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** `WORKFLOW.md` in v0.1.3 traegt die Regel *„A delivering artifact owes one real result. Where the artifact's output *is* the product — a dashboard, a report, a query — acceptance quotes one observation it actually returned.“* Issue 0024, erledigt. + +**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. diff --git a/docs/wiki/stolpersteine/befunde-die-niemand-beheben-kann.md b/docs/wiki/stolpersteine/befunde-die-niemand-beheben-kann.md new file mode 100644 index 0000000..bbe4c59 --- /dev/null +++ b/docs/wiki/stolpersteine/befunde-die-niemand-beheben-kann.md @@ -0,0 +1,25 @@ +--- +type: wiki-page +area: stolpersteine +status: open +--- + +# Prüfungen erzeugen Befunde, die niemand beheben kann + +> **Stand: offen.** Bis zum 2026-08-21 als **FB-03** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** Issue 0022 des Rahmenwerks ist offen. + +**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. diff --git a/docs/wiki/stolpersteine/dokumente-angelesen-nicht-durchgelesen.md b/docs/wiki/stolpersteine/dokumente-angelesen-nicht-durchgelesen.md new file mode 100644 index 0000000..152e82b --- /dev/null +++ b/docs/wiki/stolpersteine/dokumente-angelesen-nicht-durchgelesen.md @@ -0,0 +1,31 @@ +--- +type: wiki-page +area: stolpersteine +status: declined +harvested_in: "neckbeard v0.1.3" +--- + +# Dokumente werden angelesen, nicht durchgelesen + +> **Stand: vom Rahmenwerk nicht abgedeckt.** Bis zum 2026-08-21 als **FB-08** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** Issue 0027 des Rahmenwerks wurde mit Begruendung abgelehnt — eine Pflichtliste „gelesener Unterlagen“ waere durch Auflisten von Dateinamen erfuellt und damit Theater. Das Muster bleibt bestehen und bleibt unseres. + +**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. diff --git a/docs/wiki/stolpersteine/dokumente-ergaenzt-nicht-revidiert.md b/docs/wiki/stolpersteine/dokumente-ergaenzt-nicht-revidiert.md new file mode 100644 index 0000000..7d4971b --- /dev/null +++ b/docs/wiki/stolpersteine/dokumente-ergaenzt-nicht-revidiert.md @@ -0,0 +1,24 @@ +--- +type: wiki-page +area: stolpersteine +status: harvested +harvested_in: "neckbeard v0.1.3" +--- + +# Dokumente werden ergänzt, aber nicht revidiert + +> **Stand: geerntet.** Bis zum 2026-08-21 als **FB-06** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** `WORKFLOW.md` in v0.1.3 traegt die Regel *„Name what this work made false. Ask it explicitly — which existing statement, in which artifact, does this undertaking now contradict?“* Issue 0028, erledigt — upstream aus dem gemeinsamen Item mit FB-04 herausgeloest, weil die Abhilfen verschieden sind. + +**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. diff --git a/docs/wiki/stolpersteine/gelesene-anweisungen-nicht-befolgt.md b/docs/wiki/stolpersteine/gelesene-anweisungen-nicht-befolgt.md new file mode 100644 index 0000000..167503d --- /dev/null +++ b/docs/wiki/stolpersteine/gelesene-anweisungen-nicht-befolgt.md @@ -0,0 +1,28 @@ +--- +type: wiki-page +area: stolpersteine +status: partly +harvested_in: "neckbeard v0.3.0" +--- + +# Gelesene Anweisungen werden nicht befolgt + +> **Stand: teilweise gedeckt.** Bis zum 2026-08-21 als **FB-09** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** v0.3.0 bringt Ledger und Leiter-Spurenpflicht und macht damit sichtbar, ob eine bekannte Regel angewandt wurde. Issue 0019 ist weiterhin offen — die Durchsetzung fehlt, nur die Beobachtbarkeit ist da. + +**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. diff --git a/docs/wiki/stolpersteine/gesperrte-dateien-werden-bearbeitet.md b/docs/wiki/stolpersteine/gesperrte-dateien-werden-bearbeitet.md new file mode 100644 index 0000000..c332b13 --- /dev/null +++ b/docs/wiki/stolpersteine/gesperrte-dateien-werden-bearbeitet.md @@ -0,0 +1,48 @@ +--- +type: wiki-page +area: stolpersteine +status: harvested +harvested_in: "neckbeard v0.2.0" +--- + +# Gesperrte Dateien werden bearbeitet + +> **Stand: geerntet.** Bis zum 2026-08-21 als **FB-10** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** v0.2.0 liefert `scripts/check_locked.py`; Issue 0026 erledigt, 0029 (Verdrahtung in die Pipeline) ebenfalls. Hier tut `pruefe_sperrliste.py` dasselbe (ADR-0024, bewusst nicht uebernommen). + +**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. + +**Umgesetzt 2026-08-20.** `scripts/pruefe_sperrliste.py`, im `validate`-Job bei jedem +Push. Gesperrt sind `docs/sources/**` und jede ADR, die vor dem Push `status: accepted` +trug; erlaubt bleibt genau die von der Vorlage vorgeschriebene Änderung — `superseded_by` +und `status` setzen, wenn eine neue ADR ablöst. + +**Beide Sperren mit Positivkontrolle belegt, nicht nur gebaut:** + +| Fall | Ergebnis | +|---|---| +| Commit `6652125` (mein realer Verstoß an ADR-0022) | rot, 23 beanstandete Zeilen | +| Wegwerf-Commit an `docs/sources/…/AGENTS.md` | rot | +| sauberer Commit | grün | +| ungültiger Vergleichsbereich | rot — „ungeprüft ist nicht bestanden" | + +⚠️ **Beim Bau ist mir dieselbe Klasse prompt wieder unterlaufen:** Der erste `git`-Helfer +verwandelte einen Fehlschlag in einen leeren String — ein ungültiger Bereich wurde damit zu +„keine Änderungen" und **bestand stillschweigend**. Aufgefallen nur, weil der Test gegen +den Wurzel-Commit des Repos lief, der keinen Vorgänger hat. Das ist FB-02 im Werkzeug +gegen FB-10; der Fall steht als vierte Zeile in der Tabelle oben, weil er jetzt geprüft +wird. + +**Nicht abgedeckt:** generierte Dateien. `STATUS.md` bleibt durch `gen_status --check` +geschützt, andere Generate haben heute keine Entsprechung. diff --git a/docs/wiki/stolpersteine/issues-behaupten-ueberholte-zustaende.md b/docs/wiki/stolpersteine/issues-behaupten-ueberholte-zustaende.md new file mode 100644 index 0000000..41d1540 --- /dev/null +++ b/docs/wiki/stolpersteine/issues-behaupten-ueberholte-zustaende.md @@ -0,0 +1,28 @@ +--- +type: wiki-page +area: stolpersteine +status: open +--- + +# Issues behaupten Zustände, die längst überholt sind + +> **Stand: offen.** Bis zum 2026-08-21 als **FB-04** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** Issue 0023 des Rahmenwerks ist offen — die andere Haelfte des urspruenglich gemeinsamen Items wurde als 0028 herausgeloest und ist erledigt, diese nicht. + +**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. diff --git a/docs/wiki/stolpersteine/meldet-erfolg-ist-aber-blind.md b/docs/wiki/stolpersteine/meldet-erfolg-ist-aber-blind.md index 37bf313..2b053ca 100644 --- a/docs/wiki/stolpersteine/meldet-erfolg-ist-aber-blind.md +++ b/docs/wiki/stolpersteine/meldet-erfolg-ist-aber-blind.md @@ -12,7 +12,7 @@ related: [] # „Meldet Erfolg, ist aber blind" — die häufigste Fehlerklasse dieses Projekts -> **Stand: geerntet.** Bis zum 2026-08-21 als FB-02 im Befundregister geführt, +> **Stand: geerntet.** Bis zum 2026-08-21 als **FB-02** im Befundregister geführt, > am 2026-08-20 an das Rahmenwerk übergeben. **Beleg:** neckbeard **v0.1.3** > trägt in `WORKFLOW.md` die Regel *„A check owes proof that it can fail. A > slice that introduces a gate, test or check shows it going red with a diff --git a/docs/wiki/stolpersteine/regeln-ohne-widerspruch.md b/docs/wiki/stolpersteine/regeln-ohne-widerspruch.md new file mode 100644 index 0000000..5d0d2c7 --- /dev/null +++ b/docs/wiki/stolpersteine/regeln-ohne-widerspruch.md @@ -0,0 +1,104 @@ +--- +type: wiki-page +area: stolpersteine +status: partly +harvested_in: "neckbeard v0.3.0" +--- + +# Regeln ohne maschinellen Widerspruch werden nicht befolgt + +> **Stand: teilweise gedeckt.** Bis zum 2026-08-21 als **FB-11** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** v0.3.0 bringt Ledger, Leiter-Spurenpflicht und `judge.py`; ADR-0010 des Rahmenwerks verlangt seither von jeder neuen Regel eine Antwort auf *„welche Spur hinterlaesst sie?“* Das macht Regeltreue beobachtbar, nicht erzwingbar — Issue 0019 ist offen. + +**Anlass.** sorb fragte am 2026-08-20: *„was ist eigentlich mit ponytail? das sollte ja +auch eigentlich im framework stehen und dir vorgegeben sein. es scheint nicht verwendet zu +werden."* Die Frage traf zu. Beim Nachmessen zeigte sich, dass ponytail nur der Punkt ist, +an dem das Muster sichtbar wurde. + +**Was ponytail ist.** Die Entscheidungsleiter in `AGENTS.md` §1, Zeile 26–29: + +> Before writing new code, stop at the first rung that holds: needed at all? → codebase +> already has it? → stdlib? → platform-native? → installed dependency? → one line? → only +> then: the minimum that works. **(Ladder after ponytail, MIT.)** + +Sie steht in `AGENTS.md` **und** byte-gleich in der Baseline +[`docs/sources/upstream/neckbeard-v0.1.1/AGENTS.md`](../../sources/upstream/neckbeard-v0.1.1/AGENTS.md) +— also in der Datei, die in jede Session geladen wird. In den Sitzungen vom 17.–20.08.2026 +wurde sie **kein einziges Mal genannt und an keiner Stelle nachweislich bestiegen.** + +**Die Messung.** `AGENTS.md` §1/§3 zerfällt in zwei Sorten Regeln, und die Befolgung folgt +nicht der Regel, sondern dem Werkzeug: + +| Regel | Widerspruch im Werkzeug | Befolgung | +|---|---|---| +| Frontmatter nach `schema.yaml` | `validate.py` | nie verletzt | +| `STATUS.md` nicht von Hand | `gen_status.py --check` | nie verletzt | +| Baseline byte-treu | `pruefe_upstream_drift.py` | nie verletzt | +| WIP-Limit 2, ein Meilenstein je Issue | `validate.py` / `schema.yaml` | nie verletzt | +| Tote Verweise, SHA-Zitate | `pruefe_prosa.py` | nie verletzt | +| Commit-Konvention, Identitäten | `gruppenpruefung.py` | nie verletzt | +| **ponytail-Leiter (§1)** | **keiner** | **nie angewandt** | +| **Schlussstatus `DONE`/`DONE_WITH_CONCERNS`/`NEEDS_CONTEXT`/`BLOCKED` (§1)** | **keiner** | **nie benutzt** | +| **Größenklasse S/M/L am Aufgabenbeginn (§3)** | **keiner** | **nie vorgeschlagen** | +| **„Every changed line must trace directly to the request" (§3)** | **keiner** | verletzt (Rüge sorb, 20.08.) | +| Angenommene ADRs nie editieren | keiner → seit 20.08. `pruefe_sperrliste.py` | verletzt (FB-09/FB-10) | +| AAR-Pflicht | keiner | 6× verletzt (FB-01) | + +**Belege für die drei „nie"-Zeilen.** + +- Die vier Pflicht-Status kommen im ganzen Repo ausschließlich in den Regeldateien selbst + vor (`AGENTS.md`, `WORKFLOW.md`, `docs/design/template.md`) und in deren + Baseline-Kopien — **in keinem einzigen Arbeitsergebnis**. +- Größenklassen: dasselbe Bild, nur Regeltext (`AGENTS.md` §3, `WORKFLOW.md`, `README.md`). +- `WORKFLOW.md` verlangt für **L** („new feature, multiple files or sessions, real + decisions") ein Design-Dokument mit Gates 1–5. In `docs/design/` liegt **genau eines**, + vom 2026-08-11 — die neckbeard-Migration selbst. Seither ohne Design-Dokument gelaufen: + der Upstream-Merge mit 70.265 Commits, Release v0.6.0, das typecheck-Tor, die + Egress-Sperre über zehn Workloads, die Game-Host-Anbindung. `PROJECT.md` gewährt nur die + **S**-Ausnahme; „M und L stoppen immer" steht dort wörtlich. + +**Ursachen-Einschätzung.** Ausnahmslos jede Regel mit maschinellem Widerspruch wurde +eingehalten. Ausnahmslos jede Regel ohne einen wurde gebrochen oder ignoriert. Das ist +keine Sammlung von Einzelnachlässigkeiten, sondern ein Gefälle, dem die Arbeitsweise +folgt. **FB-01** hat den +Mechanismus an einem Gegenstand vermutet; neu ist hier, dass er über den **gesamten** +Regelsatz gilt — und dass er auch dort greift, wo Wissen und Absicht vorhanden sind +(**FB-09**). + +Er erklärt zugleich, warum FB-10 funktioniert hat: nicht weil die Regel neu formuliert +wurde, sondern weil ihr seit dem 20.08. ein Skript widerspricht. + +⚠️ **Der strukturelle Zusatz — und der eigentliche Grund, warum das hierher gehört:** Die +unbewachten Regeln stehen sämtlich in §1–§5, dem **byte-treuen Baseline-Teil**. Dieses +Projekt kann dort keine Durchsetzung nachrüsten, ohne `pruefe_upstream_drift.py` zu +brechen. Was hier fehlt, kann das Projekt nicht selbst beheben — es muss aus der nächsten +neckbeard-Iteration kommen. + +**Warum hier kein Skript vorgeschlagen wird.** Die Leiter auf sich selbst angewandt, erste +Sprosse *„needed at all?"*: Die gebrochenen Regeln sind Urteilsregeln („ist das die +einfachste Lösung?", „welche Größenklasse?"). Ein Skript kann Urteil nicht prüfen, nur +Rituale zählen — und eine Prüfung, die Rituale zählt, erzeugt Befunde, die niemand beheben +kann (**FB-03**). + +**Vorschlag für die nächste Iteration.** Zwei Ansätze, die *ohne* Urteilsprüfung +auskommen, beide berühren `AGENTS.md`/`WORKFLOW.md` und damit die Baseline — Entscheidung +sorb im Refinement: + +1. **Größenklasse als Artefakt statt als Ansage.** Wenn die Klasse irgendwo im Frontmatter + landet, kann `validate.py` für L das Design-Dokument einfordern. Heute ist sie ein + Satz im Chat und damit spurlos. +2. **Die Schwelle prüfen statt die Disziplin.** Wenn Gates über Monate nur auf Nachfrage + durchlaufen werden, ist die zweite Erklärung, dass sie für diesen Betrieb zu eng + geschnitten sind. Das ist ausdrücklich keine Entlastung — aber es zu messen ist + ehrlicher, als die Regel ein weiteres Mal zu wiederholen. + +**Entschieden am 2026-08-20 (sorb):** Größenklasse und Schlussstatus werden ab sofort +mitgeführt — die Verhaltensseite ist damit geklärt. ⚠️ Der Befund bleibt trotzdem `offen`: +Die Durchsetzungslücke besteht unverändert, denn genau das war schon vorher die Regel. Was +sich geändert hat, ist die Aufmerksamkeit, nicht der Mechanismus — und FB-01 zeigt, wie +lange das trägt. + +Was **nicht** hilft: die Regel nochmals irgendwohin schreiben. Sie steht bereits an zwei +Stellen, und beide wurden gelesen — siehe +[„Meldet Erfolg, ist aber blind"](meldet-erfolg-ist-aber-blind.md) +für die verwandte Klasse und **FB-08**. diff --git a/docs/wiki/stolpersteine/upgrade-pfad-nie-begangen.md b/docs/wiki/stolpersteine/upgrade-pfad-nie-begangen.md new file mode 100644 index 0000000..2a40065 --- /dev/null +++ b/docs/wiki/stolpersteine/upgrade-pfad-nie-begangen.md @@ -0,0 +1,112 @@ +--- +type: wiki-page +area: stolpersteine +status: partly +harvested_in: "neckbeard v0.3.1" +--- + +# Der Upgrade-Pfad ins Rahmenwerk war beschrieben, nie begangen + +> **Stand: teilweise gedeckt.** Bis zum 2026-08-21 als **FB-12** im Befundregister gefuehrt, nie uebergeben. +> **Beleg:** Punkt 1 ist im Rahmenwerk behoben: v0.3.1 fuehrt die `vendored`-Liste und weist repo-relative Verweise im Upstream-Teil zurueck. Die Punkte 2 und 3 sind hier behoben, nicht oben — deshalb teilweise. + +**Beschreibung.** Am 2026-08-21 wurde die Baseline zum ersten Mal seit der Migration +angehoben: v0.1.1 → v0.3.1, drei Minor-Stände auf einmal. Das Verfahren dafür steht in +`AGENTS.md` §5 und galt seit dem 2026-08-13 als erledigt — die entsprechende +Rahmenwerks-Frage wurde damals mit v0.1.2 geschlossen. **Beim ersten wirklichen Versuch +scheiterte es an drei Stellen:** + +1. **`WORKFLOW.md` ließ sich nicht byte-genau übernehmen.** Seit neckbeard v0.1.3 verweist + es auf ADRs des Rahmenwerks selbst; seit v0.3.0 auf eine zweite. Diese Dateien gibt es + hier nicht und wird es nie geben — unsere ADRs tragen eigene Nummern und eigene Inhalte. + `validate.py` meldete zwei tote Verweise. Die Wahl war: rotes Tor oder gebrochene Kopie. +2. **`scripts/pruefe_sperrliste.py` verbot das Upgrade selbst.** `docs/sources/` ist + unveränderlich, und ein Upgrade muss dort zwingend eine neue Baseline anlegen. Die + Prüfung las `git diff --name-only` und konnte einen **Zugang** nicht von einer + **Änderung** unterscheiden: 17 gemeldete Verstöße für einen völlig korrekten Vorgang. +3. **Die drei erklärt-erweiterten Dateien mussten von Hand abgeglichen werden.** + `schema.yaml`, `scripts/validate.py` und `scripts/gen_status.py` stehen laut + `HERKUNFT.md` bewusst außerhalb des Byte-Vergleichs. Also meldet auch nichts, wenn + upstream sie ändert. Nur ein Diff `v0.1.1..v0.3.1` zeigte, dass zwei von ihnen betroffen + waren. + +**Ursachen-Einschätzung.** Eine gemeinsame Wurzel: **Das Verfahren war beschrieben und nie +ausgeführt.** Drei Minor-Stände lang hat niemand die Probe gemacht, und jede der drei +Stellen ist genau die Sorte Fehler, die nur beim Ausführen sichtbar wird. + +Punkt 1 ist im Rahmenwerk selbst **unsichtbar**: Dort lösen beide Verweise auf, seine +eigene Prüfung ist grün. Falsch sind sie ausschließlich in einem fremden Checkout — also +bei uns. Punkt 2 ist eine Prüfung, deren Geltungsbereich nie gegen den einen Vorgang +getestet wurde, den sie erlauben *muss*; verwandt mit **FB-02**, nur andersherum — sie +meldet nicht fälschlich Erfolg, sondern fälschlich einen Verstoß. Punkt 3 ist **FB-11** an +neuem Gegenstand: eine Pflicht ohne maschinellen Widerspruch, die genau so lange getragen +wird, wie jemand daran denkt. + +⚠️ Und es ist unsere eigene Positivkontroll-Regel, nicht angewandt: Die Adoptionsfrage +wurde seinerzeit auf die *Beschreibung* eines Verfahrens hin geschlossen. Ein Verfahren, +das nur beschrieben wurde, ist eine Vermutung — dieselbe Aussage, die **FB-02** für +Prüfungen macht. + +**Belege.** + +| Punkt | Messung | +|---|---| +| 1 | `validate: 2 error(s)` gegen byte-genaues v0.3.0-`WORKFLOW.md`, in diesem Repo gemessen | +| 2 | `pruefe_sperrliste: 17 Verstoss/Verstoesse` für den reinen Baseline-Zugang | +| 3 | `git diff --stat v0.1.1 v0.3.1` → `validate.py` +29, `schema.yaml` +50, `gen_status.py` unverändert | + +**Stand: teilweise.** + +- **Punkt 1 ist im Rahmenwerk behoben** (v0.3.1): `schema.yaml` führt eine `vendored`-Liste + und eine Projektabschnitts-Marke, `validate.py` weist repo-relative Verweise im + Upstream-Teil einer vendorierten Datei zurück. Der Fix hatte prompt seinen eigenen + Folgefehler — er verbot zunächst auch die elf berechtigten Verweise in unserem + Projektabschnitt — und wurde erst dadurch richtig, dass er an unserem Repo gemessen wurde. +- **Punkt 2 ist hier behoben:** `pruefe_sperrliste.py` liest `--name-status`; Änderung und + Löschung bleiben gesperrt, nur der Zugang ist erlaubt. Vier Kontrollen belegt. Upstream + `check_locked.py` zieht dieselbe Grenze und sichert sie zu — unsere Fassung wusste es + nur nicht. +- **Punkt 3 ist behoben.** + [ADR-0024](../../adr/0024-drei-framework-dateien-erklaert-erweitert.md) trägt die + Ausnahme seit dem 2026-08-21 als Entscheidung, und `pruefe_upstream_drift.py` hat seit + demselben Tag den maschinellen Widerspruch: Hat upstream zwischen der vorigen und der + aktuellen Baseline eine erklärt-erweiterte Datei angefasst, verlangt es eine Quittung in + `ABGLEICH.tsv` der neuen Baseline. Dieselbe Prüfung stellt außerdem sicher, dass **jede** + vendorierte Datei genau einer Klasse zugeordnet ist — byte-identisch, AGENTS-Präfix, + erklärt erweitert oder bewusst nicht übernommen. Eine vendorierte Datei ohne Zuordnung + war bis dahin unsichtbar; beim Upgrade waren es prompt zwei (`check_harvest.py`, + `judge.py`). + + ⚠️ **Der erste Entwurf dieser Prüfung war wirkungslos** und ist es fast geblieben: Er + suchte den Dateinamen irgendwo in der Prosa der `HERKUNFT.md` — und dort steht er + *immer*, in der Inventartabelle. Aufgefallen ist es nur an einer kontrafaktischen Probe + gegen die echte Historie, nicht am Selbsttest, dessen Fixture eine unrealistisch leere + Notiz war. **Das ist FB-02 im Werkzeug gegen FB-12**, und es steht hier, weil es die + Klasse ein weiteres Mal belegt: Eine Prüfung, die man nur grün gesehen hat, ist eine + Vermutung — auch dann, wenn sie einen Selbsttest hat. + + Endstand: zehn Zusicherungen, zwölf absichtliche Brüche, keine Zusicherung unbewacht. + Zwei der Brüche haben dabei zwei **untaugliche Zusicherungen** entlarvt — eine, die auf + eine Phrase prüfte, die in zwei verschiedenen Meldungen vorkommt, und eine, die schon aus + einem anderen Grund erfüllt war. + +**Vorschlag für die nächste Iteration.** Zwei Dinge, beide klein: + +1. **Das Upgrade als Vorgang mit Abnahme, nicht als Beschreibung.** Wer den Adoptionspfad + ändert, führt ihn einmal gegen ein zweites Repo aus und zitiert den Lauf. Das ist + dieselbe Forderung, die das Rahmenwerk seit v0.1.3 an jede Prüfung stellt — sie fehlt + ausgerechnet bei dem Verfahren, das jeden Übernehmer betrifft. +2. **Der Handabgleich braucht einen Widerspruch.** Denkbar als Prüfung, die die + erklärt-erweiterten Dateien gegen die *vorige* Baseline hält und meldet, wenn upstream + sie zwischen zwei Ständen angefasst hat. Sie kann nicht entscheiden, ob wir richtig + nachgezogen haben — aber sie kann sagen, dass es zu tun war. Das genügt: Der Fehler ist + Vergessen, nicht Falschmachen. + +➡️ Verwandt mit **FB-11** (Regel ohne Widerspruch) und **FB-02** (nie rot gesehen). Neu ist +hier der Gegenstand: nicht eine Regel im Arbeitsalltag, sondern das Verfahren, mit dem wir +überhaupt an neue Regeln kommen. + +*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.* diff --git a/docs/wiki/stolpersteine/werkzeug-misst-die-falsche-instanz.md b/docs/wiki/stolpersteine/werkzeug-misst-die-falsche-instanz.md new file mode 100644 index 0000000..04b2e4f --- /dev/null +++ b/docs/wiki/stolpersteine/werkzeug-misst-die-falsche-instanz.md @@ -0,0 +1,27 @@ +--- +type: wiki-page +area: stolpersteine +status: declined +harvested_in: "neckbeard v0.1.3" +--- + +# Werkzeuge messen unbemerkt die falsche Instanz + +> **Stand: vom Rahmenwerk nicht abgedeckt.** Bis zum 2026-08-21 als **FB-07** im Befundregister gefuehrt, am 2026-08-20 an das Rahmenwerk uebergeben. +> **Beleg:** Issue 0025 des Rahmenwerks wurde mit Begruendung abgelehnt. Das Muster bleibt bestehen und bleibt unseres. + +**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](../../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. diff --git a/roadmap.md b/roadmap.md index 92041c0..cce86f8 100644 --- a/roadmap.md +++ b/roadmap.md @@ -94,9 +94,10 @@ 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, 20–30 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. + Eingangsliste dafür sind die Fehlerklassen-Seiten unter + `docs/wiki/stolpersteine/` — wiederkehrende Abweichungen mit Ernte-Stand, + geclustert in [STATUS.md](STATUS.md), Wegweiser + [FRAMEWORK-BEFUNDE.md](FRAMEWORK-BEFUNDE.md). **Der Einstieg ist erfolgt:** [Struktur-Workshop (#17)](https://git.lab/axion1337.chat/management/-/issues/17) am 2026-08-06 — Visionen geschärft, M1–M4 angelegt, Board gesichtet, Kadenz und