feat: the twelve findings move to pages with a proven harvest state
Slice 4.3. Every finding is now a stolpersteine page carrying its state, and the mapping is discharged mechanically: twelve findings in the register's last hand-maintained revision, twelve pages naming their origin, zero unassigned. The states were verified against the rule text of the tags, not derived from issue status - and that turned up two errors in my own Gate-2 mapping. FB-06 was listed as open; the framework had actually split the combined item and closed that half as issue 0028 in v0.1.3, whose WORKFLOW.md carries "Name what this work made false" verbatim. FB-09 and FB-11 were listed as open too; v0.3.0 covers them partly through the ledger and the ladder's trace duty, so they are `partly` with the version named. Two are `declined`: the framework considered them and will not cover them, so they remain ours. That state exists because writing `open` for a decided matter is the failure class this undertaking exists to clear. The texts are not edited. They came out of git at the register's last revision and moved unchanged; only repo-relative links were rewritten, because inline links resolve against the file. Also done: the duplicated half of the ADR rule is gone from the project section - permanent exceptions have been upstream since v0.1.2 - and three descriptions that still called the register an inbox now describe the pages, the generated overview and the signpost. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F2Q4Ri8NGwyTZzScvKnWFM
This commit is contained in:
co-authored by
Claude Opus 5
parent
fe5286c420
commit
9ca5ec3b6d
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -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**.
|
||||
@@ -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.*
|
||||
@@ -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.
|
||||
+4
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user