Shuffle/requirements/backlog.md
cschlaefke 9880a6fd09
Some checks failed
CI / flutter (pull_request) Failing after 4s
CI / supabase (pull_request) Successful in 3s
CI / supabase-tests (pull_request) Failing after 20s
docs(requirements): resolve follow-up questions N1-N14
Decisions on the follow-up questions from the R1 intake are recorded
in requirements/r1-klaerungen.md and applied to the acceptance
criteria, requirements and backlog: settings (KTO-11), dashboard
(QUE-09, new label epic/querschnitt), catalog seed without third-party
covers (KAT-05), per-user dedup of BGG import reports (SAM-08) and the
confirmed PAR-08 rule. No open questions remain for R1.

Refs #1, #2, #13, #22, #23, #25, #28, #29

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 16:14:31 +01:00

184 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Backlog R1
Stand: 2026-11-02 (Klärungen 1–48 und N1–N14 eingearbeitet) · Pflege: requirements-analyst · Quelle: `requirements/r1-story-entwurf.md` (freigegeben durch Chris am 2026-11-02), Akzeptanzkriterien in `requirements/20-r1-akzeptanzkriterien.md`, verbindliche Entscheidungen zu den 48 offenen Fragen und zu N1–N14 in `requirements/r1-klaerungen.md`.
Repo: [cschlaefke/Shuffle](https://git.cshomelabs.work/cschlaefke/Shuffle/issues) · Milestone: **R1** (ID 1, alle Story-Issues zugeordnet) · 4 Epics + Querschnitt, 28 Stories, 28 Issues (#1–#26, #28, #29; #27 ist der PR zum Intake).
Die Akzeptanzkriterien stehen 1:1 als nummerierte Checkliste in den Issues und werden als „KTO-01 Kriterium 3“ referenziert. Gestrichene Kriterien behalten ihre Nummer („~~n.~~ entfällt“), neue werden hinten angehängt. Die Querschnittskriterien (Datenschutz, Sicherheit, Sprachen, Barrierefreiheit, Zustände/Netz, Plattformen) gelten für jede Story.
## Stories nach Umsetzungsreihenfolge
Status: `offen` = Issue angelegt, noch keine Spec. Clarification = Label `needs-clarification` gesetzt (offene Frage als Kommentar im Issue, siehe unten).
| Story-ID | Issue | Titel | Epic | Prio | Größe | Etappe | Status | Clarification |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| KTO-01 | [#1](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/1) | Registrieren, anmelden und Passwort zurücksetzen | Konto | Must | XL | R1.1 | offen | nein |
| KAT-05 | [#2](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/2) | Katalogdaten laden und aktuell halten | Katalog | Must | XL | R1.1 (Datenmodell, Startbestand), R1.2 (Admin-Pflege per Studio, Meldungen); Import erst mit Lizenz | offen | nein (N11 entschieden) |
| KAT-01 | [#3](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/3) | Spiele suchen | Katalog | Must | L | R1.1 | offen | nein |
| KAT-02 | [#4](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/4) | Spieldetailseite | Katalog | Must | M | R1.1 | offen | nein |
| KTO-11 | [#28](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/28) | Einstellungsbereich (neu) | Konto | Must | L | R1.1 | offen | nein (N1–N5, N13, N14 entschieden) |
| KTO-04 | [#5](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/5) | Privatsphäre (in R1 nur der Hinweis) | Konto | Must | S | R1.1 | offen | nein |
| SAM-01 | [#6](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/6) | Spiel zur Sammlung hinzufügen | Sammlung | Must | S | R1.2 | offen | nein |
| SAM-02 | [#7](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/7) | Eigene Angaben pro Spiel | Sammlung | Must | M | R1.2 | offen | nein |
| SAM-04 | [#8](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/8) | Wunschliste mit Priorität | Sammlung | Must | M | R1.2 | offen | nein |
| SAM-05 | [#9](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/9) | Einkaufsliste führen | Sammlung | Must | M | R1.2 | offen | nein |
| SAM-06 | [#10](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/10) | In die Sammlung übernehmen | Sammlung | Must | S | R1.2 | offen | nein |
| SAM-03 | [#11](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/11) | Sammlung durchsuchen, filtern und sortieren | Sammlung | Must | L | R1.2 | offen | nein |
| KAT-03 | [#12](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/12) | Erweiterungen und Editionen | Katalog | Must | M | R1.2 | offen | nein |
| KAT-04 | [#13](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/13) | Fehlendes Spiel melden | Katalog | Must | L | R1.2 | offen | nein |
| KTO-02 | [#14](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/14) | Profil bearbeiten | Konto | Must | L | R1.2 | offen | nein |
| PAR-01 | [#15](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/15) | Partie erfassen | Partien | Must | XL | R1.3 | offen | nein |
| PAR-02 | [#16](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/16) | Mitspieler hinzufügen | Partien | Must | M | R1.3 | offen | nein |
| PAR-03 | [#17](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/17) | Ergebnis erfassen | Partien | Must | L | R1.3 | offen | nein |
| PAR-04 | [#18](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/18) | Wertungsbogen je Spiel | Partien | Must | M | R1.3 | offen | nein |
| PAR-05 | [#19](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/19) | Partie bearbeiten und löschen | Partien | Must | M | R1.3 | offen | nein |
| PAR-06 | [#20](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/20) | Partienverlauf | Partien | Must | M | R1.3 | offen | nein |
| PAR-07 | [#21](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/21) | Persönliche Statistik | Partien | Must | L | R1.3 | offen | nein |
| PAR-08 | [#22](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/22) | Statistik je Spiel | Partien | Must | M | R1.3 | offen | nein |
| QUE-09 | [#29](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/29) | Startseite: persönliches Dashboard (neu) | Querschnitt | Must | M | R1.3 | offen | nein (N6–N10 entschieden) |
| KTO-05 | [#23](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/23) | Konto löschen und Daten exportieren | Konto | Must | XL | R1.4 | offen | nein |
| SAM-07 | [#24](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/24) | BGG-Konto verknüpfen | Sammlung | Should | S | R1.4 (nur mit BGG-Lizenz) | offen | nein |
| SAM-08 | [#25](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/25) | Sammlung und Wunschliste aus BGG importieren | Sammlung | Should | XL | R1.4 (nur mit BGG-Lizenz) | offen | nein |
| SAM-09 | [#26](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/26) | BGG-Import wiederholen und abgleichen | Sammlung | Should | L | R1.4 (nur mit BGG-Lizenz) | offen | nein |
## Epics
| Epic | Label | Stories (Issues) |
| --- | --- | --- |
| KTO Konto & Profil | `epic/konto` | KTO-01 (#1), KTO-02 (#14), KTO-04 (#5), KTO-05 (#23), KTO-11 (#28) |
| KAT Spielekatalog | `epic/katalog` | KAT-01 (#3), KAT-02 (#4), KAT-03 (#12), KAT-04 (#13), KAT-05 (#2) |
| SAM Sammlung & Listen | `epic/sammlung` | SAM-01 (#6), SAM-02 (#7), SAM-03 (#11), SAM-04 (#8), SAM-05 (#9), SAM-06 (#10), SAM-07 (#24), SAM-08 (#25), SAM-09 (#26) |
| PAR Partien & Statistik | `epic/partien` | PAR-01 (#15), PAR-02 (#16), PAR-03 (#17), PAR-04 (#18), PAR-05 (#19), PAR-06 (#20), PAR-07 (#21), PAR-08 (#22) |
| QUE Querschnitt | `epic/querschnitt` (neu, N10) | QUE-09 (#29) |
## Etappen (im Milestone R1)
| Etappe | Issues |
| --- | --- |
| R1.1 Fundament | #1, #2 (Datenmodell, Startbestand, Rechte), #3, #4, #28, #5 |
| R1.2 Sammlung | #6, #7, #8, #9, #10, #11, #12, #13, #2 (Admin-Pflege per Studio, Meldungen), #14 |
| R1.3 Partien | #15, #16, #17, #18, #19, #20, #21, #22, #29 |
| R1.4 Abschluss | #23, #24, #25, #26 (BGG-Block nur mit Lizenz, S1) |
## XL-Stories
Nicht geteilt (Entscheidung Chris, Label `size/xl`). Die Schnittvorschläge stehen im Issue unter „Mögliche Schnitte für die Spec“ und werden in der Spec (architect) entschieden: KTO-01 (#1), KTO-05 (#23), KAT-05 (#2), SAM-08 (#25), PAR-01 (#15). KAT-05 wird durch die Zurückstellung des Imports (Klärung 24) in R1 voraussichtlich kleiner; Neubewertung in der Spec.
## Abhängigkeiten
In Forgejo als blockierende Abhängigkeiten gesetzt (Issue hängt ab von …). Neu am 2026-11-02 markiert mit *(neu)*.
| Issue | hängt ab von |
| --- | --- |
| #3 KAT-01 | #2 |
| #4 KAT-02 | #3 |
| #5 KTO-04 | #1, #28 *(neu)* |
| #6 SAM-01 | #1, #3, #4 |
| #7 SAM-02 | #6 |
| #8 SAM-04 | #1, #4 |
| #9 SAM-05 | #1, #4 |
| #10 SAM-06 | #6, #8, #9 |
| #11 SAM-03 | #6, #7 |
| #12 KAT-03 | #4, #6 |
| #13 KAT-04 | #1, #2, #3 |
| #14 KTO-02 | #1, #3 |
| #15 PAR-01 | #1, #3, #6 |
| #16 PAR-02 | #15 |
| #17 PAR-03 | #16 |
| #18 PAR-04 | #17 |
| #19 PAR-05 | #15, #16, #17, #18 |
| #20 PAR-06 | #15, #16, #17 |
| #21 PAR-07 | #17, #20 |
| #22 PAR-08 | #4, #17 |
| #23 KTO-05 | #1, #28 *(neu)* |
| #24 SAM-07 | #1 |
| #25 SAM-08 | #2, #6, #8, #9 *(neu, „preordered“ → Einkaufsliste)*, #13, #24 |
| #26 SAM-09 | #7, #25 |
| #28 KTO-11 *(neu)* | #1 |
| #29 QUE-09 *(neu)* | #8, #20, #15 *(neu, N8 Schnellaktion)*, #21 *(neu, N8 Kurzstatistik)* |
Nur im Issue-Text vermerkt (kriterienbezogene Rückverweise, die als blockierende Abhängigkeit Zyklen erzeugen würden):
- KAT-01 (#3) Kriterium 6 → KAT-04 (#13)
- KAT-02 (#4) Kriterien 3–4 → SAM-01 (#6), SAM-04 (#8), SAM-05 (#9); Kriterium 6 → PAR-08 (#22)
- KAT-03 (#12) Kriterium 6 (Edition bei Partien) → PAR-01 (#15)
- SAM-01 (#6) Kriterium 5 → SAM-06 (#10)
- SAM-05 (#9) Kriterium 3 → SAM-06 (#10)
- ~~KTO-11 (#28) Kriterium 1 → KTO-05 (#23)~~ entfällt (N14): Den Einstieg zu Export/Konto löschen ergänzt KTO-05 selbst (KTO-05 Kriterium 6); #23 hängt weiterhin blockierend von #28 ab
- KAT-04 (#13) Kriterium 7 (Import-Meldungen zählen nicht aufs Limit) ↔ SAM-08 (#25) Kriterium 10 (N12)
- KTO-11 (#28, R1.1) Kriterium 12 (nicht synchronisierte Partien beim Abmelden) → PAR-01 (#15, R1.3); wird mit PAR-01 geprüft (N4)
- KTO-05 (#23) inhaltlich → alle Daten-Stories (u. a. #6–#11, #13, #14, #15–#18)
- Externe Voraussetzung BGG-Lizenz (S1) für #24, #25, #26 sowie für die zurückgestellten Kriterien KAT-05 1, 2 (Quellenteil), 3, 6
## Offene Fragen
Alle 48 Fragen aus `r1-story-entwurf.md` § 5 sind am 2026-11-02 von Chris entschieden; die verbindlichen Antworten stehen in [`r1-klaerungen.md`](r1-klaerungen.md) und sind in `20-r1-akzeptanzkriterien.md` und den Issues (Abschnitt „Klärungen“) eingearbeitet.
### Neue offene Punkte N1–N14 – erledigt (2026-11-02)
Alle 14 Fragen aus dem Einarbeiten und die PAR-08-Annahme sind von Chris entschieden; verbindlich ist der Abschnitt „Neue Fragen aus dem Einarbeiten (N1–N14 …)“ in [`r1-klaerungen.md`](r1-klaerungen.md). Eingearbeitet in `20-r1-akzeptanzkriterien.md` und die Issues (je Kommentar „Klärungen N… eingearbeitet (2026-11-02)“).
| Nr | Thema | Issue | Status | Eingearbeitet in |
| --- | --- | --- | --- | --- |
| N1 | Andere Geräte abmelden nach Passwort-/E-Mail-Wechsel | #28 | erledigt | KTO-11 Kriterium 9 |
| N2 | Secure email change: Link an neue, Info-Mail an alte Adresse | #28 (#1) | erledigt | KTO-11 Kriterium 4, KTO-01 Kriterium 11 |
| N3 | Sprache ohne/mit Anmeldung, keine Option „wie Gerät“ | #28 | erledigt | KTO-11 Kriterien 2, 10, 11; QUE-05 Kriterium 1 |
| N4 | Abmelden mit nicht synchronisierten Partien: lokal behalten, nur für dasselbe Konto | #28 | erledigt | KTO-11 Kriterium 12 |
| N5 | Rechtstexte verlinken; Hinweis + freiwilliger Ausschalter für anonyme Messung | #28 | erledigt | KTO-11 Kriterien 13, 14; QUE-04 Kriterium 4 |
| N6 | 5 Einträge je Dashboard-Bereich | #29 | erledigt | QUE-09 Kriterien 2, 4 |
| N7 | Wunschliste nach Priorität, dann neueste | #29 | erledigt | QUE-09 Kriterium 4 |
| N8 | Schnellaktion „Partie erfassen“, Kurzstatistik; keine Einkaufsliste | #29 | erledigt | QUE-09 Kriterien 1, 9–12 |
| N9 | Ohne Anmeldung: Katalogsuche + Anmelde-Hinweis | #29 | erledigt | QUE-09 Kriterium 13 |
| N10 | Story-ID QUE-09, Label `epic/querschnitt` | #29 | erledigt | Labels #29 |
| N11 | Startbestand ca. 200 Spiele, nur Fakten, Platzhalter-Cover, eigene Kurztexte | #2 | erledigt | KAT-05 Kriterien 7, 10 |
| N12 | Import-Meldungen zählen nicht aufs Tageslimit, dedupliziert je BGG-ID, Kennzeichen „aus Import“ | #25, #13 | erledigt (N12a: je Nutzer) | KAT-04 Kriterium 7, SAM-08 Kriterium 10 |
| N13 | Aktuelles Passwort für Passwort- und E-Mail-Wechsel | #28 | erledigt | KTO-11 Kriterien 4, 6, 7 |
| N14 | Einstieg Export/Löschen gehört zu KTO-05 | #28, #23 | erledigt | KTO-11 Kriterium 1, KTO-05 Kriterium 6 |
| PAR-08 | Partien ohne mich zählen nicht in die Statistik je Spiel | #22 | bestätigt | PAR-08 Kriterium 6 |
### Offen nach N1–N14
| Nr | Thema | Issue | Label |
| --- | --- | --- | --- |
| N12a | Deduplizierung der Import-Meldungen „je Spiel (BGG-ID)“: je Nutzer oder über alle Nutzer? Bei globaler Deduplizierung kollidiert die harte Löschung „meiner offenen Meldungen“ (KTO-05 Kriterium 2) mit Meldungen, an denen auch andere Nutzer hängen, und der Ergebnishinweis (KAT-04 Kriterien 4–5) muss alle betroffenen vorläufigen Einträge erreichen. | #25 | erledigt: je Nutzer (siehe `r1-klaerungen.md`) |
Bestätigt bzw. korrigiert durch Chris (2026-11-02):
- KTO-11 (#28) Kriterium 11: Bei der Registrierung wird die gerade aktive Oberflächensprache zur Profilsprache – bestätigt.
- QUE-09 (#29) Kriterium 10: Die Siegquote in der Kurzstatistik gilt **gesamt**, die Partienzahl für den laufenden Monat (N8a).
## Datenmodell-Änderungen für architect
`docs/datenmodell-r1.md` und die Migrationen werden hier **nicht** geändert. Die folgenden Änderungen ergeben sich aus `r1-klaerungen.md`. Sie landen beim `architect` in den Specs der betroffenen Issues und danach als neue, additive Migrationen.
| Klärung | Änderung | Issues |
| --- | --- | --- |
| 1 | Sammlung, Wunsch- und Einkaufsliste bleiben ein Eintrag je Nutzer und Spiel (`unique (owner_id, game_id)`) mit Listenstatus; Wechsel = Statusänderung | #6, #8, #9, #10, #25 |
| 2, 29 | Sammlungseintrag: Zustand (Liste: neu/eingeschweißt, sehr gut, gut, gebraucht, beschädigt), Kaufdatum, Notiz (≤ 1000), Standort (Freitext), Tags (Freitext, Vorschläge aus bisherigen Werten, keine eigene Verwaltung). Wunschliste: Priorität (hoch/mittel/niedrig), Notiz. Einkaufsliste: Notiz. **Kein** Kaufpreis, Händler, geplanter Preis, Link in R1 | #7, #8, #9, #10 |
| 3 | Alternative Titel je Spiel mit Sprache (eigene Tabelle), in der Suche berücksichtigt | #3 |
| 4 | Verlag(e) je Spiel (mehrere möglich) | #3, #4 |
| 5 | Erweiterung als eigenes Spiel mit Verweis auf das Basisspiel | #12 |
| 6, 27 | Neue Tabelle für Meldungen: Status offen/freigegeben/abgelehnt/zusammengeführt, Titel, Verlag, Jahr, Link, Verweis auf Zieleintrag; Limit 10 je Nutzer und Tag; Ergebnis als Hinweis am vorläufigen Eintrag | #13, #2 |
| 7 | Katalog: Flag „ausgeblendet“, Kennzeichnung manuell gepflegter Felder, Quellenkennung + Quellenangabe, Anzeige-Erlaubnis je Quelle – schon in R1, damit der spätere Import keine Migration braucht | #2 |
| 8 | Profil-Genres referenzieren dieselbe Genre-Liste wie der Katalog | #14 |
| 9 | Stadt im Profil nur für den Nutzer selbst lesbar (RLS); keine Sichtbarkeit von Profilfeldern für Fremde in R1 | #14, #5 |
| 10, 20 | Konto-Löschung: harte Löschung aller Nutzerdaten (Partien, Gäste, Wertungsbögen, vorläufige Einträge, offene Meldungen) innerhalb von 30 Tagen inkl. Sicherungen; Regel „Gelöschter Nutzer“ erst ab R2. Datenexport als JSON, abrufbar in der App, 7 Tage gültig (Ablageort, Ablauf) | #23 |
| 11 | Partie: Ort; Gästeliste als eigene Entität; kooperativ (gewonnen/verloren gemeinsam); Teams mit Punkten/Ergebnis je Team | #15, #16, #17, #20 |
| 12 | Vorläufige private Spieleinträge auch automatisch aus dem BGG-Import, inkl. automatischer Meldung; Herkunftskennzeichen „aus BGG-Import“ (für Klärung 35) | #25, #26, #13 |
| 23 | Lieblingsspiele: nur Katalogspiele (keine vorläufigen), höchstens 5, mit Reihenfolge | #14 |
| 28 | Edition optional bei Sammlungseintrag und Partie, nicht bei Wunsch-/Einkaufsliste | #12, #6, #15 |
| 33 | BGG-Verknüpfung: höchstens eine je Konto; **kein** Unique-Constraint auf den BGG-Namen über Konten hinweg | #24 |
| 34 | BGG-Import: Zuordnung der Status (owned/wishlist/want to buy/preordered), Prioritätsabbildung 1–5 → hoch/mittel/niedrig, Erweiterungen importieren | #25, #26 |
| 36 | Partie: Datum ohne Uhrzeit; Offline-Sync mit „letzte Änderung gewinnt“ (Änderungszeitpunkt je Partie nötig) und Hinweis an den Nutzer | #15, #19 |
| 37 | Gastname 1–30 Zeichen; Gast nur löschbar, wenn er in keiner Partie vorkommt | #16 |
| 38 | Wertungsrichtung („höchste“ oder „niedrigste Punktzahl gewinnt“) je Spiel und Nutzer | #17, #22 |
| 39 | Ein Wertungsbogen je Spiel und Nutzer; Kategorien weich löschen (in alten Partien als „gelöscht“ sichtbar); negative Punkte erlaubt | #18 |
| 44 | Admin-Rolle nur als Datenbankrolle (RLS); Pflege über Supabase Studio/SQL, Ablauf im Repo dokumentieren | #2, #13 |
| 45 | Sprache im Profil speichern (für Systemmails und Sprachwahl in KTO-11) | #1, #28 |
| 48 | Sprache von Katalogtexten (Titel/Beschreibung) speichern, um den Sprachhinweis zu zeigen | #4 |
| N3 | Sprache vor der Anmeldung lokal auf dem Gerät halten (Gerätesprache als Vorgabe, änderbar); nach der Anmeldung gilt die Profilsprache aus Klärung 45 auf allen Geräten; bei Registrierung wird die aktive Sprache als Profilsprache übernommen (abgeleitet) | #28, #1 |
| N5 | Opt-out-Flag für die anonyme Reichweitenmessung; Speicherort (Gerät oder Profil) in der Spec entscheiden, die Messung selbst bleibt ohne Konto- oder Gerätebezug | #28 |
| N4 | Lokale Offline-Daten (nicht synchronisierte Partien inkl. Gäste/Wertungsbögen) je Konto getrennt auf dem Gerät halten; beim Abmelden nicht löschen, für andere Konten nicht sichtbar, Übertragung erst nach erneuter Anmeldung desselben Kontos | #28, #15 |
| N11 | Startbestand ca. 200 Spiele als Seed bzw. per Studio; Platzhalter-Cover und eigener Kurztext je Spiel (keine fremden Cover/Texte) | #2 |
| N12 | Meldungen: Kennzeichen „aus Import“ (Herkunft Nutzer/Import), BGG-Kennung an der Meldung für die Deduplizierung; Tageslimit zählt nur Nutzer-Meldungen. Deduplizierung je Nutzer und BGG-ID (N12a), also eine Meldung je vorläufigem Eintrag | #13, #25 |
| N1, N2, N13 | Keine Tabellenänderung erwartet; Supabase „secure email change“ und Abmelden anderer Sitzungen in der Auth-Konfiguration aktivieren und im Repo dokumentieren | #28 |