docs: Gate 5 closeout - AAR, harvest, design doc done

The design doc closes with its AAR (planned/actual/why/learnings, the
six acceptance criteria checked off 6/6, the session's shakiest calls
named) and moves to docs/design/done/ with status done. Harvest: a
stolpersteine wiki page distilled from the AAR (hex is not a git SHA,
TZ on the git process, python floor, anonymous Gitea negatives,
negative tests, directory links), and the neckbeard feedback list
becomes issue 0040 - a deliberate separate act, per the design's
non-goals. Operational follow-up is issues 0041 (refine imported
wartegrund) and 0042 (go-live: push, first mirror run, CI schedule,
milestone for gitops#61). Final chain green: validate 0/0 over 36 open
issues, gen_status --check current, drift 0, prosa 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Thore Cimbal
2026-08-11 12:00:00 +00:00
co-authored by Claude Fable 5
parent 865d761fb0
commit c481165ab4
11 changed files with 230 additions and 19 deletions
@@ -1,6 +1,6 @@
---
type: design
status: gate-4
status: done
date: 2026-08-11
size: L
related:
@@ -137,8 +137,8 @@ bleibt GitLab/Obsidian/Editor. Mockups entfallen.
Alt-Ansatz: `CLAUDE.md`, `roadmap.md`, `decisions/README.md` und die
tragenden Entscheidungen 0001, 0002, 0005, 0009, 0010,
[verfahren/refinement.md](../wiki/admin/refinement.md),
[verfahren/stillstandspruefung.md](../wiki/admin/stillstandspruefung.md),
[verfahren/refinement.md](../../wiki/admin/refinement.md),
[verfahren/stillstandspruefung.md](../../wiki/admin/stillstandspruefung.md),
`.gitlab-ci.yml`, Auszüge aus `hosts/`. Neckbeard v0.1.1: AGENTS.md,
WORKFLOW.md, ADR-0001…0004/0006, `schema.yaml`, `validate.py`,
`gen_status.py`, Schöpfungs-AAR, `docs/wiki/index.md`. Session-1-Daten
@@ -157,7 +157,7 @@ bleibt auch mit neckbeard ein Loch:
| Muster | Wurzel im Alt-Ansatz | Neckbeard-Gegenstück | Verbleibendes Loch → Mechanismus dieser Migration |
|---|---|---|---|
| **A** — Doku nicht nachgezogen (F-001, F-005, F-007, F-010, F-017) | Zustand steht als behauptete Zahl/Prosa an mehreren Stellen; nichts vergleicht | Generiertes STATUS.md (`gen_status.py --check` in CI), ADRs nie editiert nur abgelöst | Prosa, die *Forge*-Zustand behauptet, prüft neckbeard nicht → Drift-Prüfung Repo↔GitLab; Meilenstein-Satz als Schema-Enum (eine Quelle); „Stand"-Etiketten entfallen ersatzlos (git log antwortet) |
| **B** — Regel repo-weit, Anwendung Teilmenge (F-002, F-003, F-008, F-011) | Regel gilt „für alle Repos", kein Artefakt zählt die Repos auf, kein Skript läuft über alle | **Lücke** — ADR-0001 endet an der Repo-Grenze | Komponenten-Artefakt + Abgleich gegen die zur Laufzeit gelesene Gruppenliste ([ADR-0013](../adr/0013-gruppenregeln-kanonisch-mit-pruefung.md)); Git-Hygiene-Prüfung (12:00Z-Zeitstempel, kanonische Identität) über alle deklarierten Repos |
| **B** — Regel repo-weit, Anwendung Teilmenge (F-002, F-003, F-008, F-011) | Regel gilt „für alle Repos", kein Artefakt zählt die Repos auf, kein Skript läuft über alle | **Lücke** — ADR-0001 endet an der Repo-Grenze | Komponenten-Artefakt + Abgleich gegen die zur Laufzeit gelesene Gruppenliste ([ADR-0013](../../adr/0013-gruppenregeln-kanonisch-mit-pruefung.md)); Git-Hygiene-Prüfung (12:00Z-Zeitstempel, kanonische Identität) über alle deklarierten Repos |
| **C** — zwei Backlogs (F-004, F-009) | `hosts/`-Markdown hielt „Nächste Schritte" neben dem Board | In-Repo-Issues, ein Ort | Wiki-Seiten können wieder Aufgabenprosa ansammeln → Prüfregel: Aufgaben-Marker („Nächster Schritt", offene Checkboxen) in Wiki-Seiten ohne Issue-Verweis sind ein Befund |
| **D** — Artefakte ohne Eigentümer überleben (F-006, F-012) | Branches/SHA-Zitate hat niemand je gelesen | `warn_if_orphan` nur für Wiki-Seiten | Branch-Hygiene (Alter/Divergenz verwaister Branches) und SHA-Auflösung inkl. Zuordnungstabelle in der Prüf-Familie; Refinement-Agenda erhält den Punkt |
@@ -165,9 +165,9 @@ Die sieben neckbeard-Lücken, Disposition (Akzeptanzkriterium 6, 7/7):
| # | Lücke | Disposition |
|---|---|---|
| 1 | Viele Repos, ein Regelwerk | **Eingefaltet:** [ADR-0013](../adr/0013-gruppenregeln-kanonisch-mit-pruefung.md) (Pointer + Prüfung) |
| 1 | Viele Repos, ein Regelwerk | **Eingefaltet:** [ADR-0013](../../adr/0013-gruppenregeln-kanonisch-mit-pruefung.md) (Pointer + Prüfung) |
| 2 | Kein Komponenten-Artefakt | **Eingefaltet:** Schema-Typ `component`, `docs/components/` (ADR-0013) |
| 3 | Kein Meilenstein-Konzept | **Eingefaltet:** Pflichtfeld `milestone` im Issue-Schema ([ADR-0012](../adr/0012-issues-im-repo-gitlab-als-spiegel.md)) |
| 3 | Kein Meilenstein-Konzept | **Eingefaltet:** Pflichtfeld `milestone` im Issue-Schema ([ADR-0012](../../adr/0012-issues-im-repo-gitlab-als-spiegel.md)) |
| 4 | SHA-Zitate unaufgelöst | **Eingefaltet (projektseitig):** Prüfskript nach Vorbild `inv_shas.py`; Upstream-Kandidat |
| 5 | Git-Hygiene außerhalb des Blickfelds | **Eingefaltet (projektseitig):** Hygiene-Prüfung in der CI-Familie; Upstream-Kandidat |
| 6 | Externe Link-Ziele ungeprüft | **Teilweise eingefaltet:** Sperrliste stillgelegter Ziele (toter Gitea-Tracker, F-005) als deterministische Prüfung; echte Erreichbarkeitsprüfung **verworfen** (netzabhängig, nichtdeterministisch — widerspricht validate-Philosophie) |
@@ -243,10 +243,10 @@ flowchart LR
Die zwei tragenden Richtungsentscheidungen stehen als ADRs (Status
`proposed`, werden mit diesem Gate wirksam):
- **[ADR-0012](../adr/0012-issues-im-repo-gitlab-als-spiegel.md)** —
- **[ADR-0012](../../adr/0012-issues-im-repo-gitlab-als-spiegel.md)** —
Issues im Repo kanonisch (Management-Scope), GitLab als
deterministisch bespielter Spiegel; Optionen A/B/C abgewogen im ADR.
- **[ADR-0013](../adr/0013-gruppenregeln-kanonisch-mit-pruefung.md)** —
- **[ADR-0013](../../adr/0013-gruppenregeln-kanonisch-mit-pruefung.md)** —
Gruppenregeln kanonisch hier, Komponenten tragen Pointer, ein
Komponenten-Artefakt macht die Gruppe prüfbar; Kopie/Submodule
verworfen im ADR.
@@ -542,3 +542,101 @@ Komponenten-Deklarationen, `gruppenpruefung.py` (+ CI-Job),
Export ↔ Alt-CLAUDE) und B (Hygiene über lokale Klone), Live-Befund
gitops#61.
*Verify:* Dry-Run-Ausgabe plausibel, Demos feuern, kein API-Write.
Alle fünf Slices sind mit Nachweis und STOP abgenommen worden
(Freigaben sorb, 2026-08-11); die Commits `e36ed33``865d761` tragen
die Evidenz je Slice im Commit-Text.
## Gate 5 — Closeout (AAR)
### Geplant
Gate 05 nach WORKFLOW.md; Zwei-Wege-Ernte vor Übernahme (bindende
Vorgabe der Session-1-Übergabe); fünf Slices; sechs Akzeptanzkriterien.
### Tatsächlich
Alle Gates und Slices wie geplant, mit vier realitätsgetriebenen
Abweichungen:
1. **Die Realität lief während der Undertaking weiter** (Hinweis sorb
bei Gate-3-Freigabe): `main` +3 Commits mit `decisions/0011`
Nummernkollision mit den Session-ADRs, Umnummerierung auf 0012/0013,
Rebase; gitops#61 entstand **ohne Meilenstein** und riss die
100%-Disziplin aus F-014 binnen zwei Tagen — es wurde der reale Fall
für die neue gruppenweite Pflicht-Prüfung.
2. **F-004 war feiner als der Befund:** MATRIX-05 seit 2026-08-01
erledigt (kein Issue nötig — „Alles *Offene* ist ein Issue"),
CFGMON-12/13 bereits per git.lab-Issues verfolgt (nur die toten
Gitea-Links verdeckten das). Statt 5/5 neuen Issues: 2 neue (0033,
0034), 2 verifizierte Verweise, 1 begründeter Verzicht — mit sorb
abgestimmt; Details im
[Import-Protokoll](../../sources/migration/issue-import-protokoll.md).
3. **F-005 war größer als der Befund:** nicht ein toter Tracker-Link,
sondern acht, quer durch Host-Seiten und einen importierten
Issue-Fußtext; zwei per Live-Titelabgleich verifiziert umgezogen,
sechs zu ehrlichen Historien-Zitaten entschärft.
4. **Hex ist nicht gleich Git-SHA:** die SHA-Prüfung fand eine
Authentik-uid und zwei Alertmanager-Silence-IDs — gelöst über die
kuratierte Ausnahmenliste mit Grund je Zeile statt über eine
schlauere Heuristik.
Akzeptanzkriterien: **6/6 erfüllt** — (1) alle deterministischen Gates
grün; (2) 11/11 ADRs portiert; (3) 0 issuelose Arbeitspunkte im Wiki,
F-004-Disposition dokumentiert; (4) 0 Handzählungen, kein Dokument
widerspricht dem Werkzeugstand M1M5; (5) 4/4 Muster-Demos gefeuert
(A: „M1M4"↔M5-Export; B: 222 Echtzeit-Commits, deckungsgleich mit den
Session-1-Zahlen; C: 6→0 Aufgabenblöcke; D: verwaiste SHAs aufgelöst
oder kuratiert); (6) 9/9 Lücken-Dispositionen und 4/4
Erhaltungsmechanismen in Gate 2, final abgehakt.
### Warum die Differenz
Die Undertaking hat einen lebenden Verbund migriert, keinen
eingefrorenen: Jede Abweichung entstand daraus, dass zwischen Analyse
(2026-08-09/10) und Bau (2026-08-11) weitergearbeitet wurde. Genau die
Driftklassen, die die Migration schließen soll, traten währenddessen
frisch auf — und wurden zu Testfällen statt zu Störungen.
### Lehren (geerntet nach [Stolpersteine](../../wiki/stolpersteine/neckbeard-migration.md))
- Ein hexförmiges Wort ist nicht automatisch ein Git-SHA; kuratierte
Ausnahmen mit Grund schlagen schlauere Raterei.
- Der Link-Checker ist das beste Umzugswerkzeug: erst bewegen, dann die
gemeldeten Ziele reihum fixen — kein Verweis blieb offen.
- Frische Importe sind Prüfmaterial: beide Prosa-Prüfungen fanden auf
den eben importierten Texten sofort echte Fälle.
- Bestätigt aus dem Upstream-Schöpfungs-AAR: ein grüner Validator zählt
erst mit Negativtests (vier gebaut, alle feuern).
- `gen_status.py` braucht lokal Python ≥ 3.10 (`write_text(newline=)`);
CI nutzt 3.12, lokal läuft ein venv.
- Session-1-Lehre erneut bestätigt: `TZ` gehört an den git-Prozess
(`--date=format-local` + `TZ=UTC` in `gruppenpruefung.py`).
### Wackligste Entscheidungen dieser Session (WORKFLOW.md, Session-Ende)
1. **AAR-Erntestatus der vier alten AARs** aus der Retro-Existenz
geschlossen, nicht aus einer Erntemarke — beim nächsten Refinement
gegenprüfen.
2. **Die §6-Verdichtung der Alt-CLAUDE.md**: von sorb quergelesen und
freigegeben, aber ob jede tragende Nuance den Sprung geschafft hat,
zeigt erst der Betrieb.
3. **Generische `wartegrund`-Platzhalter** bei 7 importierten
waiting-Issues — Issue 0041.
4. **Die fünf eigenen Identitäten stehen als Konstante im
Hygiene-Skript** — bei einer künftigen Identitäts-Remediation
(F-003) muss die Liste mitgepflegt werden.
5. **Spiegelumfang bewusst schmal** (keine Beschreibungen): richtig für
Kommentar-Erhalt, heißt aber, dass Beschreibungs-Änderungen im Repo
auf GitLab nicht sichtbar werden — Board-Nutzer sehen den Stand der
Migration, nicht jede Textpflege.
### Offene Folgearbeit (als Issues, nicht als Prosa)
[00350039](../../issues/0035-rollout-agents-pointer-axion1337-chat-gitops.md) Pointer-Rollout je Komponente (fünf Issues) ·
[0040](../../issues/0040-neckbeard-rueckmeldungen-einreichen.md)
neckbeard-Rückmeldungen einreichen ·
[0041](../../issues/0041-wartegrund-der-importierten-waiting-issues.md)
wartegrund präzisieren ·
[0042](../../issues/0042-migration-in-betrieb-nehmen-push-spiegel-schedule.md)
Inbetriebnahme (Push, erster Spiegel-Lauf, CI-Schedule).