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>
89 lines
4.1 KiB
Markdown
89 lines
4.1 KiB
Markdown
---
|
||
type: adr
|
||
id: "0012"
|
||
status: accepted
|
||
date: 2026-08-11
|
||
supersedes: null
|
||
superseded_by: null
|
||
related:
|
||
- "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, M1–M5)
|
||
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.
|