Files
management/docs/design/2026-08-11-neckbeard-migration.md
T
Thore CimbalandClaude Fable 5 70e81e2ff1 feat: slice 2 - all eleven decisions ported to docs/adr
Gate 4, slice 2: decisions/0001-0011 moved via git mv with schema
frontmatter prepended (status and date taken from each body's own
Status line - 0007 stays proposed, its decision is open in #20; bodies
unchanged except relative links gaining one directory level). The old
scheme's README and template retire - their rules already live in
AGENTS.md section 6 and the neckbeard ADR template. Every reference to
decisions/ across the tree retargeted (root files, not-yet-moved
verfahren/hosts/shared files, design doc and session ADR frontmatter).

Verified: validate 0 errors (11 ported + 2 session ADRs + duplicate-id
guard), gen_status --check current with all 13 ADRs listed, drift
check 0 findings, negative test shows a cloned id 0012 firing the
duplicate check.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 12:00:00 +00:00

33 KiB
Raw Blame History

type, status, date, size, related
type status date size related
design gate-4 2026-08-11 L
PROJECT.md
docs/adr/0005-pm-framework-kanban.md
docs/adr/0009-commit-konventionen-und-historien-anonymisierung.md
docs/adr/0010-haertung-eigener-meilenstein.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

Grundlage: der Feldtest-Report auf dem Branch Neckbeard-v0.1.1-analyse-1 (Session 1, eingefroren; Befunde F-001…F-017), gemessen gegen neckbeard v0.1.1 @ 823a08cac6b03a47d7e2f661200a49ac6e09d38d. Bindende Vorgabe aus der Übergabe: erst die Fehlermuster beider Ansätze durcharbeiten und den Wert des alten Ansatzes in neckbeard einfalten — Übernahme erst danach.

Gate 1 — Produkt

Problem

Das Management-Repo steuert fünf Komponenten-Repos und sich selbst mit einem eigenen Regelwerk. Der Feldtest zeigt: Das Regelwerk ist nicht verfallen, sondern ungleich durchgesetzt. Wo ein Werkzeug die Regel hält, hält sie vollständig — alle 71 offenen Issues haben genau einen Meilenstein, das WIP-Limit steht, 0 von 161 Dokument-Links sind tot (F-014). Wo nichts prüft — Prosa, Git-Metadaten, Übereinstimmung zweier Dateien — versagt dasselbe Regelwerk wiederholt, in vier Mustern:

  • A — Entscheidung im Werkzeug vollzogen, Doku nicht nachgezogen: M5 existiert und trägt 14 Issues, aber roadmap.md stellt ihn als offene Frage dar und die kanonische Arbeitsgrundlage bindet Issues an „M1M4" (F-001; ferner F-005, F-007, F-010, F-017).
  • B — Regel repo-weit erklärt, auf eine Teilmenge angewandt: Zeitstempel-Anonymisierung erreicht 1 von 6 Repos, 5 Autor-Identitäten einer Person überleben, 4 von 5 Komponenten haben kein versprochenes CLAUDE.md, fünf Komponenten tragen vier Namensschemata (F-002, F-003, F-008, F-011).
  • C — zwei Backlogs, eine Regel: fünf offene Arbeitspunkte leben nur in hosts/-Markdown, unsichtbar für Board, Meilenstein und Priorität (F-004, F-009).
  • D — Artefakte überleben ihren Zweck ohne Eigentümer: verwaiste Branches publizieren Vor-Rewrite-Historie, zitierte SHAs sind unauflösbar (F-006, F-012).

Betroffen sind sorb und jede Agenten-Session: Jede neue Session wird von der kanonischen Datei falsch geprimt und würde vollzogene Entscheidungen rückgängig machen. Neckbeard adressiert genau diese Klasse — hält aber selbst sieben im Feldtest belegte Lücken, allen voran: ADR-0001 löst „ein Repo, viele Harnesse", dieses Projekt ist „viele Repos, ein Regelwerk", und für die Frage, wo die 71 offenen GitLab-Issues nach der Migration leben, existiert nur eine aufgeschobene Option C. Beide Entscheidungen fallen in Gate 2, jeweils als ADR.

