diff --git a/docs/adr/0011-issues-im-repo-gitlab-als-spiegel.md b/docs/adr/0012-issues-im-repo-gitlab-als-spiegel.md similarity index 98% rename from docs/adr/0011-issues-im-repo-gitlab-als-spiegel.md rename to docs/adr/0012-issues-im-repo-gitlab-als-spiegel.md index 03f0768..4631a49 100644 --- a/docs/adr/0011-issues-im-repo-gitlab-als-spiegel.md +++ b/docs/adr/0012-issues-im-repo-gitlab-als-spiegel.md @@ -1,6 +1,6 @@ --- type: adr -id: "0011" +id: "0012" status: accepted date: 2026-08-11 supersedes: null @@ -11,7 +11,7 @@ related: - "decisions/0005-pm-framework-kanban.md" --- -# ADR-0011: Issues leben im Repo; GitLab wird deterministisch bespiegelt +# ADR-0012: Issues leben im Repo; GitLab wird deterministisch bespiegelt ## Kontext diff --git a/docs/adr/0012-gruppenregeln-kanonisch-mit-pruefung.md b/docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md similarity index 98% rename from docs/adr/0012-gruppenregeln-kanonisch-mit-pruefung.md rename to docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md index 07c57f1..2097df5 100644 --- a/docs/adr/0012-gruppenregeln-kanonisch-mit-pruefung.md +++ b/docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md @@ -1,6 +1,6 @@ --- type: adr -id: "0012" +id: "0013" status: accepted date: 2026-08-11 supersedes: null @@ -10,7 +10,7 @@ related: - "decisions/0001-gitlab-kanonisch-push-mirror.md" --- -# ADR-0012: Gruppenregeln kanonisch im management-Repo, Komponenten zeigen und werden geprüft +# ADR-0013: Gruppenregeln kanonisch im management-Repo, Komponenten zeigen und werden geprüft ## Kontext diff --git a/docs/design/2026-08-11-neckbeard-migration.md b/docs/design/2026-08-11-neckbeard-migration.md index 168cb20..30a879a 100644 --- a/docs/design/2026-08-11-neckbeard-migration.md +++ b/docs/design/2026-08-11-neckbeard-migration.md @@ -8,8 +8,8 @@ related: - "decisions/0005-pm-framework-kanban.md" - "decisions/0009-commit-konventionen-und-historien-anonymisierung.md" - "decisions/0010-haertung-eigener-meilenstein.md" - - "docs/adr/0011-issues-im-repo-gitlab-als-spiegel.md" - - "docs/adr/0012-gruppenregeln-kanonisch-mit-pruefung.md" + - "docs/adr/0012-issues-im-repo-gitlab-als-spiegel.md" + - "docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md" --- # Design: Migration des Management-Systems auf neckbeard @@ -69,9 +69,10 @@ wurde. 1. **Deterministische Gates grün:** `scripts/validate.py` meldet auf dem migrierten Repo 0 Fehler; `scripts/gen_status.py --check` meldet STATUS.md aktuell. -2. **Entscheidungen portiert:** alle 10 Entscheidungen - (`decisions/0001…0010`) liegen als ADRs mit schema-konformem - Frontmatter unter `docs/adr/` — 10/10 validieren. +2. **Entscheidungen portiert:** alle Entscheidungen aus `decisions/` + liegen als ADRs mit schema-konformem Frontmatter unter `docs/adr/` — + 11/11 validieren *(bei Gate-1-Freigabe 10; `decisions/0011` kam am + 2026-08-11 hinzu, siehe Nachtrag in Gate 3)*. 3. **Ein Backlog:** die fünf Arbeitspunkte aus F-004 (OVERMIND-01, CFGMON-11/12/13, MATRIX-05) existieren als Issues im kanonischen System — 5/5; 0 offene „Nächste Schritte" in `hosts/` ohne @@ -156,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-0012](../adr/0012-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 | @@ -164,9 +165,9 @@ Die sieben neckbeard-Lücken, Disposition (Akzeptanzkriterium 6, 7/7): | # | Lücke | Disposition | |---|---|---| -| 1 | Viele Repos, ein Regelwerk | **Eingefaltet:** [ADR-0012](../adr/0012-gruppenregeln-kanonisch-mit-pruefung.md) (Pointer + Prüfung) | -| 2 | Kein Komponenten-Artefakt | **Eingefaltet:** Schema-Typ `component`, `docs/components/` (ADR-0012) | -| 3 | Kein Meilenstein-Konzept | **Eingefaltet:** Pflichtfeld `milestone` im Issue-Schema ([ADR-0011](../adr/0011-issues-im-repo-gitlab-als-spiegel.md)) | +| 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)) | | 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) | @@ -178,11 +179,11 @@ Die sieben neckbeard-Lücken, Disposition (Akzeptanzkriterium 6, 7/7): | Wert | Erhaltungsmechanismus | |---|---| -| **F-014** Issue-Hygiene (Meilensteinpflicht, eine Priorität, ein Status, WIP-Limit, keine ID-Wiederverwendung) | Wird von Konvention zu Schema: `milestone`/`priority` Pflichtfelder, Status-Enum, WIP-Limit als Validator-Regel, Duplikat-ID-Prüfung existiert in `validate.py` bereits; Board bleibt via Spiegel erhalten (ADR-0011) | +| **F-014** Issue-Hygiene (Meilensteinpflicht, eine Priorität, ein Status, WIP-Limit, keine ID-Wiederverwendung) | Wird von Konvention zu Schema: `milestone`/`priority` Pflichtfelder, Status-Enum, WIP-Limit als Validator-Regel, Duplikat-ID-Prüfung existiert in `validate.py` bereits; Board bleibt via Spiegel erhalten (ADR-0012) | | **F-013** Mirror-Topologie mit Begründung, Gegenargument, Rettungspfad | Alt-ADRs 0001/0004 werden unverändert portiert; die „Warum zwei Orte"-Prosa und der Rettungspfad ziehen als Wiki-Seiten um; Mirror-Sync bleibt Stillstandsprüfung | | **F-015** Rewrite-Zuordnung, 251/251 verifiziert | `shared/commit-zuordnung-2026-08-07.md` → `docs/sources/` (unveränderlich, agentenschreibgeschützt); SHA-Prüfung löst über die Tabelle auf; die Zuordnungs-Auflage für künftige Rewrites steht im portierten ADR-0009 | | **F-016** Redliche Selbstdokumentation | „Redlichkeit"-Regeln ziehen in den Projektabschnitt von AGENTS.md; AAR-/Retro-Kultur bleibt (AARs → `docs/aar/`, Retro-Protokolle → `docs/sources/`) | -| Stillstandsprüfungs-Prinzipien | Bleiben wörtlich: Prüfungen nur aus realen Fällen; „kann nicht prüfen" ist Befund, nicht Skip; Abbruch statt stillem Überspringen; Projektliste zur Laufzeit. Die neuen Gruppen-Prüfungen (ADR-0012, Hygiene, Drift) treten dieser Familie bei | +| Stillstandsprüfungs-Prinzipien | Bleiben wörtlich: Prüfungen nur aus realen Fällen; „kann nicht prüfen" ist Befund, nicht Skip; Abbruch statt stillem Überspringen; Projektliste zur Laufzeit. Die neuen Gruppen-Prüfungen (ADR-0013, Hygiene, Drift) treten dieser Familie bei | | Board-Pflege-Rechte (Zusage-Spalten nur sorb) | Prozessregel im AGENTS.md-Projektabschnitt; Refinement-Ablauf zieht als Wiki-Seite um und instanziiert die WORKFLOW-Agenda (Board rechts-nach-links, Nachziehen, Entscheidungsvorlagen mit Empfehlung, Datumspflicht) | | ADR-Pflicht bei dauerhaften Ausnahmen | Übernommen in den Projektabschnitt — neckbeard kennt diese Regel selbst nicht (Upstream-Kandidat) | @@ -194,7 +195,7 @@ werkzeugwidersprechend — Nicht-Ziel „kein Umschreiben"): | Alt | Neu | |---|---| | `CLAUDE.md` | Ein-Zeilen-Pointer; Regeln → `AGENTS.md` (Upstream-Abschnitte wörtlich + Abschnitt „Gruppenregeln"); Karpathy-Block wortgleich → `docs/sources/regelwerk/karpathy-guidelines.md`, aus AGENTS.md zitiert *(freigegeben von sorb, 2026-08-11)* | -| `decisions/0001…0010` | `docs/adr/0001…0010`, Frontmatter ergänzt, Text unverändert; `decisions/` entfällt, Verweise nachgezogen | +| `decisions/0001…0011` | `docs/adr/0001…0011`, Frontmatter ergänzt, Text unverändert; `decisions/` entfällt, Verweise nachgezogen | | `roadmap.md` | Bleibt als Linien/Reihenfolge-Prosa; alle Zählungen und „Stand"-Blöcke raus (→ generiertes STATUS.md); M5 statt „offene Frage" (F-001) | | `verfahren/aar/*` (5) | `docs/aar/*`, Frontmatter (`open`/`harvested` nach Retro-Lage) | | `verfahren/retro/*` | `docs/sources/protokolle/*` (unveränderliche Protokolle) | @@ -242,10 +243,10 @@ flowchart LR Die zwei tragenden Richtungsentscheidungen stehen als ADRs (Status `proposed`, werden mit diesem Gate wirksam): -- **[ADR-0011](../adr/0011-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-0012](../adr/0012-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. @@ -330,12 +331,13 @@ ausgewiesen), `STATUS.md` (generiert). **Wurzel — entfällt (git mv):** `decisions/`, `hosts/`, `verfahren/`, `vision/`, `shared/`. -**`docs/adr/`:** `0001…0010` portiert (Frontmatter ergänzt; Datum = +**`docs/adr/`:** `0001…0011` portiert (Frontmatter ergänzt; Datum = Original-Datum; Body unverändert bis auf umgezogene Link-Ziele), -`0011`/`0012` (accepted), `template.md` (v0.1.1). -**`docs/aar/`:** die 5 AARs aus `verfahren/aar/` (Dateinamen bleiben, +`0012`/`0013` (accepted), `template.md` (v0.1.1). +**`docs/aar/`:** die 6 AARs aus `verfahren/aar/` (Dateinamen bleiben, Frontmatter: die vier vom 2026-08-01/02 `harvested` — von der Retro -2026-08-09 geerntet; `2026-08-09-refinement-und-betrieb.md` `open`), +2026-08-09 geerntet; `2026-08-09-refinement-und-betrieb.md` und +`2026-08-11-apo-calls-profile-zeile.md` `open`), `template.md` (v0.1.1; ersetzt `aar-vorlage.md`). **`docs/issues/`:** Import aller offenen management-Issues als `NNNN-slug.md` (NNNN = GitLab-iid, vierstellig; Slug deterministisch @@ -414,7 +416,10 @@ gruppenpruefung.py # Lab-CI, Token aus Umgebung, A # Gruppenliste (Laufzeit) ↔ docs/components/; # Pointer-Präsenz je active/staged-Komponente; # Issue-Drift docs/issues ↔ GitLab (Titel/Status/ - # Meilenstein/Priorität); Git-Hygiene (Commits nach + # Meilenstein/Priorität); Meilenstein- und + # Prioritätspflicht über ALLE offenen Gruppen-Issues + # (realer Fall: gitops#61, siehe Nachtrag); + # Git-Hygiene (Commits nach # 2026-08-07 ≠ 12:00:00Z oder fremde Identität = Befund) spiegel_issues.py [--ausfuehren] # Default Dry-Run: druckt geplante API-Aufrufe; # --ausfuehren nur durch sorb; Repo → GitLab, nie zurück @@ -472,3 +477,31 @@ Abbruch statt Skip). 6. **`gen_status.py`-Fork-Tiefe**: je mehr das Generat zeigt, desto weiter entfernt es sich vom Upstream; gewählt ist die kleinste Erweiterung, die die Roadmap-Zahlen ersetzt. + +### Nachtrag 2026-08-11 — die Realität lief nach Gate-3-Freigabe weiter + +Hinweis von sorb bei der Gate-3-Freigabe, per Fetch und Live-API +(read-only) verifiziert: + +- **management `main` +3 Commits:** AAR + `2026-08-11-apo-calls-profile-zeile.md` (+ Nachtrag) und — kritisch — + **`decisions/0011`** (Enrollment-Localpart-Kollision). Das alte Schema + zählt parallel weiter; die Session-ADRs kollidierten mit der Nummer + und wurden zu **0012/0013** umnummeriert (genau die Duplikat-ID-Klasse, + die `validate.py` künftig mechanisch meldet). Branch auf + `origin/main` rebasiert. +- **gitops +2 Commits** (MAS-Fix, Runbook); beide und alle drei + management-Commits halten die Hygiene-Regeln (12:00:00Z, kanonische + Identität) — geprüft. +- **Live-Backlog: 72 offen** (Import zählt beim Lauf, nicht aus diesem + Text). **gitops#61 trägt keinen Meilenstein** und das neue Label + `area:authentik` — die 100%-Meilenstein-Disziplin (F-014) ist binnen + zwei Tagen real gerissen. Konsequenz: `gruppenpruefung.py` prüft die + Meilenstein-/Prioritätspflicht über alle offenen Gruppen-Issues (der + reale Fall, den die Stillstandsprüfungs-Regel für neue Prüfungen + verlangt, existiert hiermit). Management-Scope: 26 offene Issues, + iids 1–32. +- Zahlen im Dokument nachgezogen: 11 Alt-ADRs, 6 AARs, + Akzeptanzkriterium 2 = 11/11. Die Enums bleiben, wie in Annahme 2 + benannt, aus dem management-Scope abgeleitet; `area:authentik` liegt + außerhalb (gitops) und wird erst bei dessen Adoption Schema-Thema.