Shuffle/requirements/backlog.md
cschlaefke 56e57afd43
Some checks failed
CI / flutter (pull_request) Failing after 3m35s
CI / supabase (pull_request) Successful in 55s
CI / supabase-tests (pull_request) Failing after 1m32s
docs(requirements): add R1 backlog and story draft
Intake of the 26 R1 stories from requirements/20-r1-akzeptanzkriterien.md
into Forgejo issues #1-#26. backlog.md maps story IDs to issues, stages
R1.1-R1.4, dependencies and the 48 open questions.

Refs #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11, #12, #13, #14, #15,
#16, #17, #18, #19, #20, #21, #22, #23, #24, #25, #26

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

173 lines
11 KiB
Markdown
Raw 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 · Pflege: requirements-analyst · Quelle: `requirements/r1-story-entwurf.md` (freigegeben durch Chris am 2026-11-02), Akzeptanzkriterien in `requirements/20-r1-akzeptanzkriterien.md`.
Repo: [cschlaefke/Shuffle](https://git.cshomelabs.work/cschlaefke/Shuffle/issues) · Milestone: **R1** (in Forgejo noch nicht angelegt, Issues aktuell ohne Milestone) · 4 Epics, 26 Stories, 26 Issues.
Akzeptanzkriterien stehen 1:1 als nummerierte Checkliste in den Issues und werden als „KTO-01 Kriterium 3“ referenziert. 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 Fragen als Kommentar im Issue).
| 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 | ja |
| KAT-05 | [#2](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/2) | Katalogdaten laden und aktuell halten | Katalog | Must | XL | R1.1 (Import), R1.2 (Admin-Pflege, Meldungen) | offen | ja |
| KAT-01 | [#3](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/3) | Spiele suchen | Katalog | Must | L | R1.1 | offen | ja |
| KAT-02 | [#4](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/4) | Spieldetailseite | Katalog | Must | M | R1.1 | offen | ja |
| KTO-04 | [#5](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/5) | Privatsphäre (in R1 nur der Hinweis) | Konto | Must | S | R1.1 | offen | ja |
| 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 | ja |
| SAM-04 | [#8](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/8) | Wunschliste mit Priorität | Sammlung | Must | M | R1.2 | offen | ja |
| SAM-05 | [#9](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/9) | Einkaufsliste führen | Sammlung | Must | M | R1.2 | offen | ja |
| SAM-06 | [#10](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/10) | In die Sammlung übernehmen | Sammlung | Must | S | R1.2 | offen | ja |
| SAM-03 | [#11](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/11) | Sammlung durchsuchen, filtern und sortieren | Sammlung | Must | L | R1.2 | offen | ja |
| KAT-03 | [#12](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/12) | Erweiterungen und Editionen | Katalog | Must | M | R1.2 | offen | ja |
| KAT-04 | [#13](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/13) | Fehlendes Spiel melden | Katalog | Must | L | R1.2 | offen | ja |
| KTO-02 | [#14](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/14) | Profil bearbeiten | Konto | Must | L | R1.2 | offen | ja |
| PAR-01 | [#15](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/15) | Partie erfassen | Partien | Must | XL | R1.3 | offen | ja |
| PAR-02 | [#16](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/16) | Mitspieler hinzufügen | Partien | Must | M | R1.3 | offen | ja |
| PAR-03 | [#17](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/17) | Ergebnis erfassen | Partien | Must | L | R1.3 | offen | ja |
| PAR-04 | [#18](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/18) | Wertungsbogen je Spiel | Partien | Must | M | R1.3 | offen | ja |
| PAR-05 | [#19](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/19) | Partie bearbeiten und löschen | Partien | Must | M | R1.3 | offen | ja |
| PAR-06 | [#20](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/20) | Partienverlauf | Partien | Must | M | R1.3 | offen | ja |
| PAR-07 | [#21](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/21) | Persönliche Statistik | Partien | Must | L | R1.3 | offen | ja |
| PAR-08 | [#22](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/22) | Statistik je Spiel | Partien | Must | M | R1.3 | offen | ja |
| KTO-05 | [#23](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/23) | Konto löschen und Daten exportieren | Konto | Must | XL | R1.4 | offen | ja |
| 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 | ja |
| 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 | ja |
| 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 | ja |
## Epics
| Epic | Label | Stories (Issues) |
| --- | --- | --- |
| KTO Konto & Profil | `epic/konto` | KTO-01 (#1), KTO-02 (#14), KTO-04 (#5), KTO-05 (#23) |
| 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) |
## Etappen (im Milestone R1)
| Etappe | Issues |
| --- | --- |
| R1.1 Fundament | #1, #2 (Import), #3, #4, #5 |
| R1.2 Sammlung | #6, #7, #8, #9, #10, #11, #12, #13, #2 (Admin-Pflege, Meldungen), #14 |
| R1.3 Partien | #15, #16, #17, #18, #19, #20, #21, #22 |
| 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).
## Abhängigkeiten
In Forgejo als blockierende Abhängigkeiten gesetzt (Issue hängt ab von …):
| Issue | hängt ab von |
| --- | --- |
| #3 KAT-01 | #2 |
| #4 KAT-02 | #3 |
| #5 KTO-04 | #1 |
| #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 |
| #24 SAM-07 | #1 |
| #25 SAM-08 | #2, #6, #8, #13, #24 |
| #26 SAM-09 | #7, #25 |
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)
- SAM-05 (#9) Kriterium 3 → SAM-06 (#10)
- 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; Admin-Rolle für #2 und #13
## Offene Fragen
Nummerierung wie in `requirements/r1-story-entwurf.md` § 5. Der Wortlaut steht als Kommentar im jeweiligen Issue.
### A. Widersprüche zwischen Akzeptanzkriterien und Datenmodell/Migrationen
| Nr | Thema | Issues |
| --- | --- | --- |
| 1 | Spiel gleichzeitig in Sammlung, Wunsch- und Einkaufsliste? (`unique (owner_id, game_id)`) | #8, #10, #25 |
| 2 | Felder für SAM-02/04/05 fehlen im Datenmodell | #7, #8, #9 |
| 3 | Deutscher und englischer Titel (alternative Titel) | #3 |
| 4 | Verlagsfeld fehlt | #3, #4 |
| 5 | Beziehung Erweiterung ↔ Basisspiel fehlt | #12 |
| 6 | Tabelle für Meldungen fehlt | #13 |
| 7 | Ausblenden, manuell gepflegte Felder, Erlaubnis je Quelle | #2 |
| 8 | Profil-Genres fehlen, gleiche Liste wie Katalog? | #14 |
| 9 | Stadt im Profil vs. „alles privat“ | #5 |
| 10 | Löschumfang Partien, private Katalogeinträge, Meldungen | #23 |
| 11 | Ort, Gästeliste, kooperativ/Teams fehlen im Modell | #15, #16, #17, #20 |
| 12 | BGG-Import: „nicht gefunden“ vs. automatische private Einträge | #25 |
### B. Unklare oder nicht testbare Kriterien
| Nr | Thema | Issues |
| --- | --- | --- |
| 13 | KAT-01 Kriterium 8 unvollständig, Filterumfang | #3 |
| 14 | „Normale Verbindung“ für 2 s | #3 |
| 15 | Wann ist ein Eintrag „sehr ähnlich“? | #13 |
| 16 | „Flüssig“ bei 1000 Spielen – Zielwert | #11 |
| 17 | „Einige Sekunden“ für Rückgängig | #8, #9, #10 |
| 18 | Drosselung, Gültigkeit Reset- und Bestätigungslink | #1 |
| 19 | KTO-04 Kriterium 2 in R1 nicht testbar | #5 |
| 20 | Löschfrist, Exportformat und -umfang, Benachrichtigung, Neuregistrierung | #23 |
| 21 | Datenschutzerklärung/AGB, Prüfung Mindestalter, optionale Dienste | #1 |
### C. Fachliche Lücken je Story
| Nr | Thema | Issues |
| --- | --- | --- |
| 22 | Regeln Anzeigename bei Registrierung, Abmelden/E-Mail/Passwort ändern | #1 |
| 23 | Vorläufige Spiele als Lieblingsspiele, Reihenfolge ändern | #14 |
| 24 | Zugelassene Datenquellen ohne BGG-Lizenz (kritisch für R1) | #2, #4 |
| 25 | Admin-Bereich in der App oder internes Werkzeug, wer ist Admin | #2 |
| 26 | Rückmeldung zu Meldungen, Ablehnung ohne Zieleintrag | #13 |
| 27 | Moderation und Spam-Limit für Meldungen | #13 |
| 28 | Edition Pflicht/optional, auch für Listen und Partien | #12 |
| 29 | Werte der Zustandsliste, Verwaltung von Tags/Standorten | #7 |
| 30 | Suche/Filter auch für Wunsch- und Einkaufsliste, Leerzustand ohne Lizenz | #11 |
| 31 | Summe der Einkaufsliste, Verhalten bei abgelehnter Übernahme | #9 |
| 32 | Umgang mit Listen-Notiz bei vorhandener Sammlungsnotiz | #10 |
| 33 | Eine BGG-Verknüpfung je Konto, mehrfach verknüpfter BGG-Name | #24 |
| 34 | Zählende BGG-Status, Prioritätsabbildung, Erweiterungen | #25 |
| 35 | „In Shuffle selbst hinzugefügt“, Dauer der Hervorhebung | #26 |
| 36 | Datum/Uhrzeit, wählbare Spiele, Offline-Konflikte, Offline im Web | #15, #19 |
| 37 | Selbst entfernen, Namensvergleich, Gäste löschen, Längenbegrenzung | #16 |
| 38 | Kooperativer Sieg in Siegquote, Teampunkte, niedrigste Punktzahl gewinnt | #17, #21 |
| 39 | Mehrere Wertungsbögen, Kategorien löschen, Minus-Kategorien | #18 |
| 40 | Siegquote ohne eigene Teilnahme, Diagrammzeitraum, Spielzeit | #21 |
| 41 | Definition Bestwert, Gäste als häufigste Mitspieler | #22 |
### D. Querschnitt und fehlende Stories
| Nr | Thema | Issues |
| --- | --- | --- |
| 42 | Startseite/Dashboard (F18) – keine Story | keinem Issue zugeordnet, Entscheidung Chris offen |
| 43 | Einstellungsbereich (Sprachwechsel, Abmelden, Hinweis, Konto löschen) – keine Story | keinem Issue zugeordnet, Entscheidung Chris offen |
| 44 | Admin-Rolle (QUE-07) und Admin-Bereich (QUE-08) – keine Story, von KAT-04/KAT-05 vorausgesetzt | keinem Issue zugeordnet, Entscheidung Chris offen |
| 45 | E-Mails in R1, Sprache der Mails | #1, #13, #23 |
| 46 | Diagramme für Screenreader | #21 |
| 47 | Selbstbestätigung Mindestalter 16 ausreichend? | #1 |
| 48 | Kennzeichnung fremdsprachiger Katalogtexte | #4 |