Das Produkt dieser Undertaking: das Management-System dieses Repos auf neckbeard umziehen, so dass die vorhandene Disziplin von Stellen, die nur ein Mensch prüfen kann, an Stellen wandert, die ein Skript prüft — nachdem der Wert des alten Ansatzes (F-013…F-016, Meilenstein-/ Prioritäts-Evidenz, Mirror-Topologie-Prosa) in neckbeard eingefaltet wurde.

Akzeptanzkriterien (verifizierbar)

  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 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 Issue-Referenz.
  4. Generierte statt behaupteter Zustand: 0 handgepflegte Zählungen und „Stand"-Etiketten in kanonischen Dateien, wo ein Generat sie ersetzt; kein kanonisches Dokument widerspricht dem Werkzeugstand bei den Meilensteinen (M1M5).
  5. Muster → Mechanismus: für jedes Driftmuster AD benennt das Design mindestens einen deterministischen Check, und pro Muster feuert mindestens ein Check nachweislich auf dem Vor-Migrations-Stand — 4/4 demonstriert.
  6. Ernte dokumentiert: 7/7 neckbeard-Lücken mit Disposition (eingefaltet / als Framework-Issue notiert / verworfen mit Grund); 4/4 Works-well-Befunde mit benanntem Erhaltungsmechanismus oder begründetem Verzicht.

Nicht-Ziele

  • Keine Historien-Umschreibung. Die F-002/F-003-Remediation ist ein eigener Vorgang mit eigener bindender Auflage (Zuordnung im Stil von shared/commit-zuordnung-2026-08-07.md); diese Undertaking darf ihr nur nicht im Weg stehen.
  • Kein Push nach git.lab oder Gitea; der Branch bleibt lokal bis zur Freigabe durch sorb.
  • Keine Änderung am neckbeard-Upstream. Lücken werden hier dispositioniert; sie dort einzureichen ist ein eigener Akt.
  • Kein Rollout in die fünf Komponenten-Repos über das hinaus, was die Shared-Ruleset-Entscheidung (Gate 2) zwingend erfordert; der Rollout wird als Folge-Issues angelegt, nicht hier gebaut.
  • Kein Forge-Zustand wird zerstört: keine Löschung von GitLab-Issues, Labels, Meilensteinen oder dem Board durch die Migration selbst.
  • analysis/ bleibt eingefroren — der Branch von Session 1 wird weder verändert noch umgebaut.
  • Kein inhaltliches Umschreiben des Host-/Visions-/Verfahrenswissens: Umzug, Frontmatter und Korrektur werkzeugwidersprechender Aussagen ja, Neuformulierung nein.

Ankündigung

Das Management-Repo der Gruppe axion1337.chat zieht auf das neckbeard-Framework um. Die vorhandene Disziplin — Meilensteinpflicht, Status-Disziplin, ADR-Pflicht, AARs — bleibt erhalten, wandert aber von Stellen, die nur ein Mensch prüfen kann, an Stellen, die ein Skript prüft: Frontmatter statt Prosa, generiertes STATUS.md statt handgepflegter Zählungen, validate.py statt Konventionstreue aus dem Gedächtnis. Die vier Driftmuster des Feldtests bekommen je einen deterministischen Check, und was der alte Ansatz besser kann als neckbeard, wird zuerst ins Framework eingefaltet statt verworfen. Zielgruppe sind sorb und alle Agenten-Sessions, die künftig von einer Quelle starten, die sich nicht selbst widerspricht.

UI

Keine UI beteiligt — Artefakte sind Markdown-Dateien, die Oberfläche bleibt GitLab/Obsidian/Editor. Mockups entfallen.

Gate 2 — Architektur

Gelesen (Pflichtlektüre vor den Optionen)

Alt-Ansatz: CLAUDE.md, roadmap.md, decisions/README.md und die tragenden Entscheidungen 0001, 0002, 0005, 0009, 0010, verfahren/refinement.md, verfahren/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 (lesend vom Analyse-Branch): gitlab_issues.json — 111 Issues, 71 offen; 71/71 mit genau einem Meilenstein (M1 19 · M2 22 · M3 4 · M4 12 · M5 14) und 71/71 mit genau einer Priorität (low 32, medium 34, high 5). Die Entscheidungen 0003/0004/0006/0007/0008 werden bei der Portierung (Gate 4) vollständig gelesen; sie tragen keine Architekturfrage dieser Undertaking.

