docs: Gate 5 closeout — what this work made false, and the design doc to done

Five statements this undertaking contradicts, named rather than left
standing. Two of them are in this document's own earlier gates: the Gate-2
mapping had FB-06 as open when the framework had split the item and closed
that half in v0.1.3, and had FB-09 and FB-11 as open when v0.3.0 covers
them partly. Both only surfaced because the states were checked against the
rule text of the tags instead of the issue status.

The third is FB-12's "point 3 is fixed", whose reasoning - the error is
forgetting, not doing it wrong - was falsified by the same task. That page
is revised rather than appended to, which is the practice this project
harvested and the framework shipped in v0.1.3.

Criterion 5 stays partly met. The deterministic half ran against both of
the day's ledgers without findings; the verdict artifact must not be
written here, because its own template holds that a verdict produced in the
working session is void whatever it says.

Moving the document one level deeper broke three relative links, which
validate.py caught before the commit. Same class as everything else today:
the tool saw what the plan did not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F2Q4Ri8NGwyTZzScvKnWFM
This commit is contained in:
Thore Cimbal
2026-08-21 12:00:00 +00:00
co-authored by Claude Opus 5
parent 73afd844a1
commit 988e4b4e51
4 changed files with 114 additions and 10 deletions
+2 -4
View File
@@ -87,11 +87,9 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md).
| [0090](docs/issues/0090-gitops-59-kein-kubernetes-audit-log-zugriffe-an-der-api.md) | low | open | Kein Kubernetes-Audit-Log — Zugriffe an der API werden nicht protokolliert |
## Active design docs (1)
## Active design docs (0)
| Design | Gate | Title |
|---|---|---|
| [2026-08-21-v031-adoption-stage-2](docs/design/2026-08-21-v031-adoption-stage-2.md) | gate-3 | Design: Die Übernahme von v0.3.1 zu Ende bringen — Etappe 2 |
_none active_
## ADRs (24)
@@ -1,6 +1,6 @@
---
type: design
status: gate-3
status: done
date: 2026-08-21
size: L
related:
@@ -17,7 +17,7 @@ related:
zweistufige Übernahme von neckbeard `v0.3.1` aufgesetzt. Beim Aufsetzen
zeigte sich, dass **Etappe 1 bereits gelaufen ist** — ein paralleler
Durchlauf am selben Tag hat sie erledigt und in
[docs/ledger/2026-08-21-neckbeard-v0-3-1-upgrade.md](../ledger/2026-08-21-neckbeard-v0-3-1-upgrade.md)
[docs/ledger/2026-08-21-neckbeard-v0-3-1-upgrade.md](../../ledger/2026-08-21-neckbeard-v0-3-1-upgrade.md)
protokolliert. Dieses Dokument beschreibt deshalb **nur den Rest**, nicht
das Ganze; alles andere wäre die Klasse „Dokument behauptet einen Zustand,
den die Messung längst überholt hat" (FB-04) im eigenen Plan.
@@ -31,7 +31,7 @@ Erledigt und nachgeprüft:
| `schema.yaml` zusammengeführt — `ledger` und `verdict` vorhanden, unsere Erweiterungen (`component`, Meilenstein, Priorität) unangetastet | ✅ |
| `check_harvest.py` und `judge.py` übernommen, `validate.py` um die Portabilitätsprüfung ergänzt | ✅ |
| Ledger-Pflicht in Kraft, erstes Ledger geschrieben | ✅ |
| [ADR-0024](../adr/0024-drei-framework-dateien-erklaert-erweitert.md): drei Dateien sind **erklärte Erweiterungen** statt byte-treuer Kopien | ✅ |
| [ADR-0024](../../adr/0024-drei-framework-dateien-erklaert-erweitert.md): drei Dateien sind **erklärte Erweiterungen** statt byte-treuer Kopien | ✅ |
| **FB-12** aufgenommen: der Upgrade-Pfad war beschrieben, nie begangen | ✅ |
⚠️ **Eine Festlegung wurde dabei bewusst umgedreht**, mit Freigabe und
@@ -387,4 +387,105 @@ repariert.
`harvested` einen Beleg verlangt — welches Issue, welche Begründung. Ein
Zustand ohne Nachweis ist eine Behauptung, unabhängig davon, wie er heißt.
> **STOP — Freigabe für Gate 3.**
> **Gate 3 freigegeben durch sorb, 2026-08-21.**
## Gate 4 — Vertical Slices
| Slice | Commit | Inhalt | Status |
|---|---|---|---|
| 4.1 | `0a95437` | Tracer Bullet: Schema, Generator, eine Seite | `DONE` |
| 4.2 | `fe5286c` | Schema-Deckung als Widerspruch; zwei Befundseiten | `DONE` |
| 4.3 | `9ca5ec3` | Elf Befunde umgezogen, Stände belegt; `AGENTS.md` bereinigt | `DONE` |
| 4.4 | `09ed1f7` | Judge gelaufen, Regelabdeckung gemessen | `DONE_WITH_CONCERNS` |
Belege und Leiter-Gänge stehen im
[Ledger](../../ledger/2026-08-21-v031-adoption-stage-2.md); hier nur, was ein
Leser des Entwurfs sonst falsch verstünde.
## Gate 5 — Closeout (AAR)
**Planned vs. actual.** Geplant war Etappe 2: Befunde umziehen, Stände
setzen, Übersicht erzeugen. Alles geliefert — plus zwei Dinge, die der Plan
nicht kannte: die beiden im v0.3.1-Merge verlorenen Schema-Felder und der
Widerspruch, der ihren Verlust künftig meldet.
| # | Kriterium | Ergebnis |
|---|---|---|
| 1 | Zwölf Befunde zugeordnet, null ohne | **erfüllt** — 12/12, per Skript |
| 2 | Entschiedener Stand nennt eine Version, Beleg prüfbar | **erfüllt** — neun Seiten, am Regeltext der Tags geprüft |
| 3 | Übersicht erzeugt, `--check`-fähig | **erfüllt** — Handänderung wird rot, vorgeführt |
| 4 | Doppelter Regeltext entfernt | **erfüllt** |
| 5 | Judge läuft, Verdikt entsteht | **teilweise** — siehe unten |
| 6 | Alle Tore grün | **erfüllt** — Pipeline 624 |
**Kriterium 5 bleibt teilweise, und zwar richtigerweise.** Die
deterministische Hälfte lief gegen diesen und gegen den fremden Lauf des
Tages, beide ohne Befund. Das Verdikt-Artefakt darf hier nicht entstehen:
seine Vorlage sagt, ein in der Arbeitssitzung erzeugtes Verdikt sei
nichtig, *„whatever it says"*. Ein Agent, der seinen eigenen Lauf beurteilt,
rechtfertigt statt zu prüfen. Das gehört in eine frische Sitzung.
**Was diese Arbeit falsch gemacht hat** (Pflicht seit v0.1.3):
1. **Die Zuordnungstabelle in Gate 2 dieses Dokuments.** FB-06 stand dort
als offen — das Rahmenwerk hatte das Sammel-Item geteilt und die Hälfte
als Issue 0028 in v0.1.3 erledigt. FB-09 und FB-11 standen als offen und
sind seit v0.3.0 teilweise gedeckt. Beides kam nur heraus, weil die
Stände am Regeltext der Tags geprüft wurden statt am Issue-Status.
2. **Gate 3 dieses Dokuments**, unsichere Entscheidung 2: FB-07 und FB-08
sollten `open` bekommen, weil der Enum nichts Besseres hergab. Auf
Einwand verworfen und durchgestrichen stehen gelassen.
3. **FB-12, Punkt 3 („ist behoben").** Die dortige Begründung — *„Der
Fehler ist Vergessen, nicht Falschmachen"* — ist an derselben Aufgabe
widerlegt worden. Die Seite ist **revidiert**, nicht ergänzt.
4. **Drei Beschreibungen** in `AGENTS.md`, `README.md` und `roadmap.md`,
die `FRAMEWORK-BEFUNDE.md` als Eingangsliste führten. Nachgezogen.
5. **Gate 2s Behauptung**, die Datei entfalle. Sie kann nicht — ADR-0024
verweist darauf und ist angenommen.
**Why the difference.** Dasselbe Muster wie im vorigen Vorhaben, an neuem
Gegenstand: Jede Korrektur kam vom **Nachmessen an der Quelle**, nie vom
Nachdenken über den Plan. Die Stände waren aus dem Issue-Status plausibel
abgeleitet und in zwei von zwölf Fällen falsch. Die verlorenen Schema-Felder
waren durch eine wahrheitsgemäße Quittung gedeckt. Beides sah aus dem Plan
heraus in Ordnung aus.
**Learnings.**
- **Eine Quittung bezeugt Aufmerksamkeit, nicht Vollständigkeit.** Wer eine
Fehlerart per Annahme aus dem Entwurf entfernt („der Fehler ist X, nicht
Y"), ohne Y zu messen, baut die Lücke ein, die er beschreibt.
- **Ein Zustand, den das Feld nicht ausdrücken kann, wird nicht durch einen
falschen Zustand ersetzt** — der Enum wird erweitert. Der Einwand kam von
sorb, nachdem ich das Gegenteil begründet hatte.
- **Die Commit-Spalte des Ledgers erzwingt eine Reihenfolge.** Eine Zeile,
die im selben Commit entsteht wie die Arbeit, kann dessen SHA nicht
nennen. Der Judge hat mich zweimal darauf gestoßen.
- **Ein Warnblock ohne Gegenstand ist schädlicher als keiner.** Der erste
Entwurf beanstandete zwei völlig korrekte Seiten, weil `status` optional
ist. Eine Dauerbeschwerde bringt Leuten bei, den Abschnitt zu überblättern.
- **Die Kontrolle kann stumpfer sein als die Prüfung.** Zweimal lag der
Fehler nicht im Werkzeug, sondern in meiner Gegenprobe — eine unrealistische
Fixture und ein Auswerter, der einen Absturz nicht von einem Fehlschlag
unterschied.
**Harvested.** Zwei neue `stolpersteine`-Seiten für die nächste Übergabe:
*„Eine Quittung bezeugt Aufmerksamkeit, nicht Vollständigkeit"* und *„Eine
Datei kann nicht maßgeblich und zugleich unveränderlich sein"*. Beide
`status: open`, beide mit dem verallgemeinerten Teil für das Rahmenwerk.
**Open uncertainties.**
1. **Das Verdikt fehlt.** Bis eine frische Sitzung es schreibt, ist der
Judge hier zur Hälfte ungenutzt.
2. **Für `validate.py` und `gen_status.py` gibt es keinen strukturellen
Vergleich.** Der Handabgleich trägt dort weiterhin nur die Quittung —
deren Grenze gerade belegt wurde.
3. **`partly` für FB-09 und FB-11 ist ein Urteil**, kein Messwert. Der
Ledger deckt sie beobachtbar ab, nicht durchsetzbar; wer strenger urteilt,
käme auf `open`.
4. **Ein Muster ohne Stand ist von einer gewöhnlichen Seite nicht zu
unterscheiden**, seit der Warnblock neutral ist. In der Sache richtig,
aber es heißt: Der Verlust eines Standes fällt niemandem auf.
> **STOP — Freigabe für Gate 5.**
@@ -4,7 +4,7 @@ date: 2026-08-21
size: L
status: open
related:
- "docs/design/2026-08-21-v031-adoption-stage-2.md"
- "docs/design/done/2026-08-21-v031-adoption-stage-2.md"
---
# Ledger: Die Übernahme von v0.3.1 zu Ende bringen
@@ -66,7 +66,12 @@ Prüfungen macht.
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.**
- **Punkt 3 ist ⚠️ nur halb behoben** — revidiert am 2026-08-21, siehe
[Eine Quittung bezeugt Aufmerksamkeit, nicht Vollständigkeit](quittung-bezeugt-aufmerksamkeit.md).
Der Widerspruch verlangt eine Quittung und prüft damit, **ob** nachgezogen
wurde, nicht **ob vollständig**. Beim selben Upgrade wurde er quittiert und
verlor trotzdem zwei Schema-Felder. Für `schema.yaml` gibt es seither einen
strukturellen Vergleich; für die beiden Python-Dateien nicht.
[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