Files
management/docs/adr/0011-issues-im-repo-gitlab-als-spiegel.md
T
Thore CimbalandClaude Fable 5 6b8869f160 docs: design doc Gate 2 (architecture) with ADR-0011 and ADR-0012
Two-way harvest as mandated by the Session-1 handoff: failure patterns
of both approaches tabled with the mechanism that closes each, all
seven neckbeard gaps dispositioned (plus two new ones found this
session), and the old approach's proven value folded into the target
architecture. Two directional decisions filed as proposed ADRs: issues
live in-repo with GitLab as a deterministically mirrored view (0011),
group rules canonical here with pointer components and a checkable
components artifact (0012). Migration map, check architecture split
offline/runtime, constraints, upstream feedback candidates.

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

4.1 KiB
Raw Blame History

type, id, status, date, supersedes, superseded_by, related
type id status date supersedes superseded_by related
adr 0011 proposed 2026-08-11 null null
docs/design/2026-08-11-neckbeard-migration.md
decisions/0002-issues-und-management-ins-lab.md
decisions/0005-pm-framework-kanban.md

ADR-0011: Issues leben im Repo; GitLab wird deterministisch bespiegelt

Kontext

Die Gruppe führt 111 Issues auf git.lab, davon 71 offen; die Disziplin ist belegt intakt (F-014: 71/71 mit genau einem Meilenstein, 71/71 mit Priorität, WIP-Limit gehalten). Neckbeards ADR-0002 macht In-Repo-Issues zum Default und vertagt die Spiegel-Option C. Der Feldtest zeigt beides: Die Forge erzwingt sichtbar, was Prosa nicht hält (F-001, F-017 — Dokumente widersprechen dem Board), und Host-Sessions ohne Lab-Zugang können GitLab-Issues gar nicht lesen, wohl aber den Gitea-Mirror dieses Repos. Der alte Grundsatz „Alles Offene ist ein Issue" (altes ADR-0005) scheiterte nur dort, wo Arbeitspunkte in hosts/-Markdown lebten (F-004) — am zweiten Backlog, nicht am Board.

Optionen

A: GitLab bleibt kanonisch, Repo hält nur einen Export. Tagesablauf unverändert, Board bleibt Arbeitsfläche. Aber: dauerhafte Ausnahme von neckbeards ADR-0002 (nach eigener Regel ADR-pflichtig), Issues bleiben für Host-Sessions unsichtbar und für Agenten nur per API erreichbar, und die Klasse „Prosa widerspricht Board" (F-001) bleibt strukturell offen — generierte Dokumente hingen an einem Netzzugriff.

B: Reine In-Repo-Issues, GitLab-Issues geschlossen. Sauberste neckbeard-Form. Aber: das Gruppenboard verliert den Management-Scope, Meilenstein-Ansichten werden unvollständig, das Refinement liest zwei Systeme — genau die belegte Disziplin (F-014) würde ihres Werkzeugs beraubt. Der Report warnt ausdrücklich: nicht per Board-Löschung migrieren.

C: Repo kanonisch, GitLab als generierter Spiegel. Die Issue-Wahrheit liegt als docs/issues/NNNN-slug.md im Repo (grepbar, offline, über den Gitea-Mirror überall lesbar); ein deterministisches Skript spiegelt Titel, Status, Meilenstein, Priorität und Fälligkeit nach GitLab, damit Board-, Meilenstein- und Label-Ansichten weiterarbeiten. Eine Drift-Prüfung meldet Abweichungen zwischen Board und Repo rot.

Entscheidung

Option C, beschränkt auf den Management-Scope.

  • docs/issues/ wird kanonisch für die Issues des management-Projekts. Die offenen management-Issues werden aus dem GitLab-Stand importiert und behalten ihre Nummern (GitLab-iid = Datei-id; keine dritte Nummernwelt). Alt-IDs wie CFGMON-01 bleiben im Titel.
  • Das Schema trägt die belegten Pflichten: milestone (Pflicht, M1M5) und priority (Pflicht, high/medium/low), dazu due (Datum statt „bald"), optional host/area. Der Status-Enum wird um die Board-Spalten erweitert (next, waiting mit benanntem Grund); das WIP-Limit (max. 2 in-progress) wird eine Validator-Regel.
  • Der Spiegel ist ein deterministisches Skript (Repo → GitLab), Standard --dry-run; echte Läufe stößt sorb an. Board-Handgriffe bleiben erlaubt, sind aber nicht kanonisch: Was nicht nachgezogen wird, meldet die Drift-Prüfung. Die Zusage-Spalten (next, in-progress) vergibt weiterhin nur sorb — Prozessregel, nicht Mechanik.
  • Komponenten-Tracker bleiben unangetastet (gitops 60 Issues usw.), bis die jeweilige Komponente selbst adoptiert; das wird als Folge-Issues angelegt. Bis dahin gilt für Komponenten-Issues GitLab als Wahrheit — ausgewiesen, nicht verschwiegen.

Konsequenzen

  • Statusänderung = Commit; git log ersetzt die Issue-Chronik. STATUS.md und Roadmap-Zahlen werden generiert statt behauptet (F-001-Klasse geschlossen).
  • Host-Sessions lesen den vollständigen Management-Backlog erstmals von überall (Gitea-Mirror des Repos).
  • GitLab-seitige Änderungen ohne Nachzug sind ab jetzt ein Befund, kein stiller Zustand — die Drift-Prüfung übernimmt die Alarmfunktion der roten Pipeline.
  • Das geschlossene GitLab-Altbestand-Archiv (40 geschlossene Issues) wird nicht importiert; es bleibt als Historie auf git.lab, erreichbar über die bestehenden Verweise.