Files
management/docs/adr/0012-issues-im-repo-gitlab-als-spiegel.md
T
Thore CimbalandClaude Fable 5 c481165ab4 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>
2026-08-11 12:00:00 +00:00

4.1 KiB
Raw Blame History

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

ADR-0012: 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.