Ernte, Teil 1 — die Fehlermuster beider Ansätze

Wo genau versagte der alte Ansatz, was hält neckbeard dagegen, und wo 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); 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

Die sieben neckbeard-Lücken, Disposition (Akzeptanzkriterium 6, 7/7):

# Lücke Disposition
1 Viele Repos, ein Regelwerk Eingefaltet: ADR-0013 (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)
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)
7 Prioritätsfeld als YAGNI verworfen Eingefaltet: Pflichtfeld priority — der Feldtest liefert die Evidenz (71/71, klar getrennt vom Meilenstein), die das Schöpfungs-AAR fürs Wiedervorlegen verlangte
+8 (neu, diese Session) validate.py lehnt Verzeichnis-Links ab Migration ersetzt Verzeichnis- durch Datei-Ziele; Upstream-Kandidat (Meinungsfrage)
+9 (neu) Kein definierter Ort für Projektregeln im übernommenen AGENTS.md Projektregeln als ausgewiesener eigener Abschnitt unter den unveränderten Upstream-Abschnitten; Upstream-Kandidat

Ernte, Teil 2 — Wert des Alt-Ansatzes, eingefaltet (4/4 + Zusatz)

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-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.mddocs/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-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)

Zielarchitektur

Migrationslandkarte (alt → neu; Inhalte unverändert, sofern nicht 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…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)
verfahren/refinement.md docs/wiki/admin/refinement.md
verfahren/deploy-uebergabe.md docs/wiki/deployment/deploy-uebergabe.md
verfahren/stillstandspruefung.md docs/wiki/admin/stillstandspruefung.md
verfahren/textbloecke.md docs/wiki/admin/textbloecke.md (Pfade angepasst)
verfahren/issue-migration/ docs/sources/migration/issue-migration/
verfahren/aar-vorlage.md ersetzt durch neckbeards docs/aar/template.md
hosts/* (4) docs/wiki/admin/<host>.md; offene Arbeitspunkte → Issues (F-004, 5/5)
vision/* (3) docs/wiki/vision/* (neue Wiki-Area vision — Alt-Wert „eine Datei je Linie", altes ADR-0005)
shared/branding.md, lab-netzwerk.md, zone-axion1337.md docs/wiki/architecture/*
shared/commit-zuordnung-2026-08-07.md docs/sources/migration/commit-zuordnung-2026-08-07.md
(neu) docs/sources/upstream/neckbeard-v0.1.1/ — gepinnte Originale als Baseline für den Drift-Check
(neu) PROJECT.md ✓, WORKFLOW.md (wörtlich v0.1.1), schema.yaml (v0.1.1 + ausgewiesene Erweiterungen), STATUS.md (generiert), docs/components/ (6 Deklarationen: 5 Komponenten + management; game-operating/gameserver als external), docs/issues/ (importierte offene management-Issues + F-004-Nachzügler)
scripts/stillstandspruefung.py, ci/ Bleiben; dazu validate.py, gen_status.py (v0.1.1) und die neuen Prüfskripte; .gitlab-ci.yml erhält einen Offline-Job validate (jeder Push) neben der geplanten Stillstandsprüfung

Prüf-Architektur — zwei Familien, scharfe Grenze:

  • Offline & deterministisch (validate.py, gen_status.py --check, SHA-Auflösung, Wiki-Aufgabenmarker, Sperrlisten-Check): läuft bei jedem Push, braucht nur den Baum. Kein Netz, keine Uhrzeit.
  • Verbund & Laufzeit (Stillstandsprüfungs-Familie: Mirror-Sync, Issue-Drift Repo↔GitLab, Pointer-Präsenz, Gruppenliste↔docs/components/, Git-Hygiene über die Gruppe): geplant/manuell in der Lab-CI, Token über maskierte Variablen, Abbruch statt stillem Skip, Befund = rote Pipeline = Alarmanlage.
flowchart LR
    S[Session-Start] --> A[CLAUDE.md → AGENTS.md<br/>+ PROJECT.md + STATUS.md]
    A --> W[Arbeit nach Gates<br/>Artefakte in docs/]
    W --> C[Commit 12:00Z]
    C --> V{CI: validate.py +<br/>gen_status --check}
    V -- rot --> W
    V -- grün --> M[Spiegel-Skript<br/>dry-run → sorb triggert]
    M --> B[GitLab-Board/Meilensteine<br/>= Ansicht, nicht Wahrheit]
    B --> R[Refinement sonntags<br/>Board + STATUS.md]
    R --> W
    P[Stillstandsprüfung + Gruppen-Checks<br/>geplant, Lab-CI] -. Befund = Issue .-> R

Entscheidungen

Die zwei tragenden Richtungsentscheidungen stehen als ADRs (Status proposed, werden mit diesem Gate wirksam):

  • ADR-0012 — Issues im Repo kanonisch (Management-Scope), GitLab als deterministisch bespielter Spiegel; Optionen A/B/C abgewogen im ADR.
  • ADR-0013 — Gruppenregeln kanonisch hier, Komponenten tragen Pointer, ein Komponenten-Artefakt macht die Gruppe prüfbar; Kopie/Submodule verworfen im ADR.

Feature-lokale Entscheidungen (bleiben hier):

  1. Framework-Dateien wörtlich übernehmen (AGENTS.md-Abschnitte 15, WORKFLOW.md, Templates, Skripte) — jede Abweichung vom Upstream bleibt per Diff gegen v0.1.1 sichtbar; Projektspezifika leben ausschließlich im ausgewiesenen AGENTS-Abschnitt, in ADRs, Wiki und schema.yaml-Erweiterungen.
  2. Issue-Nummern: GitLab-iid = Datei-id für Importierte; neue Issues zählen ab Maximum weiter; gitlab_iid-Feld hält die Spiegelung. Keine dritte Nummernwelt, keine ID-Wiederverwendung.
  3. Status-Enum erweitert um next und waiting (Grund-Pflicht bei waiting) — die Board-Spalten sind belegter Alt-Wert; ein Mapping auf nur open/in-progress würde die einzige Zusage-Semantik (status:next) wegwerfen.
  4. Slugs werden nicht umbenannt (F-008): Rename = Forge-Eingriff, eigenes Issue; das Komponenten-Artefakt dokumentiert den Ist-Stand.
  5. Verzeichnis-Links in Prosa werden auf Datei-Ziele umgestellt (Lücke +8).
  6. analysis/ und drafts/ des Analyse-Branches bleiben dort; nichts davon wird auf diesen Branch geholt.
  7. docs/sources/ wird nach Quellenart untergliedert (Vorschlag sorb, 2026-08-11): regelwerk/ (wortgleiche Regeltexte), upstream/ (gepinnte Framework-Originale), protokolle/ (Retro-/Workshop-Protokolle), migration/ (Zuordnungen, Umzugsunterlagen). Kriterium bleibt lebendig → Wiki, unveränderlich → sources; AARs sind Artefakte mit Lebenszyklus, keine Quellen.
  8. Drift-Check gegen Upstream-Baseline: die v0.1.1-Originale liegen unter docs/sources/upstream/neckbeard-v0.1.1/; ein Offline-Check vergleicht die Instruktionsdateien (CLAUDE.md-Pointer, AGENTS.md bis zur Projektabschnitts-Marke, WORKFLOW.md, Templates) byteweise. Stilles Umschreiben durch eine Session wird damit roter Befund; Framework-Upgrade = bewusste Baseline-Aktualisierung. schema.yaml und die Skripte sind erklärt projekterweitert — Original liegt zur Diffbarkeit bei, wird aber nicht byte-erzwungen.
  9. AGENTS.md-Änderungsschutz: die alte Fußzeilen-Regel zieht in den Projektabschnitt um — Änderungen an AGENTS.md nur mit sorb abgestimmt.
  10. Issue-Import liest Beschreibungstexte der offenen management-Issues read-only über den Token (freigegeben von sorb, 2026-08-11); Kommentare bleiben auf GitLab, der Tokenwert erscheint nirgends.

Constraints

  • Mirror-Topologie unangetastet: Flux-Quelle bleibt Gitea, keine direkten Gitea-Pushes, Kanonisierungs-Verfahren gilt weiter.
  • Kein API-Schreibzugriff ohne menschlichen Trigger; das Spiegel-Skript hat --dry-run als Default. Diese Session pusht nichts.
  • Commit-Konventionen (englisch, 12:00:00 UTC, kanonische Identität) gelten für jeden Migrations-Commit.
  • Artefaktsprache Deutsch (PROJECT.md), Upstream-Framework-Texte bleiben englisch — der Diff-Abgleich gegen v0.1.1 wiegt schwerer als Sprachreinheit.
  • Secrets-Regeln unverändert (Token nur per Pfad/maskierter Variable).
  • Die Historien-Remediation (F-002/F-003) bleibt draußen; jedes künftige Rewrite trägt die Zuordnungs-Auflage (portiertes ADR-0009).

Rückmeldungen an neckbeard (Kandidaten, eigener Akt — nicht Teil dieser Undertaking)

Lücken 15 und 7 mit Feldtest-Evidenz, dazu +8 (Verzeichnis-Links), +9 (Ort für Projektregeln), die fehlende ADR-Pflicht bei dauerhaften Ausnahmen, und als Erfahrungswert: die Stillstandsprüfungs-Prinzipien (Prüfungen nur aus realen Fällen; Abbruch statt Skip) als Muster für eine künftige Laufzeit-Prüf-Familie neben validate.py.

Gate 3 — Programm-Design

Dateiorte (vollständig)

Wurzel — neu: AGENTS.md (Upstream §15 wörtlich, dann Marke <!-- projektabschnitt -->, dann „§6 Gruppenregeln"), WORKFLOW.md (wörtlich v0.1.1), schema.yaml (v0.1.1 + Erweiterungen, im Kopf ausgewiesen), STATUS.md (generiert). Wurzel — geändert: CLAUDE.md → Pointer (wörtlich v0.1.1), roadmap.md (Zahlen/„Stand" raus, M5 rein, Datei-Links), README.md (Pfade/Struktur nachgezogen, Datei-Links), .gitlab-ci.yml (+ Job validate, Stage pruefen, bei jedem Push). Wurzel — entfällt (git mv): decisions/, hosts/, verfahren/, vision/, shared/.

docs/adr/: 0001…0011 portiert (Frontmatter ergänzt; Datum = Original-Datum; Body unverändert bis auf umgezogene Link-Ziele), 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 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 aus dem Titel: Kleinbuchstaben, Umlaute ae/oe/ue/ss, sonst -, Alt-IDs bleiben im Titel), plus 5 neue Issues für die F-004-Arbeitspunkte (IDs ab max(iid)+1), template.md (v0.1.1). docs/components/: management.md, threadnet-call.md, thread-net-git.md, threadnet-operating.md, axion1337.chat-gitops.md, ThreadNet-Web.md (Dateiname = Slug, buchstabengetreu), dazu game-operating.md, gameserver.md (phase: external). docs/wiki/: index.md (projektangepasst: Area-Tabelle + vision; nicht in der Baseline), admin/: cfgmon.md, game.md, matrix.md, overmind.md, refinement.md, stillstandspruefung.md, textbloecke.md; deployment/: deploy-uebergabe.md; architecture/: branding.md, lab-netzwerk.md, zone-axion1337.md; vision/: axion1337-chat.md, homelab.md, threadnet.md. docs/sources/: regelwerk/karpathy-guidelines.md; upstream/neckbeard-v0.1.1/ (AGENTS.md, CLAUDE.md, WORKFLOW.md, schema.yaml, die 4 Templates, validate.py, gen_status.py, dazu HERKUNFT.md mit Tag/SHA); protokolle/retro-2026-08-09.md; migration/commit-zuordnung-2026-08-07.md, migration/issue-migration/README.md, migration/import_issues.py + migration/issue-import-protokoll.md (Einmal-Werkzeug und sein Protokoll — Aufzeichnung, kein Dauerbetrieb). scripts/: validate.py (v0.1.1 + 3 Regeln), gen_status.py (v0.1.1 + Meilenstein-/Prioritätsspalten und -verteilung), pruefe_upstream_drift.py (neu), pruefe_prosa.py (neu), gruppenpruefung.py (neu), spiegel_issues.py (neu); stillstandspruefung.py unangetastet.

Schema-Erweiterungen (exakt)

# issue — zusätzlich:
required: [type, id, status, created, milestone, priority]
status:    { enum: [open, next, in-progress, waiting, done, rejected] }
milestone: { enum: [M1, M2, M3, M4, M5] }
priority:  { enum: [high, medium, low] }
due:       { kind: date, nullable: true }
host:      { enum: [cfgmon, overmind, matrix, game], nullable: true }
area:      { enum: [security, infrastructure, database, element], nullable: true }
wartegrund: { kind: str, nullable: true }
gitlab_iid: { pattern: "^\\d+$", nullable: true }
rules: [waiting_requires_reason]        # + global: wip_limit
# component — neuer Typ:
component:
  dir: "docs/components"
  filename: "^[A-Za-z0-9.-]+\\.md$"
  required: [type, slug, anzeigename, phase]
  fields:
    slug: { kind: str }                 # rule: slug_matches_filename
    anzeigename: { kind: str }
    phase: { enum: [active, staged, external] }
    gitlab: { kind: str }
    mirror: { kind: str, nullable: true }
    related: { kind: links }
  rules: [slug_matches_filename]
# wiki-page.area — Enum + vision

Signaturen (keine Rümpfe)

validate.py [repo-root]                          # + Regeln: wip_limit (≤2 in-progress, repoweit),
                                                 #   waiting_requires_reason, slug_matches_filename
gen_status.py [--check] [repo-root]              # Issues-Tabelle + Spalten milestone/priority
                                                 #   + Verteilungszeile je Meilenstein
pruefe_upstream_drift.py [repo-root]             # Byte-Vergleich Arbeitsdatei ↔ sources/upstream;
                                                 #   AGENTS.md: Präfix bis Marke; exit 1 bei Abweichung
pruefe_prosa.py [repo-root]                      # (a) SHA-Zitate in docs/** + Wurzel-*.md auflösen
                                                 #   (git cat-file, sonst Zuordnungstabelle, sonst FEHLER)
                                                 #   (b) Aufgabenmarker in docs/wiki/** ohne Issue-Verweis
                                                 #   (c) Sperrliste stillgelegter URL-Muster (toter Gitea-Tracker)
gruppenpruefung.py                               # Lab-CI, Token aus Umgebung, Abbruch ohne Token:
                                                 #   Gruppenliste (Laufzeit) ↔ docs/components/;
                                                 #   Pointer-Präsenz je active/staged-Komponente;
                                                 #   Issue-Drift docs/issues ↔ GitLab (Titel/Status/
                                                 #   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

CI-Fluss: Job validate (jeder Push, offline): validate.py && gen_status.py --check && pruefe_upstream_drift.py && pruefe_prosa.py. Job stillstandspruefung (geplant/manuell) wie bisher; gruppenpruefung daneben, gleiche Regeln (rot = Alarm, Abbruch statt Skip).

Was die Prüfungen zusichern (inkl. Muster-Demonstration, Kriterium 5)

Prüfung Zusicherung / Demo
Negativtests (Scratch-Bäume, je Regel einer) 3× in-progress → Fehler; waiting ohne wartegrund → Fehler; Component-Slug ≠ Dateiname → Fehler; 1 Byte Abweichung in WORKFLOW.md → Fehler; Schöpfungs-AAR-Lehre: grüner Validator ohne Negativtest zählt nicht
Muster A Meilenstein-Abgleich gegen den eingefrorenen Session-1-Export: Alt-CLAUDE.md („M1M4") ↔ Export (M5 existiert) → feuert
Muster B Git-Hygiene über die lokalen Komponenten-Klone → feuert (Erwartung: die 237 Echtzeit-Commits aus F-002)
Muster C pruefe_prosa.py auf dem Vor-Migrations-Stand von hosts/ → feuert auf die 5 F-004-Punkte; nach Migration: 0
Muster D SHA-Auflösung auf Vor-Migrations-Stand → feuert auf die 6 verwaisten Zitate aus F-012; Auflösung über die Zuordnungstabelle nachgewiesen

DO NOT CHANGE

  • Der Analyse-Branch und alles unter analysis/.
  • Substanz der portierten Texte: ADR-Bodies, AARs, Retro, Zuordnung, Karpathy-Block, Hosts-/Visions-Prosa — nur Umzug, Frontmatter, Link-Ziele; inhaltliche Korrektur nur wo ein Dokument dem Werkzeugstand widerspricht (roadmap M5, Alt-CLAUDE-Regeln gehen in AGENTS §6 in korrigierter Fassung).
  • scripts/stillstandspruefung.py, ci/lab-ca-chain.crt, .gitlab/issue_templates/ — unangetastet.
  • GitLab-Zustand: kein Issue, Label, Meilenstein, Board wird verändert; spiegel_issues.py läuft in dieser Undertaking nur als Dry-Run.
  • Kein git push; Tokenwert erscheint in keiner Ausgabe.
  • Upstream-Framework-Texte §15 / WORKFLOW / Templates: byte-treu.

Wackligste Annahmen (benannt, Stand Gate 3)

  1. AAR-Erntestatus: „die vier alten AARs sind geerntet" schließe ich aus der Retro-Existenz, nicht aus einer Erntemarke — sorb kann das im Refinement kippen.
  2. Enums aus dem Ist-Stand eingefroren (host/area/M1M5): jeder neue Host oder Meilenstein braucht künftig einen Schema-Commit. Gewollt (sichtbare Änderung), aber Reibung.
  3. Slug-Erzeugung aus deutschen Titeln muss deterministisch und kollisionsfrei sein; bei Kollision entscheidet die iid, nicht der Slug.
  4. Git-Hygiene per API vs. lokale Klone: die Demo läuft auf den lokalen Klonen; die CI-Fassung per API kann bei großen Historien paginieren müssen — begrenzt auf Commits seit 2026-08-07.
  5. Verdichtung von Alt-CLAUDE.md nach AGENTS §6: Welche Sätze Regelrang behalten und welche ins Wiki wandern, ist Urteilssache; Volltext überlebt in ADRs/Wiki/sources, aber eine tragende Nuance könnte aus dem Immer-geladen-Teil fallen.
  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 132.
  • 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.

Gate 4 — Vertikale Slices

Jeder Slice endet mit Nachweis, Status und STOP.

Slice 1 — Tracer Bullet: die Framework-Kette läuft Ende-zu-Ende. Baseline (docs/sources/upstream/neckbeard-v0.1.1/ + HERKUNFT.md), Karpathy-Block wortgleich nach docs/sources/regelwerk/, AGENTS.md (§15 byte-treu + §6 Gruppenregeln), CLAUDE.md-Pointer, WORKFLOW.md, Templates, erweitertes schema.yaml, validate.py (+3 Regeln), gen_status.py (Fork), pruefe_upstream_drift.py, generiertes STATUS.md, CI-Job validate, README-Verzeichnis-Link entschärft. Verify: validate 0 Fehler · gen_status --check aktuell · Drift-Check grün · vier Negativtests feuern · Baseline byte-identisch zur Referenz.

Slice 2 — ADR-Port. decisions/0001…0011docs/adr/ mit Frontmatter, Verweise nachgezogen, decisions/ entfällt. Verify: 11/11 validieren, Duplikat-ID-Prüfung greift, validate grün.

Slice 3 — Wiki, Sources, AARs. verfahren//hosts//vision// shared/ an ihre Zielorte, Wiki-Index, pruefe_prosa.py; Demos Muster C (F-004-Punkte auf Vor-Stand) und D (6 verwaiste SHAs). Verify: validate + pruefe_prosa grün auf Endstand, Demos feuern auf Vor-Stand, alte Wurzelordner leer.

Slice 4 — Issue-Import. import_issues.py liest die offenen management-Issues live (read-only), 26+ Dateien + 5 F-004-Issues, roadmap.md verliert Zahlen an STATUS.md. Verify: alle Issue-Dateien validieren (Pflicht-Meilenstein/-Priorität), Import-Protokoll unter sources/migration, Muster-C-Endstand = 0.

Slice 5 — Komponenten, Gruppenprüfung, Spiegel. 8 Komponenten-Deklarationen, gruppenpruefung.py (+ CI-Job), spiegel_issues.py (Dry-Run-Demo); Demos Muster A (eingefrorener Export ↔ Alt-CLAUDE) und B (Hygiene über lokale Klone), Live-Befund gitops#61. Verify: Dry-Run-Ausgabe plausibel, Demos feuern, kein API-Write.