Merge pull request 'docs(requirements): R1 intake – backlog, clarifications, KTO-11, QUE-09' (#27) from docs/r1-intake into main
Reviewed-on: #27
This commit is contained in:
commit
f15810ecf6
5 changed files with 752 additions and 85 deletions
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
2026-11-01 · Chris
|
2026-11-01 · Chris
|
||||||
|
|
||||||
|
> **Änderungsvermerk 2026-11-02:** R1-Entscheidungen aus [`r1-klaerungen.md`](r1-klaerungen.md) als Hinweise ergänzt (Stadt nur für den Nutzer selbst in R1, Offline nur in den Apps, Katalog manuell und Admin-Pflege per Supabase Studio, anonyme Reichweitenmessung, allgemeine Privatsphäre-Regel bei KTO-04, neue R1-Stories KTO-11 und QUE-09). Die R1-Akzeptanzkriterien stehen in `20-r1-akzeptanzkriterien.md`.
|
||||||
|
|
||||||
Entwurf zur Abstimmung: Deine 18 Punkte als 12 Epics mit Story-Titeln, einem Vorschlag für den Release-Schnitt und den Fragen, die vor der Architektur geklärt werden müssen. Akzeptanzkriterien schreiben wir erst für die Epics, die in den ersten Release kommen.
|
Entwurf zur Abstimmung: Deine 18 Punkte als 12 Epics mit Story-Titeln, einem Vorschlag für den Release-Schnitt und den Fragen, die vor der Architektur geklärt werden müssen. Akzeptanzkriterien schreiben wir erst für die Epics, die in den ersten Release kommen.
|
||||||
|
|
||||||
## Entscheidungen (Stand 2. November 2026)
|
## Entscheidungen (Stand 2. November 2026)
|
||||||
|
|
@ -13,19 +15,19 @@ Die Grundsatzfragen F1 bis F7, drei Detailfragen für R1 und der Release-Schnitt
|
||||||
| Nr | Entscheidung | Folge |
|
| Nr | Entscheidung | Folge |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| F1 | Markt und Sprachen: DACH, Deutsch und Englisch ab Start | Postleitzahlen für Deutschland, Österreich und Schweiz; zweisprachige Oberfläche von Anfang an |
|
| F1 | Markt und Sprachen: DACH, Deutsch und Englisch ab Start | Postleitzahlen für Deutschland, Österreich und Schweiz; zweisprachige Oberfläche von Anfang an |
|
||||||
| F2 | Katalog: BGG-Lizenz beantragen, den Katalog aber BGG-unabhängig bauen | Eigene Spiel-IDs, die BGG-Kennung nur als Zusatzfeld; ohne Lizenz läuft die App weiter. Laut [BGG-Bedingungen](https://boardgamegeek.com/wiki/page/XML_API_Terms_of_Use) und [Nutzungsleitfaden](https://boardgamegeek.com/using_the_xml_api) ist die Lizenz für kommerzielle Apps nötig, „Powered by BGG“ ist Pflicht, Anfragen laufen über den Server mit Zwischenspeicher |
|
| F2 | Katalog: BGG-Lizenz beantragen, den Katalog aber BGG-unabhängig bauen | Eigene Spiel-IDs, die BGG-Kennung nur als Zusatzfeld; ohne Lizenz läuft die App weiter. Laut [BGG-Bedingungen](https://boardgamegeek.com/wiki/page/XML_API_Terms_of_Use) und [Nutzungsleitfaden](https://boardgamegeek.com/using_the_xml_api) ist die Lizenz für kommerzielle Apps nötig, „Powered by BGG“ ist Pflicht, Anfragen laufen über den Server mit Zwischenspeicher. **R1 (Klärungen 24, 44):** Der Katalog wird zum Start nur manuell gepflegt, ein Import-Job kommt erst mit der Lizenz; der Admin pflegt Katalog und Meldungen über Supabase Studio/SQL |
|
||||||
| F3 | Offline: nur das Erfassen von Partien | Lokale Speicherung und Abgleich nur für Partien |
|
| F3 | Offline: nur das Erfassen von Partien | Lokale Speicherung und Abgleich nur für Partien. **R1 (Klärung 36):** Offline-Erfassung nur in den Apps (iOS, Android); im Browser erscheint der Hinweis „Verbindung nötig“ |
|
||||||
| F4 | Premium: zunächst keine Premium-Funktionen, gegebenenfalls eine Spendenmöglichkeit | KI-Erkennung und Epic PRE sind zurückgestellt; laut BGG-Leitfaden braucht auch eine reine Spenden-App eine kommerzielle Lizenz, die vermutlich kostenlos ist |
|
| F4 | Premium: zunächst keine Premium-Funktionen, gegebenenfalls eine Spendenmöglichkeit | KI-Erkennung und Epic PRE sind zurückgestellt; laut BGG-Leitfaden braucht auch eine reine Spenden-App eine kommerzielle Lizenz, die vermutlich kostenlos ist |
|
||||||
| F5 | Standort: Stadt ist für andere sichtbar | Stadt wird aus der PLZ abgeleitet und angezeigt, die PLZ selbst bleibt verborgen. Ob Nutzer die Stadtangabe abschalten können, regelt KTO-04 |
|
| F5 | Standort: Stadt ist für andere sichtbar | Stadt wird aus der PLZ abgeleitet und angezeigt, die PLZ selbst bleibt verborgen. Ob Nutzer die Stadtangabe abschalten können, regelt KTO-04. **R1 (Klärung 9):** Die Stadt ist in R1 nur für den Nutzer selbst sichtbar |
|
||||||
| F6 | Händler und Vereine: manuelle Prüfung durch dich, kostenlos | Freigabe-Ablauf im Admin-Bereich (QUE-08) |
|
| F6 | Händler und Vereine: manuelle Prüfung durch dich, kostenlos | Freigabe-Ablauf im Admin-Bereich (QUE-08) |
|
||||||
| F7 | Plattformen: Mobile zuerst, Web mit demselben Kern | Eine Codebasis, alle Kernfunktionen auch im Web |
|
| F7 | Plattformen: Mobile zuerst, Web mit demselben Kern | Eine Codebasis, alle Kernfunktionen auch im Web |
|
||||||
| F8 | Mindestalter: ab 16 | Altersbestätigung bei der Registrierung (KTO-01); rechtliche Prüfung vor dem Start |
|
| F8 | Mindestalter: ab 16 | Altersbestätigung bei der Registrierung (KTO-01); rechtliche Prüfung vor dem Start. **R1 (Klärung 21/47):** Selbstbestätigung „mindestens 16“ reicht bis zur rechtlichen Prüfung |
|
||||||
| F9 | BGG-Sync: nur Import, manuell auslösbar | Kein Zurückschreiben, keine automatischen Hintergrundabrufe (SAM-07 bis SAM-09) |
|
| F9 | BGG-Sync: nur Import, manuell auslösbar | Kein Zurückschreiben, keine automatischen Hintergrundabrufe (SAM-07 bis SAM-09) |
|
||||||
| F11 | Partien: Gäste ohne Konto möglich, verknüpfte Nutzer müssen bestätigen | In R1 nur Gäste mit Namen; Verknüpfung und Bestätigung kommen mit R2 (PAR-02) |
|
| F11 | Partien: Gäste ohne Konto möglich, verknüpfte Nutzer müssen bestätigen | In R1 nur Gäste mit Namen; Verknüpfung und Bestätigung kommen mit R2 (PAR-02) |
|
||||||
| S1 | BGG-Import bleibt in R1, wird aber als Letztes gebaut | Kommt die Lizenz nicht rechtzeitig, startet R1 ohne Import und er wird nachgeliefert |
|
| S1 | BGG-Import bleibt in R1, wird aber als Letztes gebaut | Kommt die Lizenz nicht rechtzeitig, startet R1 ohne Import und er wird nachgeliefert |
|
||||||
| S2 | KI-Erkennung aus Fotos ist zurückgestellt, bis die Finanzierung geklärt ist | SAM-10 und Epic PRE ruhen vorerst |
|
| S2 | KI-Erkennung aus Fotos ist zurückgestellt, bis die Finanzierung geklärt ist | SAM-10 und Epic PRE ruhen vorerst |
|
||||||
| S3 | Reihenfolge: erst Gruppen (R2), dann Community (R3) | Gruppen liefern echte Nutzung am Spieltisch, bevor Shelfies und Reviews Inhalte brauchen |
|
| S3 | Reihenfolge: erst Gruppen (R2), dann Community (R3) | Gruppen liefern echte Nutzung am Spieltisch, bevor Shelfies und Reviews Inhalte brauchen |
|
||||||
| F18 | Startseite: persönliches Dashboard bis R3, News-Seite ab R4 | Dashboard zeigt zuletzt gespielt, Wunschliste, nächste Termine |
|
| F18 | Startseite: persönliches Dashboard bis R3, News-Seite ab R4 | Dashboard zeigt zuletzt gespielt, Wunschliste, nächste Termine. **R1 (Klärung 42):** eigene Story QUE-09 mit zuletzt gespielt und Wunschliste; nächste Termine erst mit den Gruppen (R2) |
|
||||||
|
|
||||||
**Aufgabe für dich:** BGG-Anwendung registrieren und die Lizenz beantragen, damit die Antwort da ist, wenn R1 fertig wird.
|
**Aufgabe für dich:** BGG-Anwendung registrieren und die Lizenz beantragen, damit die Antwort da ist, wenn R1 fertig wird.
|
||||||
|
|
||||||
|
|
@ -77,7 +79,9 @@ Konto, Katalog, Sammlung und Partien bilden R1. Stories ohne Zusatz gehören in
|
||||||
- **KTO-02** Profil bearbeiten: Anzeigename, Avatar, Kurzbeschreibung, Lieblingsspiele/Genres
|
- **KTO-02** Profil bearbeiten: Anzeigename, Avatar, Kurzbeschreibung, Lieblingsspiele/Genres
|
||||||
- **KTO-03** Wohnort per PLZ angeben und festlegen, was andere davon sehen (R2)
|
- **KTO-03** Wohnort per PLZ angeben und festlegen, was andere davon sehen (R2)
|
||||||
- **KTO-04** Privatsphäre je Bereich einstellen: privat, Freunde, öffentlich
|
- **KTO-04** Privatsphäre je Bereich einstellen: privat, Freunde, öffentlich
|
||||||
- **KTO-05** Konto und Daten löschen, Daten exportieren
|
- **Allgemeine Regel (Klärung 19):** Führt ein Release neue Freigaben ein, sind neue Bereiche standardmäßig privat, bis der Nutzer sie freigibt (Privacy by Default). Gilt für alle künftigen Freigabe-Stories (u. a. KTO-03, KTO-06 bis KTO-08, GRP, COM). In R1 besteht KTO-04 nur aus dem Hinweis „alles privat“.
|
||||||
|
- **KTO-05** Konto und Daten löschen, Daten exportieren (R1: der Einstieg in den Einstellungen gehört zu KTO-05, N14)
|
||||||
|
- **KTO-11** Einstellungsbereich: Sprache, Abmelden, E-Mail und Passwort ändern, Privatsphäre-Hinweis, Rechtstexte, Hinweis und Ausschalter zur anonymen Messung (neu in R1, Klärungen 22, 43, N5, N14)
|
||||||
- **KTO-06** Lieblingsspiele im Profil festlegen (R3)
|
- **KTO-06** Lieblingsspiele im Profil festlegen (R3)
|
||||||
- **KTO-07** Youtube-, BGG-, BGA-, Steam- und Discord-Name mit Link hinterlegen (R3)
|
- **KTO-07** Youtube-, BGG-, BGA-, Steam- und Discord-Name mit Link hinterlegen (R3)
|
||||||
- **KTO-08** Profile anderer Nutzer ansehen (R3)
|
- **KTO-08** Profile anderer Nutzer ansehen (R3)
|
||||||
|
|
@ -90,7 +94,7 @@ Konto, Katalog, Sammlung und Partien bilden R1. Stories ohne Zusatz gehören in
|
||||||
- **KAT-02** Spieldetailseite mit Cover, Eckdaten und Beschreibung
|
- **KAT-02** Spieldetailseite mit Cover, Eckdaten und Beschreibung
|
||||||
- **KAT-03** Erweiterungen und Editionen eines Spiels abbilden
|
- **KAT-03** Erweiterungen und Editionen eines Spiels abbilden
|
||||||
- **KAT-04** Fehlendes Spiel melden oder anlegen
|
- **KAT-04** Fehlendes Spiel melden oder anlegen
|
||||||
- **KAT-05** Katalogdaten aus der Quelle laden und aktuell halten
|
- **KAT-05** Katalogdaten aus der Quelle laden und aktuell halten (R1: nur manuelle Pflege durch den Admin über Supabase Studio/SQL, Import erst mit Lizenz; Klärungen 24, 44). Startbestand ca. 200 Spiele, nur Fakten, keine fremden Cover oder Beschreibungstexte, sondern Platzhalter-Cover und eigene Kurztexte (N11)
|
||||||
|
|
||||||
### SAM – Sammlung & Listen
|
### SAM – Sammlung & Listen
|
||||||
|
|
||||||
|
|
@ -201,10 +205,15 @@ News und Events bilden R4, Premium ist zurückgestellt. Crowdfunding und Zubehö
|
||||||
- **QUE-02** Inhalte und Nutzer melden, Nutzer blockieren
|
- **QUE-02** Inhalte und Nutzer melden, Nutzer blockieren
|
||||||
- **QUE-03** Moderationsansicht für Admins: Meldungen prüfen, sperren, löschen
|
- **QUE-03** Moderationsansicht für Admins: Meldungen prüfen, sperren, löschen
|
||||||
- **QUE-04** Datenschutz: Einwilligungen, Datenschutzerklärung, Löschfristen
|
- **QUE-04** Datenschutz: Einwilligungen, Datenschutzerklärung, Löschfristen
|
||||||
|
- **R1 (Klärung 21/47):** Nur anonyme, cookielose Reichweitenmessung ohne Geräte-IDs und ohne Einwilligung (z. B. selbst gehostet); keine weiteren Analyse- oder Tracking-Dienste. Datenschutzerklärung und Nutzungsbedingungen liefert Chris vor dem Release, rechtliche Prüfung vor dem Release nötig. Löschfrist 30 Tage inkl. Sicherungen (Klärung 20). Die anonyme Messung lässt sich freiwillig in den Einstellungen ausschalten (N5).
|
||||||
- **QUE-05** Mehrsprachigkeit Deutsch und Englisch
|
- **QUE-05** Mehrsprachigkeit Deutsch und Englisch
|
||||||
|
- **R1 (N3):** Ohne Anmeldung gilt die Gerätesprache (Fallback Englisch), änderbar; nach der Anmeldung gilt die Profilsprache auf allen Geräten. Keine Option „wie Gerät“.
|
||||||
- **QUE-06** Barrierefreiheit
|
- **QUE-06** Barrierefreiheit
|
||||||
- **QUE-07** Rollen und Rechte: Nutzer, Händler, Verein, Admin
|
- **QUE-07** Rollen und Rechte: Nutzer, Händler, Verein, Admin
|
||||||
|
- **R1 (Klärung 44):** Die Admin-Rolle existiert nur als Datenbankrolle (Zugriffsregeln), ohne eigene Story.
|
||||||
- **QUE-08** Admin-Bereich für Katalog, News-Quellen und Verifizierung
|
- **QUE-08** Admin-Bereich für Katalog, News-Quellen und Verifizierung
|
||||||
|
- **R1 (Klärungen 24, 44):** Kein Admin-Bereich in der App bis QUE-08 (R4). Der Admin pflegt Katalog und Meldungen über Supabase Studio/SQL; der Ablauf wird im Repo dokumentiert.
|
||||||
|
- **QUE-09** Startseite: persönliches Dashboard mit zuletzt gespielt und Wunschliste (neu in R1, Klärung 42; ab R4 ersetzt durch NEW-01). R1 zusätzlich Schnellaktion „Partie erfassen“ und Kurzstatistik, je Bereich 5 Einträge; ohne Anmeldung Katalogsuche und Anmelde-Hinweis (N6–N9)
|
||||||
|
|
||||||
## Offene Fragen
|
## Offene Fragen
|
||||||
|
|
||||||
|
|
@ -242,7 +251,7 @@ Die Features laufen auf ein relationales Datenmodell mit sauberen Zugriffsregeln
|
||||||
| News und Feeds | Regelmäßiger Abruf externer Quellen, Zwischenspeicher, Quellenverwaltung |
|
| News und Feeds | Regelmäßiger Abruf externer Quellen, Zwischenspeicher, Quellenverwaltung |
|
||||||
| Benachrichtigungen | Push für iOS, Android und Web sowie E-Mail, Einstellungen je Nutzer |
|
| Benachrichtigungen | Push für iOS, Android und Web sowie E-Mail, Einstellungen je Nutzer |
|
||||||
| Premium | zurückgestellt; bei einer Spendenfunktion gelten die Store-Regeln (F4) |
|
| Premium | zurückgestellt; bei einer Spendenfunktion gelten die Store-Regeln (F4) |
|
||||||
| Partien offline erfassen | Lokale Speicherung auf dem Gerät und Abgleich bei nächster Verbindung (F3) |
|
| Partien offline erfassen | Lokale Speicherung auf dem Gerät und Abgleich bei nächster Verbindung (F3); in R1 nur in den Apps, im Web nicht (Klärung 36); bei Konflikten gilt die letzte Änderung mit Hinweis an den Nutzer |
|
||||||
| Statistik | Auswertungen über viele Partien; anfangs reichen Datenbankabfragen |
|
| Statistik | Auswertungen über viele Partien; anfangs reichen Datenbankabfragen |
|
||||||
|
|
||||||
**Nächster Schritt:** F1 bis F7 und der Release-Schnitt sind entschieden. Du beantragst die BGG-Lizenz, ich schreibe die Akzeptanzkriterien für R1, danach gehen wir in die Architektur (ADR-0001 und folgende).
|
**Nächster Schritt:** F1 bis F7 und der Release-Schnitt sind entschieden. Du beantragst die BGG-Lizenz, ich schreibe die Akzeptanzkriterien für R1, danach gehen wir in die Architektur (ADR-0001 und folgende).
|
||||||
|
|
|
||||||
|
|
@ -4,28 +4,34 @@
|
||||||
|
|
||||||
2026-11-02 · Chris
|
2026-11-02 · Chris
|
||||||
|
|
||||||
Akzeptanzkriterien für die 26 Stories von R1 im Format Gegeben/Wenn/Dann, abgeleitet aus dem [Anforderungsdokument](https://claude.ai/artifact/NvqzTVrcd2aA3uqwwnG1ry) und den dort getroffenen Entscheidungen. Jedes Kriterium soll sich als Test prüfen lassen; Zahlenwerte sind meine Annahmen und änderbar.
|
> **Änderungsvermerk 2026-11-02:** Die Klärungen aller 48 offenen Fragen aus `r1-story-entwurf.md` § 5 sind eingearbeitet (verbindliche Entscheidungen: [`r1-klaerungen.md`](r1-klaerungen.md)). Gestrichene Kriterien sind als „~~n.~~ entfällt (Klärung X)“ markiert, damit Nummern und Referenzen wie „SAM-02 Kriterium 3“ stabil bleiben. Neue Kriterien sind hinten angehängt. Bis zur BGG-Lizenz zurückgestellte Kriterien sind als „*zurückgestellt*“ markiert. Neu sind die Stories KTO-11 Einstellungsbereich (Klärung 43) und QUE-09 Startseite (Klärung 42). Verweise der Form „(Klärung X)“ beziehen sich auf die Nummern in `r1-klaerungen.md`.
|
||||||
|
|
||||||
|
> **Änderungsvermerk 2026-11-02 (2):** Die Entscheidungen zu den Folgefragen N1–N14 und die Bestätigung zu PAR-08 Kriterium 6 sind eingearbeitet (Abschnitt „Neue Fragen aus dem Einarbeiten“ in [`r1-klaerungen.md`](r1-klaerungen.md)). Betroffen: KTO-01 (11), KTO-05 (neu 6), KTO-11 (1, 2, 4, 6, 7, neu 9–14), KAT-04 (7), KAT-05 (7, neu 10), SAM-08 (neu 10), PAR-08 (6), QUE-09 (1, 2, 4, neu 9–13), Datenschutz QUE-04 (4) und Sprachen QUE-05 (1). Herkunft ist als „(N…)“ vermerkt. Die zwei zunächst abgeleiteten Annahmen sind entschieden: KTO-11 Kriterium 11 bestätigt (N3a), QUE-09 Kriterium 10 korrigiert auf Siegquote gesamt (N8a); SAM-08 Kriterium 10 gilt je Nutzer (N12a).
|
||||||
|
|
||||||
|
Akzeptanzkriterien für die 28 Stories von R1 im Format Gegeben/Wenn/Dann, abgeleitet aus dem [Anforderungsdokument](https://claude.ai/artifact/NvqzTVrcd2aA3uqwwnG1ry) und den dort getroffenen Entscheidungen. Jedes Kriterium soll sich als Test prüfen lassen; Zahlenwerte sind meine Annahmen und änderbar.
|
||||||
|
|
||||||
## Geltungsbereich und Annahmen
|
## Geltungsbereich und Annahmen
|
||||||
|
|
||||||
R1 umfasst 26 Stories aus vier Epics. Alles, was andere Nutzer sehen könnte, kommt erst mit späteren Releases; in R1 sind alle Daten privat.
|
R1 umfasst 28 Stories aus vier Epics und dem Querschnitt. Alles, was andere Nutzer sehen könnten, kommt erst mit späteren Releases; in R1 sind alle Daten privat.
|
||||||
|
|
||||||
| Epic | In R1 | Nicht in R1 |
|
| Epic | In R1 | Nicht in R1 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| KTO Konto & Profil | KTO-01, KTO-02, KTO-04, KTO-05 | KTO-03 (R2), KTO-06 bis KTO-08 (R3), KTO-09 und KTO-10 (R4) |
|
| KTO Konto & Profil | KTO-01, KTO-02, KTO-04, KTO-05, KTO-11 (neu) | KTO-03 (R2), KTO-06 bis KTO-08 (R3), KTO-09 und KTO-10 (R4) |
|
||||||
| KAT Spielekatalog | KAT-01 bis KAT-05 | – |
|
| KAT Spielekatalog | KAT-01 bis KAT-05 (Import aus KAT-05 erst mit BGG-Lizenz) | – |
|
||||||
| SAM Sammlung & Listen | SAM-01 bis SAM-09 | SAM-10 (zurückgestellt) |
|
| SAM Sammlung & Listen | SAM-01 bis SAM-09 | SAM-10 (zurückgestellt) |
|
||||||
| PAR Partien & Statistik | PAR-01 bis PAR-08 | PAR-09 (R2), PAR-10 (R3) |
|
| PAR Partien & Statistik | PAR-01 bis PAR-08 | PAR-09 (R2), PAR-10 (R3) |
|
||||||
|
| QUE Querschnitt | QUE-09 Startseite (neu); QUE-04 bis QUE-06 als Querschnittskriterien | QUE-07/QUE-08 als App-Funktion (R4); Admin in R1 nur über Supabase Studio (Klärung 44) |
|
||||||
|
|
||||||
**Annahmen, auf denen die Kriterien beruhen**
|
**Annahmen, auf denen die Kriterien beruhen**
|
||||||
|
|
||||||
1. Lieblingsspiele und Genres gehören zum Profil in R1 (KTO-02), wie du es im Dokument ergänzt hast. KTO-06 beschränkt sich später auf die Anzeige im öffentlichen Profil.
|
1. Lieblingsspiele und Genres gehören zum Profil in R1 (KTO-02), wie du es im Dokument ergänzt hast. KTO-06 beschränkt sich später auf die Anzeige im öffentlichen Profil.
|
||||||
2. In R1 sieht niemand fremde Profile, Sammlungen oder Partien. Deshalb besteht KTO-04 in R1 nur aus dem Hinweis, dass alles privat ist.
|
2. In R1 sieht niemand fremde Profile, Sammlungen oder Partien. Deshalb besteht KTO-04 in R1 nur aus dem Hinweis, dass alles privat ist. Auch die Stadt im Profil ist in R1 nur für den Nutzer selbst sichtbar (Klärung 9).
|
||||||
3. Gast-Mitspieler sind reine Namen ohne Konto (F11); Verknüpfung und Bestätigung folgen mit R2.
|
3. Gast-Mitspieler sind reine Namen ohne Konto (F11); Verknüpfung und Bestätigung folgen mit R2.
|
||||||
4. Alle Funktionen laufen auf iOS, Android und im Web (F7); nur Partien lassen sich offline erfassen (F3).
|
4. Alle Funktionen laufen auf iOS, Android und im Web (F7); nur Partien lassen sich offline erfassen (F3), und das in R1 nur in den Apps, nicht im Browser (Klärung 36).
|
||||||
5. Die Oberfläche ist Deutsch und Englisch (F1), das Mindestalter ist 16 (F8).
|
5. Die Oberfläche ist Deutsch und Englisch (F1), das Mindestalter ist 16 (F8); die Selbstbestätigung reicht bis zur rechtlichen Prüfung vor dem Release (Klärung 21/47).
|
||||||
6. Der BGG-Import hängt an der Lizenz und wird zuletzt gebaut (S1, F9). Der Katalog ist BGG-unabhängig mit eigenen IDs (F2).
|
6. Der BGG-Import hängt an der Lizenz und wird zuletzt gebaut (S1, F9). Der Katalog ist BGG-unabhängig mit eigenen IDs (F2) und wird zum Start nur manuell gepflegt, vom Admin über Supabase Studio/SQL (Klärungen 24, 44).
|
||||||
7. Ein Spiel steht höchstens einmal in der Sammlung. Wunschliste heißt „habe ich gern“, Einkaufsliste „wird demnächst gekauft“.
|
7. Ein Spiel steht in genau einer Liste: Sammlung, Wunschliste oder Einkaufsliste (Klärung 1). Wunschliste heißt „habe ich gern“, Einkaufsliste „wird demnächst gekauft“.
|
||||||
|
8. Kaufpreis, Händler, geplanter Preis, Link und Summe der Einkaufsliste kommen nach R1 (Klärung 2).
|
||||||
|
|
||||||
**Lesehilfe:** Jede Story hat nummerierte Kriterien. Sie lassen sich als „KTO-01 Kriterium 3“ ansprechen und werden später zu Tests und zu Haken im Pull Request.
|
**Lesehilfe:** Jede Story hat nummerierte Kriterien. Sie lassen sich als „KTO-01 Kriterium 3“ ansprechen und werden später zu Tests und zu Haken im Pull Request.
|
||||||
|
|
||||||
|
|
@ -39,9 +45,13 @@ R1 umfasst 26 Stories aus vier Epics. Alles, was andere Nutzer sehen könnte, ko
|
||||||
4. Gegeben die E-Mail-Adresse ist schon registriert, wenn ich mich damit registriere, dann erfahre ich nicht, ob ein Konto existiert, und es entsteht kein zweites Konto.
|
4. Gegeben die E-Mail-Adresse ist schon registriert, wenn ich mich damit registriere, dann erfahre ich nicht, ob ein Konto existiert, und es entsteht kein zweites Konto.
|
||||||
5. Gegeben ein bestätigtes Konto, wenn ich die richtigen Zugangsdaten eingebe, dann bin ich angemeldet und bleibe es auf diesem Gerät, bis ich mich abmelde.
|
5. Gegeben ein bestätigtes Konto, wenn ich die richtigen Zugangsdaten eingebe, dann bin ich angemeldet und bleibe es auf diesem Gerät, bis ich mich abmelde.
|
||||||
6. Gegeben ein unbestätigtes Konto, wenn ich mich anmelde, dann werde ich auf die ausstehende Bestätigung hingewiesen und kann die E-Mail erneut senden lassen.
|
6. Gegeben ein unbestätigtes Konto, wenn ich mich anmelde, dann werde ich auf die ausstehende Bestätigung hingewiesen und kann die E-Mail erneut senden lassen.
|
||||||
7. Gegeben falsche Zugangsdaten, wenn ich mich anmelde, dann sehe ich eine allgemeine Fehlermeldung, die nicht verrät, ob E-Mail oder Passwort falsch war; nach mehreren Fehlversuchen wird der Zugang zeitweise gebremst.
|
7. Gegeben falsche Zugangsdaten, wenn ich mich anmelde, dann sehe ich eine allgemeine Fehlermeldung, die nicht verrät, ob E-Mail oder Passwort falsch war; nach mehreren Fehlversuchen wird der Zugang zeitweise gebremst. Anzahl der Versuche und Dauer der Bremse folgen den Standards der Supabase-Auth-Konfiguration (self-hosted); die Werte sind im Repo dokumentiert und in den Tests referenziert (Klärung 18).
|
||||||
8. Gegeben ich habe das Passwort vergessen, wenn ich das Zurücksetzen anfordere, dann erhalte ich einen zeitlich begrenzten Link, mit dem ich ein neues Passwort setze; der Link funktioniert nur einmal.
|
8. Gegeben ich habe das Passwort vergessen, wenn ich das Zurücksetzen anfordere, dann erhalte ich einen zeitlich begrenzten Link, mit dem ich ein neues Passwort setze; der Link funktioniert nur einmal. Die Gültigkeit von Reset- und Bestätigungslink folgt der Supabase-Auth-Konfiguration und ist im Repo dokumentiert (Klärung 18).
|
||||||
9. Gegeben ich habe das Passwort zurückgesetzt, dann bin ich auf allen anderen Geräten abgemeldet.
|
9. Gegeben ich habe das Passwort zurückgesetzt, dann bin ich auf allen anderen Geräten abgemeldet.
|
||||||
|
10. Gegeben ich registriere mich, wenn der Anzeigename leer ist oder länger als 30 Zeichen, dann kann ich mich nicht registrieren und sehe den Fehler am Feld; es gelten dieselben Regeln wie in KTO-02 Kriterium 1 (Klärung 22).
|
||||||
|
11. Gegeben Shuffle sendet mir eine E-Mail zur Bestätigung oder zum Zurücksetzen des Passworts, dann ist sie in der Sprache meines Profils; andere E-Mails verschickt Shuffle in R1 nicht, außer Bestätigungslink und Info-Mail beim Wechsel der E-Mail-Adresse (KTO-11 Kriterium 4) (Klärung 45, N2).
|
||||||
|
|
||||||
|
Abmelden sowie E-Mail-Adresse und Passwort ändern gehören zu KTO-11 (Klärung 22).
|
||||||
|
|
||||||
### KTO-02 Profil bearbeiten
|
### KTO-02 Profil bearbeiten
|
||||||
|
|
||||||
|
|
@ -49,69 +59,104 @@ R1 umfasst 26 Stories aus vier Epics. Alles, was andere Nutzer sehen könnte, ko
|
||||||
2. Gegeben ich wähle ein Bild als Avatar (JPG oder PNG, höchstens 5 MB), wenn ich speichere, dann wird es quadratisch zugeschnitten angezeigt; ein zu großes oder falsches Format wird mit Hinweis abgelehnt.
|
2. Gegeben ich wähle ein Bild als Avatar (JPG oder PNG, höchstens 5 MB), wenn ich speichere, dann wird es quadratisch zugeschnitten angezeigt; ein zu großes oder falsches Format wird mit Hinweis abgelehnt.
|
||||||
3. Gegeben ich habe keinen Avatar, dann sehe ich einen Platzhalter mit meinen Initialen.
|
3. Gegeben ich habe keinen Avatar, dann sehe ich einen Platzhalter mit meinen Initialen.
|
||||||
4. Gegeben ich schreibe eine Kurzbeschreibung, wenn sie länger als 300 Zeichen ist, dann kann ich nicht speichern.
|
4. Gegeben ich schreibe eine Kurzbeschreibung, wenn sie länger als 300 Zeichen ist, dann kann ich nicht speichern.
|
||||||
5. Gegeben ich suche im Katalog, wenn ich bis zu 5 Spiele als Lieblingsspiele auswähle, dann werden sie in dieser Reihenfolge in meinem Profil gespeichert; ein sechstes wird abgelehnt.
|
5. Gegeben ich suche im Katalog, wenn ich bis zu 5 Spiele als Lieblingsspiele auswähle, dann werden sie in dieser Reihenfolge in meinem Profil gespeichert; ein sechstes wird abgelehnt. Wählbar sind nur Katalogspiele, keine vorläufigen Spiele aus KAT-04 (Klärung 23).
|
||||||
6. Gegeben ich wähle Genres aus einer festen Liste, dann werden sie im Profil gespeichert und lassen sich wieder entfernen.
|
6. Gegeben ich wähle Genres aus derselben Genre-Liste, die auch der Katalog verwendet, dann werden sie im Profil gespeichert und lassen sich wieder entfernen (Klärung 8).
|
||||||
7. Gegeben ich habe gespeichert, wenn ich mich auf einem anderen Gerät anmelde, dann sehe ich dieselben Profilangaben.
|
7. Gegeben ich habe gespeichert, wenn ich mich auf einem anderen Gerät anmelde, dann sehe ich dieselben Profilangaben.
|
||||||
|
8. Gegeben ich habe mindestens zwei Lieblingsspiele, wenn ich die Reihenfolge per Ziehen oder per Aktion „nach oben“/„nach unten“ ändere, dann wird die neue Reihenfolge gespeichert; die Aktionen „nach oben“/„nach unten“ sind auch per Screenreader und Tastatur bedienbar (Klärung 23).
|
||||||
|
9. Gegeben in meinem Profil ist eine Stadt hinterlegt, dann ist sie in R1 nur für mich sichtbar; ein anderer Nutzer kann sie weder über die App noch über die Schnittstelle lesen (Klärung 9).
|
||||||
|
|
||||||
### KTO-04 Privatsphäre (in R1 nur der Hinweis)
|
### KTO-04 Privatsphäre (in R1 nur der Hinweis)
|
||||||
|
|
||||||
1. Gegeben ich öffne die Einstellungen, dann steht dort, dass Profil, Sammlung, Listen und Partien nur für mich sichtbar sind.
|
1. Gegeben ich öffne die Einstellungen (KTO-11), dann steht dort, dass Profil (einschließlich Stadt), Sammlung, Listen und Partien nur für mich sichtbar sind.
|
||||||
2. Gegeben ein späterer Release führt neue Freigaben ein, dann sind neue Bereiche standardmäßig privat, bis ich sie freigebe.
|
|
||||||
|
~~2.~~ entfällt (Klärung 19): Die Regel „neue Freigabebereiche sind standardmäßig privat, bis ich sie freigebe“ steht jetzt als allgemeine Regel in `10-anforderungen.md` bei KTO-04 und ist in R1 nicht testbar.
|
||||||
|
|
||||||
### KTO-05 Konto löschen und Daten exportieren
|
### KTO-05 Konto löschen und Daten exportieren
|
||||||
|
|
||||||
1. Gegeben ich bin angemeldet, wenn ich „Konto löschen“ wähle, die Folgen bestätige und mein Passwort eingebe, dann bin ich sofort abgemeldet und mein Konto ist nicht mehr nutzbar.
|
1. Gegeben ich bin angemeldet, wenn ich in den Einstellungen (KTO-11) „Konto löschen“ wähle, die Folgen bestätige und mein Passwort eingebe, dann bin ich sofort abgemeldet und mein Konto ist nicht mehr nutzbar.
|
||||||
2. Gegeben ich habe mein Konto gelöscht, dann sind Profil, Sammlung, Listen, Partien und Gast-Namen innerhalb der in der Datenschutzerklärung genannten Frist endgültig gelöscht, auch aus den Sicherungen.
|
2. Gegeben ich habe mein Konto gelöscht, dann sind innerhalb von 30 Tagen alle meine Daten endgültig gelöscht, auch aus den Sicherungen: Profil, Sammlung, Listen, Partien, Gäste, Wertungsbögen, meine vorläufigen privaten Katalogeinträge und meine offenen Meldungen (Klärungen 10, 20).
|
||||||
3. Gegeben mein Konto ist gelöscht, wenn ich mich anmelden will, dann ist das nicht möglich; dieselbe E-Mail-Adresse kann ich neu registrieren.
|
3. Gegeben mein Konto ist gelöscht, wenn ich mich anmelden will, dann ist das nicht möglich; dieselbe E-Mail-Adresse kann ich sofort neu registrieren (Klärung 20).
|
||||||
4. Gegeben ich fordere einen Datenexport an, wenn er fertig ist, dann erhalte ich eine Datei in einem maschinenlesbaren Format (JSON oder CSV) mit Profil, Sammlung, Listen und Partien.
|
4. Gegeben ich fordere in der App einen Datenexport an, wenn er fertig ist, dann sehe ich einen Hinweis in der App (keine E-Mail) und erhalte eine JSON-Datei mit allen meinen Daten, insbesondere Profil mit Avatar-Link, Sammlung, Listen, Partien, Gäste, Wertungsbögen und vorläufige Spiele (Klärungen 20, 45).
|
||||||
5. Gegeben der Export ist fertig, dann ist er nur über mein angemeldetes Konto abrufbar und läuft nach einer begrenzten Zeit ab.
|
5. Gegeben der Export ist fertig, dann ist er nur in der App über mein angemeldetes Konto abrufbar und 7 Tage lang gültig; danach ist er nicht mehr abrufbar (Klärung 20).
|
||||||
|
6. Gegeben ich bin angemeldet, wenn ich die Einstellungen (KTO-11) öffne, dann finde ich dort den Einstieg zu „Daten exportieren“ und „Konto löschen“; diese Story ergänzt den Einstieg im Einstellungsbereich selbst (N14).
|
||||||
|
|
||||||
|
### KTO-11 Einstellungsbereich (neu, Klärung 43)
|
||||||
|
|
||||||
|
Als angemeldeter Nutzer möchte ich einen Einstellungsbereich, in dem ich Sprache, Zugangsdaten und Datenschutzthemen an einem Ort finde, damit ich mein Konto selbst verwalten kann.
|
||||||
|
|
||||||
|
1. Gegeben ich bin angemeldet, wenn ich die Einstellungen öffne, dann finde ich dort: Sprache, E-Mail-Adresse ändern, Passwort ändern, Abmelden, den Privatsphäre-Hinweis (KTO-04 Kriterium 1), die Rechtstexte (Kriterium 13) und den Hinweis zur anonymen Messung (Kriterium 14). Den Einstieg zu Datenexport und Konto löschen ergänzt KTO-05 selbst (KTO-05 Kriterium 6, N14).
|
||||||
|
2. Gegeben ich bin angemeldet und wähle in den Einstellungen Deutsch oder Englisch, dann wechselt die Oberfläche sofort in diese Sprache; die Wahl wird als Sprache meines Profils gespeichert, gilt nach einem Neustart und auf allen Geräten, auf denen ich angemeldet bin, und auch für System-E-Mails (QUE-05 Kriterium 1, Klärung 45, N3). Eine Option „wie Gerät“ gibt es nicht (N3).
|
||||||
|
3. Gegeben ich wähle „Abmelden“, dann bin ich auf diesem Gerät abgemeldet und die App zeigt keine privaten Daten meines Kontos mehr.
|
||||||
|
4. Gegeben ich will meine E-Mail-Adresse ändern, wenn ich mein aktuelles Passwort und eine neue Adresse eingebe, dann erhalte ich an die neue Adresse eine E-Mail mit Bestätigungslink und an die alte Adresse eine Info-Mail über die Änderung; erst nach der Bestätigung gilt die neue Adresse für die Anmeldung, bis dahin die alte (Klärung 22, N2, N13).
|
||||||
|
5. Gegeben die neue E-Mail-Adresse ist schon für ein anderes Konto registriert, wenn ich sie eintrage, dann erfahre ich nicht, ob dazu ein Konto existiert (wie KTO-01 Kriterium 4), und meine Adresse bleibt unverändert.
|
||||||
|
6. Gegeben ich will mein Passwort ändern, wenn ich mein aktuelles Passwort und ein neues Passwort eingebe, das die Regeln aus KTO-01 Kriterium 3 erfüllt, dann gilt ab sofort das neue Passwort (Klärung 22, N13).
|
||||||
|
7. Gegeben ich ändere Passwort oder E-Mail-Adresse, wenn das aktuelle Passwort falsch ist oder das neue Passwort die Regeln nicht erfüllt, dann wird nichts geändert und ich sehe den Fehler am Feld (N13).
|
||||||
|
8. Gegeben ich bin offline, wenn ich E-Mail-Adresse oder Passwort ändern will, dann sehe ich einen Hinweis, dass dafür eine Verbindung nötig ist.
|
||||||
|
9. Gegeben ich habe mein Passwort geändert oder den Wechsel meiner E-Mail-Adresse über den Link bestätigt, dann bin ich auf allen anderen Geräten abgemeldet, wie nach dem Zurücksetzen (KTO-01 Kriterium 9) (N1).
|
||||||
|
10. Gegeben ich bin nicht angemeldet, dann folgt die Sprache der Geräteeinstellung (Deutsch oder Englisch, sonst Englisch) und ich kann sie ändern; wenn ich mich anmelde, gilt die Sprache meines Profils, auch wenn sie von der Geräte- oder der vorher gewählten Sprache abweicht (N3).
|
||||||
|
11. Gegeben ich registriere mich, dann wird die zu diesem Zeitpunkt aktive Sprache der Oberfläche als Sprache meines Profils gespeichert und gilt auch für die Bestätigungs-E-Mail (KTO-01 Kriterium 11) (N3, Klärung 45; bestätigt 2026-11-02).
|
||||||
|
12. Gegeben ich nutze die iOS- oder Android-App und habe nicht synchronisierte Partien, wenn ich mich abmelde, dann bleiben diese Partien lokal auf dem Gerät erhalten und werden übertragen, sobald ich mich mit demselben Konto wieder anmelde und eine Verbindung besteht; solange ich abgemeldet bin oder ein anderes Konto auf dem Gerät angemeldet ist, sind sie nicht sichtbar und werden nicht diesem anderen Konto zugeordnet (N4; Datenschutz).
|
||||||
|
13. Gegeben ich öffne die Einstellungen, dann finde ich Links zu Datenschutzerklärung, Nutzungsbedingungen und Impressum (N5).
|
||||||
|
14. Gegeben ich öffne die Einstellungen, dann sehe ich einen kurzen Hinweis zur anonymen Reichweitenmessung (Datenschutz QUE-04 Kriterium 4) mit einem Ausschalter; ist er ausgeschaltet, sendet die App keine Messdaten mehr, und die Wahl bleibt nach einem Neustart erhalten (N5).
|
||||||
|
|
||||||
## KAT – Spielekatalog
|
## KAT – Spielekatalog
|
||||||
|
|
||||||
### KAT-01 Spiele suchen
|
### KAT-01 Spiele suchen
|
||||||
|
|
||||||
1. Gegeben der Katalog enthält Spiele, wenn ich einen Titel oder einen Teil davon eingebe, dann erhalte ich passende Treffer nach Relevanz sortiert, unabhängig von Groß- und Kleinschreibung und Sonderzeichen.
|
1. Gegeben der Katalog enthält Spiele, wenn ich einen Titel oder einen Teil davon eingebe, dann erhalte ich passende Treffer nach Relevanz sortiert, unabhängig von Groß- und Kleinschreibung und Sonderzeichen.
|
||||||
2. Gegeben ein Spiel hat einen deutschen und einen englischen Titel, wenn ich nach einem von beiden suche, dann finde ich dasselbe Spiel.
|
2. Gegeben ein Spiel hat neben dem Haupttitel alternative Titel (je mit Sprache, zum Beispiel einen deutschen und einen englischen), wenn ich nach einem davon suche, dann finde ich dasselbe Spiel (Klärung 3).
|
||||||
3. Gegeben ich suche nach einem Verlag, dann erhalte ich dessen Spiele.
|
3. Gegeben ich suche nach einem Verlag, dann erhalte ich dessen Spiele; ein Spiel kann mehreren Verlagen zugeordnet sein (Klärung 4).
|
||||||
4. Gegeben eine Trefferliste, wenn ich nach Spielerzahl, Spieldauer oder Mindestalter filtere, dann enthält sie nur Spiele, die zu allen gewählten Filtern passen.
|
4. Gegeben eine Trefferliste, wenn ich nach Spielerzahl, Spieldauer, Mindestalter, Genre oder Mechanik filtere, dann enthält sie nur Spiele, die zu allen gewählten Filtern passen (Klärung 13).
|
||||||
5. Gegeben mehr Treffer als auf eine Seite passen, wenn ich bis zum Ende scrolle, dann werden weitere nachgeladen.
|
5. Gegeben mehr Treffer als auf eine Seite passen, wenn ich bis zum Ende scrolle, dann werden weitere nachgeladen.
|
||||||
6. Gegeben ich suche ohne Treffer, dann sehe ich einen Hinweis und die Möglichkeit, das Spiel zu melden (KAT-04).
|
6. Gegeben ich suche ohne Treffer, dann sehe ich einen Hinweis und die Möglichkeit, das Spiel zu melden (KAT-04).
|
||||||
7. Gegeben eine normale Verbindung, dann erscheinen die ersten Treffer innerhalb von 2 Sekunden.
|
7. Gegeben ein mobiles 4G-Profil (mindestens 10 Mbit/s, etwa 100 ms Round-Trip-Zeit), dann liefern 95 Prozent der Suchen gegen Staging die ersten Treffer in höchstens 2 Sekunden (Klärung 14).
|
||||||
8. Gegeben mehrere Filtereinstellungen wie Genre, Spieleranzahl, Spieldauer etc, mit denen ich neue Spiele entdecken kann
|
8. Gegeben ich habe keinen Suchbegriff eingegeben, wenn ich einen oder mehrere Filter (Genre, Mechanik, Spielerzahl, Spieldauer, Mindestalter) wähle, dann sehe ich alle Katalogspiele, die zu allen gewählten Filtern passen, und kann so neue Spiele entdecken (Klärung 13).
|
||||||
|
|
||||||
### KAT-02 Spieldetailseite
|
### KAT-02 Spieldetailseite
|
||||||
|
|
||||||
1. Gegeben ich öffne ein Spiel, dann sehe ich Titel, Cover, Erscheinungsjahr, Verlag, Spielerzahl, Spieldauer, Mindestalter, Genre, Mechanik, Kategorie und Beschreibung.
|
1. Gegeben ich öffne ein Spiel, dann sehe ich Titel, Cover, Erscheinungsjahr, Verlag, Spielerzahl, Spieldauer, Mindestalter, Genre, Mechanik, Kategorie und Beschreibung.
|
||||||
2. Gegeben eine Angabe fehlt im Katalog, dann wird sie weggelassen statt als leere Zeile gezeigt.
|
2. Gegeben eine Angabe fehlt im Katalog, dann wird sie weggelassen statt als leere Zeile gezeigt.
|
||||||
3. Gegeben das Spiel steht in meiner Sammlung, auf der Wunschliste oder der Einkaufsliste, dann sehe ich den Status und kann ihn von dort ändern.
|
3. Gegeben das Spiel steht in meiner Sammlung, auf der Wunschliste oder der Einkaufsliste, dann sehe ich den Status und kann ihn von dort ändern; ein Spiel steht dabei immer in genau einer Liste (Klärung 1).
|
||||||
4. Gegeben ich habe das Spiel nirgends eingetragen, dann kann ich es mit einer Aktion zur Sammlung, Wunschliste oder Einkaufsliste hinzufügen.
|
4. Gegeben ich habe das Spiel nirgends eingetragen, dann kann ich es mit einer Aktion zur Sammlung, Wunschliste oder Einkaufsliste hinzufügen.
|
||||||
5. Gegeben Angaben stammen von BGG, dann zeigt die Seite „Powered by BGG“ mit Link, sobald die Lizenz das verlangt.
|
5. Gegeben Angaben stammen von BGG, dann zeigt die Seite „Powered by BGG“ mit Link, sobald die Lizenz das verlangt. In R1 ist der Katalog manuell gepflegt; das Kriterium greift erst mit Daten aus BGG (Klärung 24).
|
||||||
6. Gegeben ich habe Partien zu diesem Spiel, dann sehe ich einen Einstieg zur Spielstatistik (PAR-08).
|
6. Gegeben ich habe Partien zu diesem Spiel, dann sehe ich einen Einstieg zur Spielstatistik (PAR-08).
|
||||||
|
7. Gegeben Titel oder Beschreibung liegen nur in einer anderen Sprache als der Oberfläche vor, dann sehe ich einen sichtbaren Sprachhinweis, zum Beispiel „Beschreibung auf Englisch“ (Klärung 48).
|
||||||
|
|
||||||
### KAT-03 Erweiterungen und Editionen
|
### KAT-03 Erweiterungen und Editionen
|
||||||
|
|
||||||
1. Gegeben ein Basisspiel hat Erweiterungen, wenn ich seine Detailseite öffne, dann sehe ich die Erweiterungen verlinkt; bei einer Erweiterung sehe ich das Basisspiel.
|
1. Gegeben ein Basisspiel hat Erweiterungen, wenn ich seine Detailseite öffne, dann sehe ich die Erweiterungen verlinkt; eine Erweiterung ist ein eigener Katalogeintrag mit Verweis auf ihr Basisspiel, und auf ihrer Detailseite sehe ich das Basisspiel verlinkt (Klärung 5).
|
||||||
2. Gegeben ein Spiel gibt es in mehreren Editionen oder Sprachfassungen, dann sind sie als Varianten desselben Spiels erkennbar.
|
2. Gegeben ein Spiel gibt es in mehreren Editionen oder Sprachfassungen, dann sind sie als Varianten desselben Spiels erkennbar.
|
||||||
3. Gegeben ich füge ein Spiel mit Varianten zur Sammlung hinzu, dann kann ich die Edition wählen, die ich besitze.
|
3. Gegeben ich füge ein Spiel mit Varianten zur Sammlung hinzu, dann kann ich optional die Edition wählen, die ich besitze; ohne Auswahl wird das Spiel ohne Edition gespeichert (Klärung 28).
|
||||||
4. Gegeben ich besitze das Basisspiel und füge eine Erweiterung hinzu, dann wird sie in meiner Sammlung beim Basisspiel zugeordnet angezeigt.
|
4. Gegeben ich besitze das Basisspiel und füge eine Erweiterung hinzu, dann wird sie in meiner Sammlung beim Basisspiel zugeordnet angezeigt.
|
||||||
5. Gegeben ich besitze eine Erweiterung ohne Basisspiel, dann ist das erlaubt und wird nicht als Fehler behandelt.
|
5. Gegeben ich besitze eine Erweiterung ohne Basisspiel, dann ist das erlaubt und wird nicht als Fehler behandelt.
|
||||||
|
6. Gegeben ich erfasse eine Partie zu einem Spiel mit Varianten, dann kann ich optional die Edition wählen (Klärung 28).
|
||||||
|
7. Gegeben ich setze ein Spiel auf die Wunsch- oder Einkaufsliste, dann wird keine Edition abgefragt oder gespeichert (Klärung 28).
|
||||||
|
|
||||||
### KAT-04 Fehlendes Spiel melden
|
### KAT-04 Fehlendes Spiel melden
|
||||||
|
|
||||||
1. Gegeben ich finde ein Spiel nicht, wenn ich Titel (Pflicht), Verlag, Erscheinungsjahr und optional einen Link angebe, dann wird die Meldung gespeichert und ich erhalte eine Bestätigung.
|
1. Gegeben ich finde ein Spiel nicht, wenn ich Titel (Pflicht), Verlag, Erscheinungsjahr und optional einen Link angebe, dann wird die Meldung gespeichert und ich erhalte eine Bestätigung.
|
||||||
2. Gegeben es gibt schon einen sehr ähnlichen Katalogeintrag, wenn ich melden will, dann sehe ich ihn zuerst und muss ausdrücklich bestätigen, dass mein Spiel ein anderes ist.
|
2. Gegeben es gibt schon einen sehr ähnlichen Katalogeintrag, wenn ich melden will, dann sehe ich ihn zuerst und muss ausdrücklich bestätigen, dass mein Spiel ein anderes ist. „Sehr ähnlich“ heißt: gleicher normalisierter Titel (Groß-/Kleinschreibung, Sonderzeichen und Artikel ignoriert) oder Titel-Ähnlichkeit von mindestens 0,8 (Trigramm) bei Erscheinungsjahr ± 1 (Klärung 15).
|
||||||
3. Gegeben ich habe ein Spiel gemeldet, dann kann ich es als vorläufigen Eintrag in meine Sammlung oder Listen aufnehmen; der Eintrag ist nur für mich sichtbar.
|
3. Gegeben ich habe ein Spiel gemeldet, dann kann ich es als vorläufigen Eintrag in meine Sammlung oder Listen aufnehmen; der Eintrag ist nur für mich sichtbar.
|
||||||
4. Gegeben die Meldung wurde freigegeben, dann ersetzt der Katalogeintrag meinen vorläufigen Eintrag, ohne dass meine eigenen Angaben verloren gehen.
|
4. Gegeben die Meldung wurde freigegeben, dann ersetzt der Katalogeintrag meinen vorläufigen Eintrag, ohne dass meine eigenen Angaben verloren gehen, und ich sehe das als Hinweis in der App am Eintrag (Klärung 26).
|
||||||
5. Gegeben die Meldung wurde abgelehnt oder mit einem anderen Eintrag zusammengeführt, dann erfahre ich das und mein vorläufiger Eintrag verweist auf den richtigen Eintrag.
|
5. Gegeben die Meldung wurde mit einem anderen Eintrag zusammengeführt oder unter Verweis auf einen vorhandenen Eintrag abgelehnt, dann sehe ich das als Hinweis in der App am vorläufigen Eintrag (keine E-Mail), und mein vorläufiger Eintrag verweist auf den richtigen Eintrag (Klärungen 26, 45).
|
||||||
|
6. Gegeben die Meldung wurde ohne Zieleintrag abgelehnt, dann bleibt mein vorläufiger Eintrag privat bestehen und ist als „abgelehnt“ markiert (Klärung 26).
|
||||||
|
7. Gegeben ich habe heute schon 10 Meldungen abgeschickt, wenn ich eine weitere melden will, dann wird sie nicht gespeichert und ich sehe einen Hinweis auf das Tageslimit (Klärung 27). Meldungen, die der BGG-Import automatisch anlegt (SAM-08 Kriterium 4), zählen nicht auf dieses Limit (N12).
|
||||||
|
8. Gegeben ich habe eine Meldung abgeschickt, dann bleibt sie im Status „offen“, bis der Admin sie manuell bearbeitet; eine automatische Freigabe gibt es nicht (Klärungen 6, 27, 44).
|
||||||
|
|
||||||
### KAT-05 Katalogdaten laden und aktuell halten
|
### KAT-05 Katalogdaten laden und aktuell halten
|
||||||
|
|
||||||
1. Gegeben eine zugelassene Quelle, wenn der Import läuft, dann werden neue Spiele angelegt und geänderte aktualisiert, ohne manuell gepflegte Felder zu überschreiben.
|
In R1 wird der Katalog nur manuell gepflegt; ein Import kommt erst mit einer zugelassenen Quelle bzw. der BGG-Lizenz (Klärung 24). Der Admin pflegt Katalog und Meldungen über Supabase Studio/SQL; eine Admin-Oberfläche in der App gibt es bis QUE-08 (R4) nicht (Klärung 44). Das Datenmodell für den späteren Import entsteht trotzdem schon in R1 (Klärung 7).
|
||||||
2. Gegeben ein Katalogeintrag, dann hat er eine eigene Shuffle-ID und optional die Kennung der Quelle (zum Beispiel BGG) samt Quellenangabe.
|
|
||||||
3. Gegeben die Quelle ist nicht erreichbar oder liefert fehlerhafte Daten, dann bleibt der Katalog unverändert, der Fehler wird protokolliert und die App funktioniert normal weiter.
|
1. *Zurückgestellt bis zur Lizenz (Klärung 24):* Gegeben eine zugelassene Quelle, wenn der Import läuft, dann werden neue Spiele angelegt und geänderte aktualisiert, ohne manuell gepflegte Felder zu überschreiben.
|
||||||
4. Gegeben ein Admin bearbeitet, blendet aus oder führt Einträge zusammen, dann bleiben diese Änderungen beim nächsten Import erhalten.
|
2. Gegeben ein Katalogeintrag, dann hat er eine eigene Shuffle-ID (F2). *Zurückgestellt bis zur Lizenz (Klärung 24):* optional die Kennung der Quelle (zum Beispiel BGG) samt Quellenangabe; die Felder dafür sind ab R1 im Datenmodell vorhanden (Klärung 7).
|
||||||
5. Gegeben Meldungen aus KAT-04, dann kann ein Admin sie freigeben, mit einem Eintrag zusammenführen oder ablehnen.
|
3. *Zurückgestellt bis zur Lizenz (Klärung 24):* Gegeben die Quelle ist nicht erreichbar oder liefert fehlerhafte Daten, dann bleibt der Katalog unverändert, der Fehler wird protokolliert und die App funktioniert normal weiter.
|
||||||
6. Gegeben Cover und Texte einer Quelle, dann werden sie nur angezeigt, wenn deren Nutzungsbedingungen es erlauben; die Erlaubnis ist je Quelle vermerkt.
|
4. Gegeben der Admin bearbeitet, blendet aus oder führt Einträge zusammen (in R1 über Supabase Studio/SQL), dann sind ausgeblendete Einträge in der App nicht mehr auffindbar, und manuell gepflegte Felder sind als solche gekennzeichnet, damit ein späterer Import sie nicht überschreibt (Klärungen 7, 44).
|
||||||
|
5. Gegeben Meldungen aus KAT-04, dann kann der Admin sie über Supabase Studio/SQL freigeben, mit einem Eintrag zusammenführen oder ablehnen; Status (offen, freigegeben, abgelehnt, zusammengeführt) und gegebenenfalls der Zieleintrag werden gespeichert (Klärungen 6, 44).
|
||||||
|
6. *Zurückgestellt bis zur Lizenz (Klärung 24):* Gegeben Cover und Texte einer Quelle, dann werden sie nur angezeigt, wenn deren Nutzungsbedingungen es erlauben; die Erlaubnis ist je Quelle vermerkt. Das Feld für die Erlaubnis je Quelle ist ab R1 im Datenmodell vorhanden (Klärung 7).
|
||||||
|
7. Gegeben R1 geht live, dann enthält der Katalog einen manuell gepflegten Startbestand von etwa 200 Spielen, den der Admin (Chris) per Supabase Studio bzw. Seed einpflegt (Klärung 24, N11).
|
||||||
|
8. Gegeben die Admin-Pflege über Supabase Studio/SQL, dann ist der Ablauf für Bearbeiten, Ausblenden, Zusammenführen und das Bearbeiten von Meldungen im Repo dokumentiert (Klärung 44).
|
||||||
|
9. Gegeben ein Nutzer ohne Admin-Rolle, wenn er über die App oder direkt über die Schnittstelle Katalogeinträge oder fremde Meldungen ändern will, dann wird der Zugriff verweigert; die Admin-Rolle existiert in R1 nur als Datenbankrolle (Klärung 44).
|
||||||
|
10. Gegeben ein Spiel aus dem Startbestand, dann enthält es nur Fakten (Titel, Verlag, Erscheinungsjahr, Spielerzahl, Spieldauer, Mindestalter, Genre, Mechanik); fremde Cover und fremde Beschreibungstexte werden nicht übernommen, stattdessen zeigt die App ein Platzhalter-Cover und einen eigenen Kurztext (N11).
|
||||||
|
|
||||||
## SAM – Sammlung & Listen
|
## SAM – Sammlung & Listen
|
||||||
|
|
||||||
|
|
@ -121,43 +166,53 @@ R1 umfasst 26 Stories aus vier Epics. Alles, was andere Nutzer sehen könnte, ko
|
||||||
2. Gegeben das Spiel ist schon in meiner Sammlung, dann entsteht kein zweiter Eintrag, sondern ich sehe den vorhandenen.
|
2. Gegeben das Spiel ist schon in meiner Sammlung, dann entsteht kein zweiter Eintrag, sondern ich sehe den vorhandenen.
|
||||||
3. Gegeben ich bin offline, wenn ich ein Spiel hinzufügen will, dann sehe ich einen Hinweis, dass dies eine Verbindung braucht.
|
3. Gegeben ich bin offline, wenn ich ein Spiel hinzufügen will, dann sehe ich einen Hinweis, dass dies eine Verbindung braucht.
|
||||||
4. Gegeben ich suche ein Spiel, dann gelange ich in höchstens zwei Schritten vom Suchergebnis zum Eintrag in der Sammlung.
|
4. Gegeben ich suche ein Spiel, dann gelange ich in höchstens zwei Schritten vom Suchergebnis zum Eintrag in der Sammlung.
|
||||||
|
5. Gegeben das Spiel steht auf meiner Wunsch- oder Einkaufsliste, wenn ich „Zur Sammlung“ wähle, dann wird es wie in SAM-06 übernommen und steht danach nur noch in der Sammlung (Klärung 1).
|
||||||
|
|
||||||
### SAM-02 Eigene Angaben pro Spiel
|
### SAM-02 Eigene Angaben pro Spiel
|
||||||
|
|
||||||
1. Gegeben ein Spiel in meiner Sammlung, wenn ich es bearbeite, dann kann ich Zustand (aus fester Liste), Kaufdatum, Kaufpreis in Euro, Notiz (bis 1000 Zeichen), Standort (Freitext) und Tags erfassen.
|
1. Gegeben ein Spiel in meiner Sammlung, wenn ich es bearbeite, dann kann ich Zustand (neu/eingeschweißt, sehr gut, gut, gebraucht, beschädigt), Kaufdatum, Notiz (bis 1000 Zeichen), Standort (Freitext) und Tags erfassen. Der Kaufpreis entfällt in R1 (Klärungen 2, 29).
|
||||||
2. Gegeben ich lasse Felder leer, dann ist das erlaubt; alle Angaben sind optional.
|
2. Gegeben ich lasse Felder leer, dann ist das erlaubt; alle Angaben sind optional.
|
||||||
3. Gegeben das Kaufdatum liegt in der Zukunft oder der Preis ist negativ, dann kann ich nicht speichern und sehe den Fehler am Feld.
|
3. Gegeben das Kaufdatum liegt in der Zukunft, dann kann ich nicht speichern und sehe den Fehler am Feld. Die Prüfung „Preis negativ“ entfällt mit dem Kaufpreis (Klärung 2).
|
||||||
4. Gegeben ich vergebe Tags, dann schlägt die App meine bisherigen Tags vor, damit sich Schreibweisen nicht verdoppeln.
|
4. Gegeben ich vergebe Tags, dann schlägt die App meine bisherigen Tags vor, damit sich Schreibweisen nicht verdoppeln.
|
||||||
5. Gegeben ich ändere Angaben, dann bleiben sie beim BGG-Import erhalten (SAM-09).
|
5. Gegeben ich ändere Angaben, dann bleiben sie beim BGG-Import erhalten (SAM-09).
|
||||||
|
6. Gegeben ich erfasse einen Standort, dann schlägt die App meine bisherigen Standorte vor; Tags und Standorte haben in R1 keine eigene Verwaltung, sie entstehen durch Nutzung (Klärung 29).
|
||||||
|
|
||||||
### SAM-03 Sammlung durchsuchen, filtern und sortieren
|
### SAM-03 Sammlung durchsuchen, filtern und sortieren
|
||||||
|
|
||||||
1. Gegeben meine Sammlung, wenn ich einen Titel eingebe, dann zeigt die Liste nur passende Spiele.
|
1. Gegeben meine Sammlung, wenn ich einen Titel eingebe, dann zeigt die Liste nur passende Spiele.
|
||||||
2. Gegeben ich filtere nach Spielerzahl, Spieldauer, Tags, Standort oder Zustand, dann zeigt die Liste nur Spiele, die zu allen Filtern passen, und ich sehe die Zahl der Treffer.
|
2. Gegeben ich filtere nach Spielerzahl, Spieldauer, Tags, Standort oder Zustand, dann zeigt die Liste nur Spiele, die zu allen Filtern passen, und ich sehe die Zahl der Treffer.
|
||||||
3. Gegeben ich sortiere nach Titel, Hinzufügedatum, Erscheinungsjahr oder Spieldauer, dann ändert sich die Reihenfolge entsprechend.
|
3. Gegeben ich sortiere nach Titel, Hinzufügedatum, Erscheinungsjahr oder Spieldauer, dann ändert sich die Reihenfolge entsprechend.
|
||||||
4. Gegeben meine Sammlung hat 1000 Spiele, dann bleibt Scrollen, Suchen und Filtern flüssig.
|
4. Gegeben meine Sammlung hat 1000 Spiele, dann liegt ein Such- oder Filterergebnis auf einem Mittelklasse-Gerät in höchstens 300 ms vor, und das Scrollen läuft ohne sichtbares Ruckeln (Klärung 16).
|
||||||
5. Gegeben meine Sammlung ist leer, dann sehe ich einen Hinweis mit dem Weg zum Hinzufügen und, sofern verfügbar, zum BGG-Import.
|
5. Gegeben meine Sammlung ist leer, dann sehe ich einen Hinweis mit dem Weg zum Hinzufügen; den Weg zum BGG-Import sehe ich nur, wenn der Import verfügbar ist (BGG-Lizenz) (Klärung 30).
|
||||||
|
6. Gegeben meine Wunsch- oder Einkaufsliste, dann kann ich nach Titel suchen und sortieren; Filter gibt es dort nicht (Klärung 30).
|
||||||
|
|
||||||
### SAM-04 Wunschliste mit Priorität
|
### SAM-04 Wunschliste mit Priorität
|
||||||
|
|
||||||
1. Gegeben ein Spiel, wenn ich es auf die Wunschliste setze, dann kann ich eine Priorität (hoch, mittel, niedrig) und eine Notiz angeben.
|
1. Gegeben ein Spiel, wenn ich es auf die Wunschliste setze, dann kann ich eine Priorität (hoch, mittel, niedrig) und eine Notiz angeben.
|
||||||
2. Gegeben das Spiel ist schon in meiner Sammlung, dann sehe ich einen Hinweis, kann es aber trotzdem auf die Wunschliste setzen, etwa für eine andere Edition.
|
2. Gegeben das Spiel ist schon in meiner Sammlung, wenn ich es auf die Wunschliste setzen will, dann sehe ich einen Hinweis und kann es nicht auf die Wunschliste setzen (Klärung 1).
|
||||||
3. Gegeben meine Wunschliste, dann kann ich nach Priorität oder Datum sortieren.
|
3. Gegeben meine Wunschliste, dann kann ich nach Priorität oder Datum sortieren.
|
||||||
4. Gegeben ich entferne ein Spiel von der Wunschliste, dann kann ich das für einige Sekunden rückgängig machen.
|
4. Gegeben ich entferne ein Spiel von der Wunschliste, dann kann ich das 5 Sekunden lang rückgängig machen (Klärung 17).
|
||||||
|
|
||||||
### SAM-05 Einkaufsliste führen
|
### SAM-05 Einkaufsliste führen
|
||||||
|
|
||||||
1. Gegeben ein Spiel, wenn ich es auf die Einkaufsliste setze, dann kann ich Händler (Freitext), geplanten Preis in Euro und einen Link angeben.
|
~~1.~~ entfällt (Klärung 2): Händler, geplanter Preis und Link kommen nach R1. Das Hinzufügen selbst regelt jetzt Kriterium 5.
|
||||||
2. Gegeben die Einkaufsliste, dann sehe ich die Summe der geplanten Preise.
|
|
||||||
|
~~2.~~ entfällt (Klärungen 2, 31): Die Summe der geplanten Preise kommt nach R1.
|
||||||
|
|
||||||
3. Gegeben ich hake ein Spiel als gekauft ab, dann fragt mich die App, ob ich es in die Sammlung übernehmen will (SAM-06).
|
3. Gegeben ich hake ein Spiel als gekauft ab, dann fragt mich die App, ob ich es in die Sammlung übernehmen will (SAM-06).
|
||||||
4. Gegeben ich entferne ein Spiel von der Einkaufsliste, dann kann ich das für einige Sekunden rückgängig machen.
|
4. Gegeben ich entferne ein Spiel von der Einkaufsliste, dann kann ich das 5 Sekunden lang rückgängig machen (Klärung 17).
|
||||||
|
5. Gegeben ein Spiel, wenn ich es auf die Einkaufsliste setze, dann steht es dort mit dem Datum des Hinzufügens, und ich kann eine Notiz angeben (Klärungen 2, 32).
|
||||||
|
6. Gegeben das Spiel ist schon in meiner Sammlung, wenn ich es auf die Einkaufsliste setzen will, dann sehe ich einen Hinweis und kann es nicht auf die Einkaufsliste setzen (Klärung 1).
|
||||||
|
7. Gegeben ich habe ein Spiel als gekauft abgehakt, wenn ich die Übernahme in die Sammlung ablehne, dann bleibt es unverändert auf der Einkaufsliste (Klärung 31).
|
||||||
|
|
||||||
### SAM-06 In die Sammlung übernehmen
|
### SAM-06 In die Sammlung übernehmen
|
||||||
|
|
||||||
1. Gegeben ein Spiel auf der Wunsch- oder Einkaufsliste, wenn ich es übernehme, dann steht es in der Sammlung und ist von der Liste verschwunden.
|
1. Gegeben ein Spiel auf der Wunsch- oder Einkaufsliste, wenn ich es übernehme, dann steht es in der Sammlung und ist von der Liste verschwunden.
|
||||||
2. Gegeben das Spiel hatte Notiz oder geplanten Preis, dann werden Notiz und Preis übernommen, der Preis als Kaufpreis; als Kaufdatum steht heute und ist änderbar.
|
2. Gegeben das Spiel hatte eine Notiz, dann wird sie in die Sammlung übernommen; als Kaufdatum steht heute und ist änderbar. Eine Preisübernahme entfällt (Klärungen 2, 32).
|
||||||
3. Gegeben das Spiel ist schon in der Sammlung, dann entsteht kein Duplikat und ich sehe einen Hinweis.
|
|
||||||
4. Gegeben ich habe übernommen, dann kann ich das für einige Sekunden rückgängig machen.
|
~~3.~~ entfällt (Klärungen 1, 32): Ein Spiel kann nicht gleichzeitig in Sammlung und Liste stehen, ein Duplikat ist ausgeschlossen.
|
||||||
|
|
||||||
|
4. Gegeben ich habe übernommen, dann kann ich das 5 Sekunden lang rückgängig machen; das Spiel steht danach wieder auf der ursprünglichen Liste (Klärung 17).
|
||||||
|
|
||||||
### SAM-07 BGG-Konto verknüpfen (abhängig von der Lizenz)
|
### SAM-07 BGG-Konto verknüpfen (abhängig von der Lizenz)
|
||||||
|
|
||||||
|
|
@ -166,64 +221,77 @@ R1 umfasst 26 Stories aus vier Epics. Alles, was andere Nutzer sehen könnte, ko
|
||||||
3. Gegeben die BGG-Sammlung lässt sich nicht abrufen, dann erklärt mir die App, was ich auf der BGG-Seite prüfen kann.
|
3. Gegeben die BGG-Sammlung lässt sich nicht abrufen, dann erklärt mir die App, was ich auf der BGG-Seite prüfen kann.
|
||||||
4. Gegeben ich löse die Verknüpfung, dann wird der Name entfernt und bereits importierte Spiele bleiben erhalten.
|
4. Gegeben ich löse die Verknüpfung, dann wird der Name entfernt und bereits importierte Spiele bleiben erhalten.
|
||||||
5. Gegeben die Verknüpfung, dann fragt und speichert die App niemals mein BGG-Passwort.
|
5. Gegeben die Verknüpfung, dann fragt und speichert die App niemals mein BGG-Passwort.
|
||||||
|
6. Gegeben mein Konto ist schon mit einem BGG-Namen verknüpft, dann kann ich keinen zweiten zusätzlich verknüpfen; ein Konto hat höchstens eine BGG-Verknüpfung (Klärung 33).
|
||||||
|
7. Gegeben derselbe BGG-Name ist schon mit einem anderen Shuffle-Konto verknüpft, wenn ich ihn verknüpfe, dann ist das erlaubt (BGG-Sammlungen sind öffentlich) (Klärung 33).
|
||||||
|
|
||||||
### SAM-08 Sammlung und Wunschliste aus BGG importieren
|
### SAM-08 Sammlung und Wunschliste aus BGG importieren
|
||||||
|
|
||||||
1. Gegeben ein verknüpftes BGG-Konto, wenn ich den Import starte, dann sehe ich den Fortschritt und danach eine Zusammenfassung: übernommen, bereits vorhanden, nicht gefunden.
|
1. Gegeben ein verknüpftes BGG-Konto, wenn ich den Import starte, dann sehe ich den Fortschritt und danach eine Zusammenfassung: übernommen, bereits vorhanden, vorläufig angelegt (Klärung 12).
|
||||||
2. Gegeben der Import, dann werden Spiele, die ich bei BGG besitze, in meine Sammlung übernommen und Spiele meiner BGG-Wunschliste auf meine Wunschliste.
|
2. Gegeben der Import, dann werden die BGG-Status so übernommen: „owned“ → Sammlung; „wishlist“ und „want to buy“ → Wunschliste; „preordered“ → Einkaufsliste; „want to play“ wird ignoriert. Ist ein Spiel bei BGG zugleich besessen und gewünscht, kommt es in die Sammlung (Klärungen 1, 34).
|
||||||
3. Gegeben ein BGG-Spiel ist im Katalog über seine BGG-Kennung bekannt, dann wird es diesem Eintrag zugeordnet.
|
3. Gegeben ein BGG-Spiel ist im Katalog über seine BGG-Kennung bekannt, dann wird es diesem Eintrag zugeordnet.
|
||||||
4. Gegeben ein BGG-Spiel fehlt im Katalog, dann steht es in der Liste der nicht gefundenen Spiele, und ich kann es melden (KAT-04).
|
4. Gegeben ein BGG-Spiel fehlt im Katalog, dann wird es automatisch als vorläufiger privater Eintrag (KAT-04) angelegt und übernommen, in der Zusammenfassung als „vorläufig angelegt“ gezeigt, und eine Meldung an den Admin entsteht automatisch (Klärung 12).
|
||||||
5. Gegeben ich breche den Import ab oder er schlägt fehl, dann bleibt mein Bestand in einem konsistenten Zustand: nichts ist halb übernommen.
|
5. Gegeben ich breche den Import ab oder er schlägt fehl, dann bleibt mein Bestand in einem konsistenten Zustand: nichts ist halb übernommen.
|
||||||
6. Gegeben BGG antwortet mit einem Fehler oder einer Begrenzung, dann sehe ich eine verständliche Meldung und kann es später erneut versuchen.
|
6. Gegeben BGG antwortet mit einem Fehler oder einer Begrenzung, dann sehe ich eine verständliche Meldung und kann es später erneut versuchen.
|
||||||
7. Gegeben der Importdialog, dann zeigt er „Powered by BGG“ mit Link.
|
7. Gegeben der Importdialog, dann zeigt er „Powered by BGG“ mit Link.
|
||||||
|
8. Gegeben ein Spiel meiner BGG-Wunschliste hat eine BGG-Priorität, dann wird sie so übernommen: 1–2 → hoch, 3 → mittel, 4–5 → niedrig (Klärung 34).
|
||||||
|
9. Gegeben meine BGG-Sammlung oder -Wunschliste enthält Erweiterungen, dann werden sie ebenfalls importiert (Klärung 34).
|
||||||
|
10. Gegeben der Import legt nach Kriterium 4 automatisch Meldungen an, dann zählen sie nicht auf das Tageslimit aus KAT-04 Kriterium 7, sind als „aus Import“ gekennzeichnet und je Spiel (BGG-Kennung) dedupliziert: Für ein Spiel, zu dem schon eine offene Meldung aus einem Import besteht, entsteht keine weitere (N12). Die Deduplizierung gilt **je Nutzer**: Jeder Nutzer hat höchstens eine offene Import-Meldung je BGG-Spiel; Meldungen verschiedener Nutzer zum selben Spiel bleiben getrennt und werden beim Konto-Löschen mit dem jeweiligen Nutzer gelöscht (N12a).
|
||||||
|
|
||||||
### SAM-09 BGG-Import wiederholen und abgleichen
|
### SAM-09 BGG-Import wiederholen und abgleichen
|
||||||
|
|
||||||
1. Gegeben der Import lief schon einmal, wenn ich ihn erneut starte, dann erkennt die App nur die Änderungen: neue Spiele, bei BGG entfernte Spiele und Wechsel zwischen Sammlung und Wunschliste.
|
1. Gegeben der Import lief schon einmal, wenn ich ihn erneut starte, dann erkennt die App nur die Änderungen: neue Spiele, bei BGG entfernte Spiele und Wechsel zwischen Sammlung, Wunschliste und Einkaufsliste (Zuordnung wie SAM-08 Kriterium 2).
|
||||||
2. Gegeben Änderungen wurden erkannt, dann sehe ich sie als Liste und übernehme sie erst nach meiner Bestätigung.
|
2. Gegeben Änderungen wurden erkannt, dann sehe ich sie als Liste und übernehme sie erst nach meiner Bestätigung.
|
||||||
3. Gegeben der Abgleich, dann werden meine eigenen Angaben (SAM-02) nie überschrieben.
|
3. Gegeben der Abgleich, dann werden meine eigenen Angaben (SAM-02) nie überschrieben.
|
||||||
4. Gegeben ich habe ein Spiel in Shuffle selbst hinzugefügt, dann wird es nicht entfernt, nur weil es bei BGG fehlt.
|
4. Gegeben ich habe ein Spiel in Shuffle selbst hinzugefügt, also nicht aus einem BGG-Import übernommen, dann wird es nicht entfernt, nur weil es bei BGG fehlt (Klärung 35).
|
||||||
5. Gegeben ein Spiel wurde bei BGG entfernt, dann wird es in Shuffle nur nach meiner Bestätigung entfernt.
|
5. Gegeben ein Spiel wurde bei BGG entfernt, dann wird es in Shuffle nur nach meiner Bestätigung entfernt.
|
||||||
6. Gegeben in Shuffle sind Spiele aufgeführt, die in BGG fehlen, dann werden diese Spiele hervorgehoben, damit der User diese ggf. in BGG nachpflegen kann
|
6. Gegeben in Shuffle stehen selbst hinzugefügte Spiele, die bei BGG fehlen, wenn ich den Abgleich starte, dann werden sie im Abgleichsdialog hervorgehoben, damit ich sie bei BGG nachpflegen kann; außerhalb des Abgleichsdialogs gibt es keine Hervorhebung (Klärung 35).
|
||||||
|
|
||||||
## PAR – Partien & Statistik
|
## PAR – Partien & Statistik
|
||||||
|
|
||||||
### PAR-01 Partie erfassen
|
### PAR-01 Partie erfassen
|
||||||
|
|
||||||
1. Gegeben ich erfasse eine Partie, wenn ich ein Spiel und ein Datum angebe (Standard: heute), dann wird sie gespeichert und erscheint im Verlauf; Dauer in Minuten, Ort und Notiz sind optional.
|
1. Gegeben ich erfasse eine Partie, wenn ich ein Spiel und ein Datum ohne Uhrzeit angebe (Standard: heute), dann wird sie gespeichert und erscheint im Verlauf; Dauer in Minuten, Ort und Notiz sind optional (Klärungen 11, 36).
|
||||||
2. Gegeben das Datum liegt in der Zukunft, dann kann ich nicht speichern.
|
2. Gegeben das Datum liegt in der Zukunft, dann kann ich nicht speichern.
|
||||||
3. Gegeben ich wähle das Spiel, dann werden Spiele aus meiner Sammlung zuerst angeboten, weitere über die Katalogsuche.
|
3. Gegeben ich wähle das Spiel, dann werden Spiele aus meiner Sammlung zuerst angeboten; meine vorläufigen Spiele (KAT-04) sind ebenfalls wählbar; weitere Spiele, auch solche von meiner Wunschliste, finde ich über die Katalogsuche (Klärung 36).
|
||||||
4. Gegeben ich bin offline, dann wird die Partie lokal gespeichert, ist als „noch nicht synchronisiert“ gekennzeichnet und wird bei Verbindung automatisch übertragen.
|
4. Gegeben ich bin in der iOS- oder Android-App offline, dann wird die Partie lokal gespeichert, ist als „noch nicht synchronisiert“ gekennzeichnet und wird bei Verbindung automatisch übertragen.
|
||||||
5. Gegeben eine nicht synchronisierte Partie, wenn ich die App schließe oder das Gerät neu starte, dann geht sie nicht verloren.
|
5. Gegeben eine nicht synchronisierte Partie, wenn ich die App schließe oder das Gerät neu starte, dann geht sie nicht verloren.
|
||||||
6. Gegeben ich bin offline, dann kann ich Spiele aus meiner Sammlung wählen; die Katalogsuche braucht eine Verbindung und zeigt das als Hinweis an.
|
6. Gegeben ich bin in der App offline, dann kann ich Spiele aus meiner Sammlung wählen; die Katalogsuche braucht eine Verbindung und zeigt das als Hinweis an.
|
||||||
7. Gegeben die Übertragung einer Offline-Partie schlägt wiederholt fehl, dann bleibt sie erhalten, und ich sehe, dass sie noch aussteht.
|
7. Gegeben die Übertragung einer Offline-Partie schlägt wiederholt fehl, dann bleibt sie erhalten, und ich sehe, dass sie noch aussteht.
|
||||||
|
8. Gegeben eine nicht synchronisierte Partie, dann zählt sie lokal schon in Verlauf (PAR-06) und Statistik (PAR-07, PAR-08) mit und ist dort als „noch nicht synchronisiert“ gekennzeichnet (Klärung 36).
|
||||||
|
9. Gegeben ich bin in der App offline, dann funktionieren Gastvorschläge (PAR-02) und Wertungsbögen (PAR-04) aus dem lokalen Speicher (Klärung 36).
|
||||||
|
10. Gegeben ich nutze Shuffle im Browser und bin offline, wenn ich eine Partie erfassen will, dann sehe ich den Hinweis „Verbindung nötig“; die Offline-Erfassung gibt es in R1 nur in den Apps (Klärung 36, Abweichung im PR begründen).
|
||||||
|
|
||||||
### PAR-02 Mitspieler hinzufügen
|
### PAR-02 Mitspieler hinzufügen
|
||||||
|
|
||||||
1. Gegeben ich erfasse eine Partie, dann bin ich standardmäßig als Mitspieler eingetragen und kann mich entfernen.
|
1. Gegeben ich erfasse eine Partie, dann bin ich standardmäßig als Mitspieler eingetragen und kann mich entfernen.
|
||||||
2. Gegeben ich füge einen Gast mit Namen hinzu, dann braucht er kein Konto; der Name ist nur für mich sichtbar.
|
2. Gegeben ich füge einen Gast mit Namen hinzu, dann braucht er kein Konto; der Name ist nur für mich sichtbar.
|
||||||
3. Gegeben ich habe einen Gast schon einmal eingetragen, dann wird er mir bei der nächsten Partie vorgeschlagen.
|
3. Gegeben ich habe einen Gast schon einmal eingetragen, dann wird er mir bei der nächsten Partie vorgeschlagen.
|
||||||
4. Gegeben ein Mitspielername kommt in der Partie schon vor, dann kann ich ihn nicht doppelt hinzufügen und sehe einen Hinweis.
|
4. Gegeben ein Mitspielername kommt in der Partie schon vor (Vergleich ohne Groß- und Kleinschreibung), dann kann ich ihn nicht doppelt hinzufügen und sehe einen Hinweis; ein Gast darf aber so heißen wie ich (Klärung 37).
|
||||||
5. Gegeben eine Partie, dann kann sie bis zu 20 Mitspieler haben und mindestens einen.
|
5. Gegeben eine Partie, dann kann sie bis zu 20 Mitspieler haben und mindestens einen.
|
||||||
6. Gegeben ich bearbeite den Namen eines Gastes in der Gästeliste, dann ändert er sich in meinen bisherigen Partien mit.
|
6. Gegeben ich bearbeite den Namen eines Gastes in der Gästeliste, dann ändert er sich in meinen bisherigen Partien mit.
|
||||||
|
7. Gegeben ein Gast in meiner Gästeliste, wenn er in keiner Partie vorkommt, dann kann ich ihn löschen; kommt er in mindestens einer Partie vor, kann ich ihn nur umbenennen (Klärung 37).
|
||||||
|
8. Gegeben ich gebe einen Gastnamen ein, wenn er leer ist oder länger als 30 Zeichen, dann kann ich ihn nicht speichern und sehe den Fehler am Feld (Klärung 37).
|
||||||
|
|
||||||
### PAR-03 Ergebnis erfassen
|
### PAR-03 Ergebnis erfassen
|
||||||
|
|
||||||
1. Gegeben eine Partie, wenn ich je Mitspieler eine Punktzahl eintrage (ganze oder Dezimalzahl, auch negativ), dann wird die Platzierung automatisch daraus abgeleitet.
|
1. Gegeben eine Partie, wenn ich je Mitspieler eine Punktzahl eintrage (ganze oder Dezimalzahl, auch negativ), dann wird die Platzierung automatisch daraus abgeleitet, gemäß der Wertungsrichtung des Spiels (Kriterium 8).
|
||||||
2. Gegeben zwei Mitspieler haben gleich viele Punkte, dann teilen sie sich den Platz.
|
2. Gegeben zwei Mitspieler haben gleich viele Punkte, dann teilen sie sich den Platz.
|
||||||
3. Gegeben ein Spiel ohne Punkte, wenn ich Platzierungen oder nur den Sieger angebe, dann wird das Ergebnis so gespeichert.
|
3. Gegeben ein Spiel ohne Punkte, wenn ich Platzierungen oder nur den Sieger angebe, dann wird das Ergebnis so gespeichert.
|
||||||
4. Gegeben ein kooperatives Spiel, wenn ich es als kooperativ markiere, dann erfasse ich nur „gewonnen“ oder „verloren“ für alle gemeinsam.
|
4. Gegeben ein kooperatives Spiel, wenn ich es als kooperativ markiere, dann erfasse ich nur „gewonnen“ oder „verloren“ für alle gemeinsam; ein gemeinsamer Sieg zählt in der Statistik für alle Mitspieler als Sieg (Klärung 38).
|
||||||
5. Gegeben ein Teamspiel, wenn ich Mitspieler Teams zuordne, dann gilt das Ergebnis je Team, und in der Statistik zählt ein Sieg für alle Mitglieder des Teams.
|
5. Gegeben ein Teamspiel, wenn ich Mitspieler Teams zuordne, dann erfasse ich Punkte und Ergebnis je Team, und in der Statistik zählt ein Sieg für alle Mitglieder des Teams (Klärung 38).
|
||||||
6. Gegeben ich lasse das Ergebnis leer, dann wird die Partie ohne Ergebnis gespeichert; sie zählt in der Statistik als gespielt, aber nicht für Siegquote und Bestwerte.
|
6. Gegeben ich lasse das Ergebnis leer, dann wird die Partie ohne Ergebnis gespeichert; sie zählt in der Statistik als gespielt, aber nicht für Siegquote und Bestwerte.
|
||||||
7. Gegeben ich überschreibe die automatisch berechnete Platzierung, dann gilt meine Eingabe.
|
7. Gegeben ich überschreibe die automatisch berechnete Platzierung, dann gilt meine Eingabe.
|
||||||
|
8. Gegeben ein Spiel, dann kann ich je Spiel einstellen, ob die höchste oder die niedrigste Punktzahl gewinnt; die Einstellung gilt für die Ableitung der Platzierung (Kriterium 1) und für Bestwerte (PAR-08) (Klärung 38).
|
||||||
|
|
||||||
### PAR-04 Wertungsbogen je Spiel
|
### PAR-04 Wertungsbogen je Spiel
|
||||||
|
|
||||||
1. Gegeben ich lege für ein Spiel Wertungskategorien an (zum Beispiel Siedlungen, Straßen), dann kann ich je Mitspieler und Kategorie Punkte eintragen, und die Summe wird automatisch gebildet.
|
1. Gegeben ich lege für ein Spiel Wertungskategorien an (zum Beispiel Siedlungen, Straßen), dann kann ich je Mitspieler und Kategorie Punkte eintragen, und die Summe wird automatisch gebildet.
|
||||||
2. Gegeben ich habe Kategorien einmal angelegt, wenn ich dieses Spiel wieder erfasse, dann werden sie mir vorgeschlagen, in der gespeicherten Reihenfolge.
|
2. Gegeben ich habe Kategorien einmal angelegt, wenn ich dieses Spiel wieder erfasse, dann werden sie mir vorgeschlagen, in der gespeicherten Reihenfolge.
|
||||||
3. Gegeben ich ändere die Kategorien, dann behalten bereits erfasste Partien ihre Werte.
|
3. Gegeben ich ändere die Kategorien, dann behalten bereits erfasste Partien ihre Werte; gelöschte Kategorien bleiben in alten Partien sichtbar und sind als „gelöscht“ markiert (Klärung 39).
|
||||||
4. Gegeben ich will keinen Wertungsbogen, dann kann ich die Gesamtpunktzahl direkt eintragen (PAR-03).
|
4. Gegeben ich will keinen Wertungsbogen, dann kann ich die Gesamtpunktzahl direkt eintragen (PAR-03).
|
||||||
5. Gegeben Wertungsbögen, dann sind sie in R1 nur für mich sichtbar.
|
5. Gegeben Wertungsbögen, dann sind sie in R1 nur für mich sichtbar.
|
||||||
|
6. Gegeben ein Spiel, dann habe ich genau einen Wertungsbogen dafür (Klärung 39).
|
||||||
|
7. Gegeben ich trage in einer Kategorie negative Punkte ein, dann ist das erlaubt und fließt so in die Summe ein (Klärung 39).
|
||||||
|
|
||||||
### PAR-05 Partie bearbeiten und löschen
|
### PAR-05 Partie bearbeiten und löschen
|
||||||
|
|
||||||
|
|
@ -231,6 +299,7 @@ R1 umfasst 26 Stories aus vier Epics. Alles, was andere Nutzer sehen könnte, ko
|
||||||
2. Gegeben ich lösche eine Partie, wenn ich die Rückfrage bestätige, dann ist sie weg und zählt nicht mehr in Verlauf und Statistik.
|
2. Gegeben ich lösche eine Partie, wenn ich die Rückfrage bestätige, dann ist sie weg und zählt nicht mehr in Verlauf und Statistik.
|
||||||
3. Gegeben ich ändere oder lösche eine Partie, dann stimmt die Statistik sofort danach.
|
3. Gegeben ich ändere oder lösche eine Partie, dann stimmt die Statistik sofort danach.
|
||||||
4. Gegeben eine noch nicht synchronisierte Partie, dann kann ich sie bearbeiten und löschen wie jede andere.
|
4. Gegeben eine noch nicht synchronisierte Partie, dann kann ich sie bearbeiten und löschen wie jede andere.
|
||||||
|
5. Gegeben ich habe dieselbe Partie offline auf zwei Geräten bearbeitet, wenn beide synchronisieren, dann gilt die letzte Änderung, und ich sehe einen Hinweis, dass eine andere Änderung überschrieben wurde (Klärung 36).
|
||||||
|
|
||||||
### PAR-06 Partienverlauf
|
### PAR-06 Partienverlauf
|
||||||
|
|
||||||
|
|
@ -239,24 +308,48 @@ R1 umfasst 26 Stories aus vier Epics. Alles, was andere Nutzer sehen könnte, ko
|
||||||
3. Gegeben ich tippe eine Partie an, dann sehe ich alle Details inklusive Ergebnis und Wertungsbogen.
|
3. Gegeben ich tippe eine Partie an, dann sehe ich alle Details inklusive Ergebnis und Wertungsbogen.
|
||||||
4. Gegeben ich habe noch keine Partie erfasst, dann sehe ich einen Hinweis mit dem Weg zur ersten Partie.
|
4. Gegeben ich habe noch keine Partie erfasst, dann sehe ich einen Hinweis mit dem Weg zur ersten Partie.
|
||||||
5. Gegeben sehr viele Partien, dann werden weitere beim Scrollen nachgeladen.
|
5. Gegeben sehr viele Partien, dann werden weitere beim Scrollen nachgeladen.
|
||||||
|
6. Gegeben nicht synchronisierte Partien, dann erscheinen sie im Verlauf und sind als „noch nicht synchronisiert“ gekennzeichnet (Klärung 36).
|
||||||
|
|
||||||
### PAR-07 Persönliche Statistik
|
### PAR-07 Persönliche Statistik
|
||||||
|
|
||||||
1. Gegeben ich wähle einen Zeitraum (gesamt, Jahr, Monat oder frei), dann sehe ich Anzahl der Partien, Anzahl verschiedener gespielter Spiele, Gesamtspielzeit in Stunden und Siegquote.
|
1. Gegeben ich wähle einen Zeitraum (gesamt, Jahr, Monat oder frei), dann sehe ich Anzahl der Partien, Anzahl verschiedener gespielter Spiele, Gesamtspielzeit in Stunden und Siegquote.
|
||||||
2. Gegeben die Siegquote, dann ist sie der Anteil der Partien mit Platz 1 an allen Partien mit Ergebnis; ein geteilter erster Platz zählt als Sieg.
|
2. Gegeben die Siegquote, dann ist sie der Anteil der Partien mit Sieg an allen Partien mit Ergebnis, in denen ich Mitspieler bin; als Sieg zählen Platz 1 (auch geteilt), ein gewonnenes kooperatives Spiel und ein Sieg meines Teams (Klärungen 37, 38).
|
||||||
3. Gegeben Partien ohne Dauer, dann zählen sie nicht in die Gesamtspielzeit, und ich sehe, wie viele es sind.
|
3. Gegeben Partien ohne Dauer, dann zählen sie nicht in die Gesamtspielzeit, und ich sehe, wie viele es sind.
|
||||||
4. Gegeben ich sehe die meistgespielten Spiele, dann gibt es zwei Ranglisten (Top 10): nach Anzahl der Partien und nach Spielzeit.
|
4. Gegeben ich sehe die meistgespielten Spiele, dann gibt es zwei Ranglisten (Top 10): nach Anzahl der Partien und nach Spielzeit.
|
||||||
5. Gegeben der Verlauf, dann sehe ich die Partien pro Monat als Diagramm.
|
5. Gegeben der Verlauf, dann sehe ich die Partien pro Monat als Diagramm; beim Zeitraum „gesamt“ zeigt es die letzten 24 Monate (Klärung 40).
|
||||||
6. Gegeben die Statistik, dann stimmen ihre Zahlen mit dem Partienverlauf (PAR-06) im selben Zeitraum überein.
|
6. Gegeben die Statistik, dann stimmen ihre Zahlen mit dem Partienverlauf (PAR-06) im selben Zeitraum überein, gefiltert auf Partien, in denen ich Mitspieler bin (Klärung 37).
|
||||||
7. Gegeben ich habe keine Partien im Zeitraum, dann sehe ich einen Leerzustand statt Nullen und leerer Diagramme.
|
7. Gegeben ich habe keine Partien im Zeitraum, dann sehe ich einen Leerzustand statt Nullen und leerer Diagramme.
|
||||||
|
8. Gegeben Partien, in denen ich nicht Mitspieler bin, dann zählen sie in keine Zahl der persönlichen Statistik, auch nicht in die Spielzeit (Klärungen 37, 40).
|
||||||
|
9. Gegeben ein Diagramm, dann gibt es eine Tabellenansicht als Alternative und eine Zusammenfassung als Screenreader-Text (Klärung 46).
|
||||||
|
|
||||||
### PAR-08 Statistik je Spiel
|
### PAR-08 Statistik je Spiel
|
||||||
|
|
||||||
1. Gegeben ein Spiel mit Partien, dann sehe ich Anzahl der Partien, durchschnittliche Dauer, Gesamtdauer und Siegquote für dieses Spiel.
|
1. Gegeben ein Spiel mit Partien, dann sehe ich Anzahl der Partien, durchschnittliche Dauer, Gesamtdauer und Siegquote für dieses Spiel; die Siegquote zählt wie in PAR-07 Kriterium 2.
|
||||||
2. Gegeben ein Spiel mit Punkten, dann sehe ich den Bestwert mit Datum der Partie.
|
2. Gegeben ein Spiel mit Punkten, dann sehe ich als Bestwert meine eigene beste Punktzahl gemäß Wertungsrichtung (PAR-03 Kriterium 8) mit Datum der Partie (Klärung 41).
|
||||||
3. Gegeben ein Spiel ohne Punkte, dann wird kein Bestwert angezeigt.
|
3. Gegeben ein Spiel ohne Punkte, dann wird kein Bestwert angezeigt.
|
||||||
4. Gegeben das Spiel, dann sehe ich die fünf häufigsten Mitspieler.
|
4. Gegeben das Spiel, dann sehe ich die fünf häufigsten Mitspieler; Gäste zählen dazu (Klärung 41).
|
||||||
5. Gegeben die Detailseite eines Spiels (KAT-02), dann komme ich von dort zur Statistik des Spiels.
|
5. Gegeben die Detailseite eines Spiels (KAT-02), dann komme ich von dort zur Statistik des Spiels.
|
||||||
|
6. Gegeben Partien dieses Spiels, in denen ich nicht Mitspieler bin, dann zählen sie wie in PAR-07 Kriterium 8 nicht in die Statistik je Spiel (Klärungen 37, 40, 41; von Chris bestätigt, siehe „PAR-08“ in `r1-klaerungen.md`).
|
||||||
|
|
||||||
|
## QUE – Querschnitt-Stories
|
||||||
|
|
||||||
|
### QUE-09 Startseite: persönliches Dashboard (neu, Klärung 42)
|
||||||
|
|
||||||
|
Als angemeldeter Nutzer möchte ich beim Öffnen der App eine persönliche Startseite mit meinen zuletzt gespielten Partien, meiner Wunschliste, einer Kurzstatistik und einer Schnellaktion zum Erfassen einer Partie sehen, damit ich schnell dort weitermache, wo ich zuletzt war (F18, N8). Nächste Termine (F18) kommen erst mit den Gruppen in R2; die Einkaufsliste erscheint nicht auf dem Dashboard (N8).
|
||||||
|
|
||||||
|
1. Gegeben ich bin angemeldet, wenn ich die App öffne, dann sehe ich als Startseite mein persönliches Dashboard mit den Bereichen „Zuletzt gespielt“, „Wunschliste“ und „Kurzstatistik“ sowie der Schnellaktion „Partie erfassen“ (N8).
|
||||||
|
2. Gegeben ich habe Partien erfasst, dann zeigt „Zuletzt gespielt“ meine 5 neuesten Partien, neueste zuerst, mit Spiel, Datum und Sieger wie im Partienverlauf (PAR-06 Kriterium 1) (N6).
|
||||||
|
3. Gegeben ich tippe eine Partie unter „Zuletzt gespielt“ an, dann sehe ich ihre Details (PAR-06 Kriterium 3); über „Alle anzeigen“ gelange ich zum Partienverlauf.
|
||||||
|
4. Gegeben meine Wunschliste enthält Spiele, dann zeigt der Bereich „Wunschliste“ bis zu 5 Spiele daraus mit Titel, Cover und Priorität, sortiert nach Priorität (hoch zuerst) und bei gleicher Priorität die zuletzt hinzugefügten zuerst; ein Tipp auf ein Spiel öffnet seine Detailseite (KAT-02), „Alle anzeigen“ öffnet die Wunschliste (N6, N7).
|
||||||
|
5. Gegeben ich habe noch keine Partie erfasst, dann zeigt „Zuletzt gespielt“ einen Hinweis mit dem Weg zur ersten Partie.
|
||||||
|
6. Gegeben meine Wunschliste ist leer, dann zeigt der Bereich „Wunschliste“ einen Hinweis mit dem Weg zur Katalogsuche.
|
||||||
|
7. Gegeben ich habe eine Partie erfasst, bearbeitet oder gelöscht oder meine Wunschliste geändert, wenn ich zur Startseite zurückkehre, dann sind die Änderungen ohne manuelles Neuladen sichtbar.
|
||||||
|
8. Gegeben ich bin in der App offline, dann zeigt „Zuletzt gespielt“ auch nicht synchronisierte Partien, gekennzeichnet wie in PAR-01 Kriterium 8; der Bereich „Wunschliste“ zeigt einen Hinweis, dass eine Verbindung nötig ist.
|
||||||
|
9. Gegeben ich wähle auf dem Dashboard die Schnellaktion „Partie erfassen“, dann öffnet sich die Erfassung einer neuen Partie (PAR-01); in der App funktioniert das auch offline (PAR-01 Kriterium 4), im Browser sehe ich offline den Hinweis „Verbindung nötig“ (PAR-01 Kriterium 10) (N8).
|
||||||
|
10. Gegeben ich habe Partien erfasst, dann zeigt die „Kurzstatistik“ die Anzahl meiner Partien im laufenden Monat und meine Siegquote über alle meine Partien (Zeitraum „gesamt“), gezählt wie in PAR-07 Kriterien 2 und 8, und einen Link zur persönlichen Statistik (PAR-07) (N8, N8a).
|
||||||
|
11. Gegeben ich habe im laufenden Monat keine Partie mit mir als Mitspieler, dann zeigt die „Kurzstatistik“ für den Monat einen Hinweis statt einer Null; die Siegquote gesamt bleibt sichtbar, sofern es Partien mit Ergebnis gibt, sonst zeigt die ganze Kurzstatistik einen Leerzustand (wie PAR-07 Kriterium 7); der Link zur persönlichen Statistik bleibt sichtbar (N8, N8a).
|
||||||
|
12. Gegeben ich habe nicht synchronisierte Partien, dann zählen sie in der „Kurzstatistik“ mit und sind gekennzeichnet wie in PAR-01 Kriterium 8.
|
||||||
|
13. Gegeben ich bin nicht angemeldet, wenn ich die App oder die Web-Adresse öffne, dann zeigt die Startseite statt des Dashboards die Katalogsuche (KAT-01) und einen Hinweis mit dem Weg zum Anmelden und Registrieren (KTO-01); private Bereiche werden nicht angezeigt (N9).
|
||||||
|
|
||||||
## Querschnitt für R1
|
## Querschnitt für R1
|
||||||
|
|
||||||
|
|
@ -264,9 +357,12 @@ Diese Kriterien gelten für jede Story in R1 und werden bei jedem Pull Request m
|
||||||
|
|
||||||
### Datenschutz (QUE-04)
|
### Datenschutz (QUE-04)
|
||||||
|
|
||||||
|
Datenschutzerklärung und Nutzungsbedingungen liefert Chris vor dem Release; eine rechtliche Prüfung (inkl. Mindestalter 16 per Selbstbestätigung) ist vor dem Release nötig (Klärung 21/47).
|
||||||
|
|
||||||
1. Gegeben ich registriere mich, dann sehe ich vorher Datenschutzerklärung und Nutzungsbedingungen und stimme ihnen ausdrücklich zu.
|
1. Gegeben ich registriere mich, dann sehe ich vorher Datenschutzerklärung und Nutzungsbedingungen und stimme ihnen ausdrücklich zu.
|
||||||
2. Gegeben optionale Dienste wie Nutzungsanalyse, dann sind sie standardmäßig aus und werden erst nach meiner Einwilligung aktiv.
|
2. Gegeben optionale Dienste, die personenbeziehbare Daten verarbeiten, dann sind sie standardmäßig aus und werden erst nach meiner Einwilligung aktiv. Ausgenommen ist die anonyme Reichweitenmessung nach Kriterium 4 (Klärung 21/47).
|
||||||
3. Gegeben die Datenschutzerklärung, dann nennt sie Zwecke, Speicherdauer, Empfänger und die Löschfrist aus KTO-05.
|
3. Gegeben die Datenschutzerklärung, dann nennt sie Zwecke, Speicherdauer, Empfänger und die Löschfrist von 30 Tagen aus KTO-05 (Klärung 20).
|
||||||
|
4. Gegeben die Reichweitenmessung in R1, dann ist sie anonym und cookielos, nutzt keine Geräte-IDs und braucht keine Einwilligung; andere Analyse- oder Tracking-Dienste gibt es in R1 nicht (Klärung 21/47). Ich kann sie freiwillig in den Einstellungen ausschalten; danach sendet die App keine Messdaten mehr (KTO-11 Kriterium 14, N5).
|
||||||
|
|
||||||
### Sicherheit der Daten
|
### Sicherheit der Daten
|
||||||
|
|
||||||
|
|
@ -276,7 +372,7 @@ Diese Kriterien gelten für jede Story in R1 und werden bei jedem Pull Request m
|
||||||
|
|
||||||
### Sprachen (QUE-05)
|
### Sprachen (QUE-05)
|
||||||
|
|
||||||
1. Gegeben die App startet, dann folgt die Sprache der Geräteeinstellung (Deutsch oder Englisch, sonst Englisch) und lässt sich in den Einstellungen ändern.
|
1. Gegeben ich bin nicht angemeldet, dann folgt die Sprache der Geräteeinstellung (Deutsch oder Englisch, sonst Englisch) und lässt sich ändern; bin ich angemeldet, gilt die Sprache meines Profils auf allen Geräten und lässt sich in den Einstellungen (KTO-11) ändern (N3).
|
||||||
2. Gegeben jeder sichtbare Text, dann kommt er aus den Übersetzungsdateien, nicht aus dem Code.
|
2. Gegeben jeder sichtbare Text, dann kommt er aus den Übersetzungsdateien, nicht aus dem Code.
|
||||||
3. Gegeben Datum, Zahlen und Währung, dann werden sie nach Sprache und Region formatiert.
|
3. Gegeben Datum, Zahlen und Währung, dann werden sie nach Sprache und Region formatiert.
|
||||||
4. Gegeben eine Übersetzung fehlt, dann erscheint der englische Text, niemals ein technischer Schlüssel.
|
4. Gegeben eine Übersetzung fehlt, dann erscheint der englische Text, niemals ein technischer Schlüssel.
|
||||||
|
|
@ -296,12 +392,12 @@ Diese Kriterien gelten für jede Story in R1 und werden bei jedem Pull Request m
|
||||||
|
|
||||||
### Plattformen
|
### Plattformen
|
||||||
|
|
||||||
1. Gegeben jede R1-Story, dann funktioniert sie auf iOS, Android und im Web mit denselben Kriterien; Abweichungen werden im Pull Request begründet.
|
1. Gegeben jede R1-Story, dann funktioniert sie auf iOS, Android und im Web mit denselben Kriterien; Abweichungen werden im Pull Request begründet. Bekannte Abweichung: Die Offline-Erfassung von Partien gibt es in R1 nur in den Apps (PAR-01 Kriterium 10, Klärung 36).
|
||||||
2. Gegeben ein großer Bildschirm im Web oder auf einem Tablet, dann nutzt das Layout die Breite sinnvoll, statt eine gestreckte Handy-Ansicht zu zeigen.
|
2. Gegeben ein großer Bildschirm im Web oder auf einem Tablet, dann nutzt das Layout die Breite sinnvoll, statt eine gestreckte Handy-Ansicht zu zeigen.
|
||||||
|
|
||||||
## Entscheidungen zu den offenen Punkten
|
## Entscheidungen zu den offenen Punkten
|
||||||
|
|
||||||
Beim Schreiben sind zehn Fragen entstanden, die R1 selbst betreffen. Alle zehn sind am 2. November 2026 entschieden; die Spalte „Entscheidung“ gilt als verbindlich.
|
Beim Schreiben sind zehn Fragen entstanden, die R1 selbst betreffen. Alle zehn sind am 2. November 2026 entschieden; die Spalte „Entscheidung“ gilt als verbindlich. Die 48 Folgefragen aus dem Story-Schnitt und die Fragen N1–N14 aus dem Einarbeiten sind ebenfalls entschieden, siehe [`r1-klaerungen.md`](r1-klaerungen.md).
|
||||||
|
|
||||||
| Nr | Frage | Entscheidung | Betrifft |
|
| Nr | Frage | Entscheidung | Betrifft |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
|
|
@ -315,4 +411,3 @@ Beim Schreiben sind zehn Fragen entstanden, die R1 selbst betreffen. Alle zehn s
|
||||||
| O8 | Mehrfachbesitz, etwa zwei Exemplare desselben Spiels? | Nein in R1, ein Eintrag je Spiel | SAM-01 |
|
| O8 | Mehrfachbesitz, etwa zwei Exemplare desselben Spiels? | Nein in R1, ein Eintrag je Spiel | SAM-01 |
|
||||||
| O9 | Wertungsbögen: privat je Nutzer oder als Vorlagen im Katalog? | Privat in R1, gemeinsame Vorlagen später | PAR-04 |
|
| O9 | Wertungsbögen: privat je Nutzer oder als Vorlagen im Katalog? | Privat in R1, gemeinsame Vorlagen später | PAR-04 |
|
||||||
| O10 | Passen die Zahlenwerte: Passwort ab 10 Zeichen, Anzeigename 30, Kurzbeschreibung 300, 5 Lieblingsspiele, 20 Mitspieler, Notiz 1000 Zeichen, Avatar 5 MB? | So übernehmen | KTO, SAM, PAR |
|
| O10 | Passen die Zahlenwerte: Passwort ab 10 Zeichen, Anzeigename 30, Kurzbeschreibung 300, 5 Lieblingsspiele, 20 Mitspieler, Notiz 1000 Zeichen, Avatar 5 MB? | So übernehmen | KTO, SAM, PAR |
|
||||||
|
|
||||||
|
|
|
||||||
184
requirements/backlog.md
Normal file
184
requirements/backlog.md
Normal file
|
|
@ -0,0 +1,184 @@
|
||||||
|
# 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 |
|
||||||
82
requirements/r1-klaerungen.md
Normal file
82
requirements/r1-klaerungen.md
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
# R1 – Klärungen offener Fragen
|
||||||
|
|
||||||
|
Antworten von Chris auf die offenen Fragen aus `r1-story-entwurf.md` § 5 (Nummerierung wie dort).
|
||||||
|
Stand: 2026-11-02 – **alle 48 Fragen beantwortet**. Als Nächstes werden Akzeptanzkriterien, Datenmodell und Issues entsprechend angepasst.
|
||||||
|
|
||||||
|
| Nr | Story/Issue | Entscheidung | Folge |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 1 | SAM-04 #8, SAM-06 #10, SAM-08 #25 | Ein Spiel steht in genau **einer** Liste (Sammlung, Wunsch- oder Einkaufsliste). | Datenmodell bleibt (`unique (owner_id, game_id)`). SAM-04 Kriterium 2 wird gestrichen bzw. umformuliert: Steht das Spiel schon in der Sammlung, sehe ich einen Hinweis und kann es nicht auf die Wunschliste setzen. |
|
||||||
|
| 2 | SAM-02 #7, SAM-04 #8, SAM-05 #9 | R1: Zustand, Standort, Tags, Notiz, Priorität. **Kaufpreis, Händler, geplanter Preis, Link und Summe kommen später.** | Datenmodell um Zustand, Standort, Tags, Priorität erweitern. Streichen: SAM-02 Krit. 1 (Kaufpreis) und Krit. 3 (Preis negativ), SAM-05 Krit. 1 (Händler, Preis, Link) und Krit. 2 (Summe), SAM-06 Krit. 2 (Preisübernahme). |
|
||||||
|
| 9 | KTO-04 #5, KTO-02 #14 | Stadt bleibt in R1, ist aber **nur für den Nutzer selbst sichtbar**. | Datenmodell/RLS: keine Sichtbarkeit von Profilfeldern für Fremde in R1. |
|
||||||
|
| 10 | KTO-05 #23 | Beim Konto-Löschen wird in R1 **alles hart gelöscht**: Partien, Gäste, Wertungsbögen, private Katalogeinträge, offene Meldungen. | Regel „Gelöschter Nutzer“ im Datenmodell gilt erst ab R2 (verknüpfte Mitspieler). |
|
||||||
|
| 11 | PAR-01 #15, PAR-02 #16, PAR-03 #17, PAR-06 #20 | **Alles in R1**: Ort, Gästeliste, kooperativ, Teams. | Datenmodell erweitern. |
|
||||||
|
| 12 | SAM-08 #25 | Fehlende BGG-Spiele werden beim Import **automatisch als vorläufige private Einträge** angelegt (wie Datenmodell). | SAM-08 Kriterium 4 anpassen: Zusammenfassung zeigt sie als „vorläufig angelegt“; Meldung an Admin entsteht automatisch. |
|
||||||
|
| 24 | KAT-05 #2, KAT-02 #4 | Katalog zum Start **nur manuell gepflegt**, kein Import-Job in R1.1 (bis BGG-Lizenz vorliegt). | KAT-05 Kriterien 1–3, 6 (Import) werden erst mit Lizenz relevant; R1.1 braucht manuelle Pflege und einen Startbestand. |
|
||||||
|
| 42 | neu | **Startseite/Dashboard wird eigene R1-Story.** | Neue Story + Issue anlegen. |
|
||||||
|
| 43 | neu | **Einstellungsbereich wird eigene R1-Story.** | Neue Story + Issue anlegen. |
|
||||||
|
| 44 | KAT-04 #13, KAT-05 #2 | Admin-Rolle/-Bereich wird **keine** eigene Story. Der Admin pflegt Katalog und Meldungen in R1 **über Supabase Studio/SQL**; die Admin-Rolle existiert nur als DB-Rolle (RLS). | Keine Admin-UI in der App bis QUE-08 (R4). KAT-05 Kriterien 4–5 werden über Studio erfüllt; Ablauf im Repo dokumentieren. |
|
||||||
|
| 25 | KAT-04 #13, KAT-05 #2 | Siehe 44: Admin-Pflege per Supabase Studio. | – |
|
||||||
|
| 13 | KAT-01 #3 | Kriterium 8: zusätzliche Filter **Genre und Mechanik**; Filtern funktioniert **auch ohne Suchbegriff** (Entdecken). | Kriterium 8 als Wenn/Dann neu formulieren. |
|
||||||
|
| 17 | SAM-04 #8, SAM-05 #9, SAM-06 #10 | Rückgängig machen ist **5 Sekunden** lang möglich. | „Einige Sekunden“ durch „5 Sekunden“ ersetzen. |
|
||||||
|
| 18 | KTO-01 #1 | Drosselung und Gültigkeit von Reset- und Bestätigungslink nach **Supabase-Auth-Standards** (self-hosted Config). | Werte aus der Config im Repo dokumentieren und in Tests referenzieren. |
|
||||||
|
| 3 | KAT-01 #3 | **Alternative Titel** je Spiel (mit Sprache); die Suche findet alle. | Datenmodell: Tabelle für alternative Titel. |
|
||||||
|
| 4 | KAT-01 #3, KAT-02 #4 | **Verlag** wird aufgenommen. | Datenmodell: Verlag(e) je Spiel. |
|
||||||
|
| 5 | KAT-03 #12 | **Erweiterung ↔ Basisspiel** wird aufgenommen: Erweiterung ist eigenes Spiel mit Verweis aufs Basisspiel. | Datenmodell erweitern. |
|
||||||
|
| 20 | KTO-05 #23 | Löschfrist **30 Tage** inkl. Backups. Export als **JSON** mit allen eigenen Daten (inkl. Gäste, Wertungsbögen, Avatar-Link, vorläufige Spiele); Abruf in der App, **7 Tage** gültig. Neuregistrierung mit derselben E-Mail **sofort** möglich. | KTO-05 Kriterien 2, 4, 5 konkretisieren; Datenschutzerklärung nennt 30 Tage. |
|
||||||
|
| 21/47 | KTO-01 #1, QUE-04 | Datenschutzerklärung und Nutzungsbedingungen liefert Chris vor Release. Selbstbestätigung „mindestens 16“ reicht bis zur rechtlichen Prüfung. R1 enthält **nur anonyme, cookielose Reichweitenmessung ohne Geräte-IDs und ohne Einwilligung** (z. B. selbst gehostet). | QUE-04 Kriterium 2 präzisieren: Gilt für personenbeziehbare optionale Dienste; anonyme Messung ist ausgenommen. **Rechtliche Prüfung vor Release nötig.** |
|
||||||
|
|
||||||
|
## Weitere Entscheidungen (einzeln mit Chris durchgegangen, 2026-11-02)
|
||||||
|
|
||||||
|
| Nr | Story/Issue | Entscheidung |
|
||||||
|
|---|---|---|
|
||||||
|
| 6 | KAT-04 #13 | Neue Tabelle für Meldungen in R1 (Status offen/freigegeben/abgelehnt/zusammengeführt, Link, Verweis auf Zieleintrag). |
|
||||||
|
| 7 | KAT-05 #2 | **Alles schon in R1 modellieren:** Flag „ausgeblendet“, Kennzeichnung manuell gepflegter Felder und Erlaubnis je Quelle, damit der spätere Import keine Migration braucht. |
|
||||||
|
| 8 | KTO-02 #14 | Profil-Genres nutzen dieselbe Genre-Liste wie der Katalog. |
|
||||||
|
| 14 | KAT-01 #3 | „Normale Verbindung“ = mobil 4G-Profil (≥ 10 Mbit/s, ~100 ms RTT); 95 % der Suchen liefern erste Treffer in ≤ 2 s, gemessen gegen Staging. |
|
||||||
|
| 15 | KAT-04 #13 | „Sehr ähnlich“ = gleicher normalisierter Titel (Groß/Klein, Sonderzeichen, Artikel ignoriert) oder Titel-Ähnlichkeit ≥ 0,8 (Trigramm) bei Erscheinungsjahr ± 1. |
|
||||||
|
| 16 | SAM-03 #11 | „Flüssig“ bei 1000 Spielen = Such-/Filterergebnis in ≤ 300 ms, Scrollen ohne sichtbares Ruckeln auf einem Mittelklasse-Gerät. |
|
||||||
|
| 19 | KTO-04 #5 | Kriterium 2 wird als Regel in `10-anforderungen.md` verschoben; KTO-04 hat in R1 nur Kriterium 1. |
|
||||||
|
| 22 | KTO-01 #1 | Anzeigename bei Registrierung: dieselben Regeln wie KTO-02 (1–30 Zeichen). Abmelden sowie E-Mail/Passwort ändern gehören in die neue Story „Einstellungsbereich“ (43). |
|
||||||
|
| 23 | KTO-02 #14 | **Nur Katalogspiele** dürfen Lieblingsspiele sein (keine vorläufigen Spiele). Reihenfolge per Ziehen und zusätzlich per „nach oben/unten“-Aktion (barrierefrei). |
|
||||||
|
| 26 | KAT-04 #13 | Ergebnis einer Meldung als Hinweis in der App am vorläufigen Eintrag, keine E-Mail. Bei Ablehnung ohne Zieleintrag bleibt der vorläufige Eintrag privat bestehen und ist als „abgelehnt“ markiert. |
|
||||||
|
| 27 | KAT-04 #13 | Chris prüft jede Meldung manuell. Limit: 10 Meldungen je Nutzer und Tag. |
|
||||||
|
| 28 | KAT-03 #12 | Edition ist optional und wird nur in Sammlung und Partien gewählt, nicht in Wunsch-/Einkaufsliste. |
|
||||||
|
| 29 | SAM-02 #7 | Zustandsliste: neu/eingeschweißt, sehr gut, gut, gebraucht, beschädigt. Tags und Standorte ohne eigene Verwaltung in R1 (entstehen durch Nutzung, Vorschläge aus bisherigen Werten). |
|
||||||
|
| 30 | SAM-03 #11 | Wunsch- und Einkaufsliste: nur Titelsuche und Sortierung, keine Filter. Leerzustand ohne Lizenz zeigt nur den Weg zum Hinzufügen. |
|
||||||
|
| 31 | SAM-05 #9 | Summe entfällt (Frage 2). Lehnt der Nutzer nach „gekauft“ die Übernahme ab, bleibt das Spiel unverändert auf der Einkaufsliste. |
|
||||||
|
| 32 | SAM-06 #10 | Entfällt als Folge von Frage 1: Nach Frage 1 kann ein Spiel nicht gleichzeitig in Sammlung und Liste stehen; die Notiz wird einfach übernommen. |
|
||||||
|
| 33 | SAM-07 #24 | Eine BGG-Verknüpfung je Konto; derselbe BGG-Name darf an mehreren Konten hängen (BGG-Sammlungen sind öffentlich). |
|
||||||
|
| 34 | SAM-08 #25 | owned → Sammlung; wishlist und want to buy → Wunschliste; preordered → Einkaufsliste; want to play wird ignoriert. BGG-Priorität 1–2 → hoch, 3 → mittel, 4–5 → niedrig. Besessen und gewünscht → Sammlung (Frage 1). Erweiterungen werden importiert. |
|
||||||
|
| 35 | SAM-09 #26 | „Selbst hinzugefügt“ = Eintrag, der nicht aus einem BGG-Import stammt. Hervorhebung nur im Abgleichsdialog. |
|
||||||
|
| 36 | PAR-01 #15, PAR-05 #19 | Datum ohne Uhrzeit. Vorläufige Spiele wählbar; Wunschlisten-Spiele über die Katalogsuche. Konflikt bei Offline-Bearbeitung auf zwei Geräten: letzte Änderung gewinnt, Hinweis an den Nutzer. Nicht synchronisierte Partien zählen lokal schon in Verlauf und Statistik (gekennzeichnet). Gastvorschläge und Wertungsbögen funktionieren offline aus dem lokalen Speicher. **Web: Offline-Erfassung in R1 nur in den Apps, im Browser mit Hinweis „Verbindung nötig“** (Abweichung im PR begründen). |
|
||||||
|
| 37 | PAR-02 #16 | Die persönliche Statistik zählt nur Partien, in denen ich Mitspieler bin. Namensvergleich ohne Groß-/Kleinschreibung; ein Gast darf wie ich heißen. Gäste lassen sich löschen, wenn sie in keiner Partie vorkommen, sonst nur umbenennen. Gastname 1–30 Zeichen. |
|
||||||
|
| 38 | PAR-03 #17, PAR-07 #21 | Kooperativer Sieg zählt als Sieg in der Siegquote. Bei Teams werden Punkte je Team erfasst. Je Spiel einstellbare Wertungsrichtung „höchste“ oder „niedrigste Punktzahl gewinnt“. |
|
||||||
|
| 39 | PAR-04 #18 | Ein Wertungsbogen je Spiel und Nutzer. Gelöschte Kategorien bleiben in alten Partien sichtbar (als „gelöscht“ markiert). Negative Punkte in Kategorien erlaubt. |
|
||||||
|
| 40 | PAR-07 #21 | Wie 37: nur Partien mit mir (auch für Spielzeit). Diagramm bei „gesamt“: letzte 24 Monate. |
|
||||||
|
| 41 | PAR-08 #22 | Bestwert = meine eigene beste Punktzahl, gemäß Wertungsrichtung (38). Gäste zählen zu den häufigsten Mitspielern. |
|
||||||
|
| 45 | KTO-01 #1, KAT-04 #13, KTO-05 #23 | E-Mails nur für Bestätigung und Passwort-Reset (Supabase-Systemmails) in der Sprache des Profils. Export fertig und Meldungsergebnis nur als Hinweis in der App. |
|
||||||
|
| 46 | PAR-07 #21 | Diagramme bekommen eine Tabellenansicht als Alternative und eine Zusammenfassung als Screenreader-Text. |
|
||||||
|
| 48 | KAT-02 #4 | Katalogtexte in anderer Sprache als die Oberfläche bekommen einen sichtbaren Sprachhinweis (z. B. „Beschreibung auf Englisch“). |
|
||||||
|
|
||||||
|
## Neue Fragen aus dem Einarbeiten (N1–N14, entschieden 2026-11-02)
|
||||||
|
|
||||||
|
| Nr | Story/Issue | Entscheidung |
|
||||||
|
|---|---|---|
|
||||||
|
| N1 | KTO-11 #28 | Nach Passwort- oder E-Mail-Wechsel werden **alle anderen Geräte abgemeldet** (wie beim Reset, KTO-01 Kriterium 9). |
|
||||||
|
| N2 | KTO-11 #28 | E-Mail-Wechsel: **Bestätigungslink an die neue Adresse, Info-Mail an die alte Adresse** (Supabase „secure email change“). |
|
||||||
|
| N3 | KTO-11 #28 | Ohne Anmeldung gilt die **Gerätesprache** (Fallback Englisch), änderbar. Nach Anmeldung gilt die **Profilsprache** auf allen Geräten. Keine Option „wie Gerät“. |
|
||||||
|
| N4 | KTO-11 #28 | Abmelden mit nicht synchronisierten Partien: Partien **bleiben lokal** und werden beim nächsten Anmelden **desselben Kontos** übertragen. Sie sind für andere Konten auf dem Gerät nicht sichtbar. |
|
||||||
|
| N5 | KTO-11 #28 | Einstellungen verlinken Datenschutzerklärung, Nutzungsbedingungen und Impressum; kurzer Hinweis zur anonymen Messung **mit freiwilligem Ausschalter**. |
|
||||||
|
| N6 | QUE-09 #29 | **5 Einträge** je Dashboard-Bereich. |
|
||||||
|
| N7 | QUE-09 #29 | Wunschliste auf dem Dashboard nach **Priorität** (hoch zuerst), bei Gleichstand neueste zuerst. |
|
||||||
|
| N8 | QUE-09 #29 | Zusätzlich: **Schnellaktion „Partie erfassen“** und **Kurzstatistik** (z. B. Partien diesen Monat, Siegquote, Link zu PAR-07). Keine Einkaufsliste. |
|
||||||
|
| N9 | QUE-09 #29 | Nicht angemeldet: Startseite zeigt **Katalogsuche und Hinweis zum Anmelden/Registrieren**, kein Dashboard. |
|
||||||
|
| N10 | QUE-09 #29 | Story-ID bleibt **QUE-09**; neues Label **`epic/querschnitt`** statt `epic/partien` + `epic/sammlung`. |
|
||||||
|
| N11 | KAT-05 #2 | Startbestand **ca. 200 Spiele**, von Chris per Supabase Studio/Seed gepflegt. Nur Fakten (Titel, Verlag, Jahr, Spielerzahl, Dauer, Alter, Genre, Mechanik); **keine fremden Cover oder Beschreibungstexte** – Platzhalter-Cover und eigene Kurztexte. |
|
||||||
|
| N12 | SAM-08 #25, KAT-04 #13 | Automatisch beim BGG-Import erzeugte Meldungen **zählen nicht** auf das Tageslimit; sie sind je Spiel (BGG-ID) dedupliziert und als „aus Import“ gekennzeichnet. |
|
||||||
|
| N13 | KTO-11 #28 | Das **aktuelle Passwort** wird für Passwort- und E-Mail-Wechsel abgefragt. |
|
||||||
|
| N14 | KTO-11 #28, KTO-05 #23 | Der Einstieg zu Export/Konto löschen gehört **nicht** zu KTO-11; KTO-05 ergänzt ihn in den Einstellungen selbst. |
|
||||||
|
| PAR-08 | PAR-08 #22 | Bestätigt: **Partien ohne mich zählen nicht** in die Statistik je Spiel (Kriterium 6). |
|
||||||
|
| N12a | SAM-08 #25 | Deduplizierung der Import-Meldungen **je Nutzer** und BGG-ID; Meldungen verschiedener Nutzer bleiben getrennt. |
|
||||||
|
| N8a | QUE-09 #29 | Kurzstatistik: Partienzahl im laufenden Monat, **Siegquote gesamt**. |
|
||||||
|
| N3a | KTO-11 #28 | Bestätigt: Bei der Registrierung wird die aktive Oberflächensprache zur Profilsprache. |
|
||||||
297
requirements/r1-story-entwurf.md
Normal file
297
requirements/r1-story-entwurf.md
Normal file
|
|
@ -0,0 +1,297 @@
|
||||||
|
# R1 – Story-Entwurf (zur Freigabe durch Chris)
|
||||||
|
|
||||||
|
> **Überführt in backlog.md am 2026-11-02.** Freigegeben durch Chris; die 26 Stories sind als Forgejo-Issues #1–#26 angelegt. Maßgeblich für den aktuellen Stand ist `requirements/backlog.md`.
|
||||||
|
|
||||||
|
Stand: 2026-11-02 · Ersteller: requirements-analyst · Status: **Entwurf, nicht freigegeben**
|
||||||
|
|
||||||
|
Quellen: `requirements/20-r1-akzeptanzkriterien.md` (Akzeptanzkriterien, maßgeblich), `requirements/10-anforderungen.md` (Kontext, Entscheidungen F1–F18, S1–S3), `docs/datenmodell-r1.md` und `supabase/migrations/` (Abgleich auf Lücken).
|
||||||
|
|
||||||
|
Noch keine Forgejo-Issues, Labels oder `backlog.md`. Nach Freigabe wird dieser Entwurf in `requirements/backlog.md` überführt und je Story ein Issue nach `.forgejo/issue_template/user-story.md` angelegt. Die Akzeptanzkriterien werden 1:1 aus dem Quelldokument übernommen (Referenz „KTO-01 Kriterium 3“), hier nur als Anzahl referenziert.
|
||||||
|
|
||||||
|
**Anzahl:** 4 Epics, 26 Stories (KTO 4 + KAT 5 + SAM 9 + PAR 8). Das entspricht exakt dem Quelldokument, keine Abweichung.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Epics
|
||||||
|
|
||||||
|
| Epic | Label | Beschreibung | Stories in R1 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| KTO Konto & Profil | `epic/konto` | Registrierung, Anmeldung, eigenes Profil, Privatsphäre-Hinweis, Konto löschen und Datenexport (DSGVO) | KTO-01, KTO-02, KTO-04, KTO-05 |
|
||||||
|
| KAT Spielekatalog | `epic/katalog` | BGG-unabhängiger Katalog mit eigenen IDs: Suche, Detailseite, Erweiterungen/Editionen, Meldung fehlender Spiele, Import und Admin-Pflege | KAT-01 bis KAT-05 |
|
||||||
|
| SAM Sammlung & Listen | `epic/sammlung` | Private Sammlung mit eigenen Angaben, Wunsch- und Einkaufsliste, Übernahme in die Sammlung, BGG-Verknüpfung und -Import (lizenzabhängig, zuletzt gebaut) | SAM-01 bis SAM-09 |
|
||||||
|
| PAR Partien & Statistik | `epic/partien` | Partien erfassen (auch offline), Gäste als Mitspieler, Ergebnisse inkl. kooperativ/Team, Wertungsbögen, Verlauf, persönliche Statistik und Statistik je Spiel | PAR-01 bis PAR-08 |
|
||||||
|
|
||||||
|
Querschnitt (QUE-04 Datenschutz, QUE-05 Sprachen, QUE-06 Barrierefreiheit, Sicherheit, Zustände/Netz, Plattformen) ist **keine eigene Story**, sondern gilt laut Quelldokument für jede Story und wird in jedem Issue als Abschnitt „Querschnitt“ referenziert.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Story-Übersicht
|
||||||
|
|
||||||
|
Prioritäten und Größen sind Vorschläge. Größen: S ≈ 1 Tag, M ≈ 2 Tage, L ≈ 3 Tage, XL = größer als 3 Tage, sollte vor der Umsetzung geteilt werden (Schnittvorschlag in Abschnitt 3).
|
||||||
|
|
||||||
|
| ID | Titel | Epic | Prio | Größe | Abhängigkeiten | Vorgeschlagene Labels |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| KTO-01 | Registrieren, anmelden und Passwort zurücksetzen | KTO | Must | XL | – (Fundament; QUE-04 Einwilligung) | type/story, epic/konto, prio/must, size/xl, needs-clarification |
|
||||||
|
| KTO-02 | Profil bearbeiten | KTO | Must | L | KTO-01, KAT-01 (Lieblingsspiele per Katalogsuche) | type/story, epic/konto, prio/must, size/l, needs-clarification |
|
||||||
|
| KTO-04 | Privatsphäre (in R1 nur der Hinweis) | KTO | Must | S | KTO-01 | type/story, epic/konto, prio/must, size/s, needs-clarification |
|
||||||
|
| KTO-05 | Konto löschen und Daten exportieren | KTO | Must | XL | KTO-01; inhaltlich alle Daten-Stories (SAM, PAR, KAT-04) | type/story, epic/konto, prio/must, size/xl, needs-clarification |
|
||||||
|
| KAT-01 | Spiele suchen | KAT | Must | L | KAT-05 (Katalogdaten), KAT-04 (Kriterium 6) | type/story, epic/katalog, prio/must, size/l, needs-clarification |
|
||||||
|
| KAT-02 | Spieldetailseite | KAT | Must | M | KAT-01; SAM-01/04/05 (Kriterien 3–4); PAR-08 (Kriterium 6) | type/story, epic/katalog, prio/must, size/m, needs-clarification |
|
||||||
|
| KAT-03 | Erweiterungen und Editionen | KAT | Must | M | KAT-02, SAM-01 | type/story, epic/katalog, prio/must, size/m, needs-clarification |
|
||||||
|
| KAT-04 | Fehlendes Spiel melden | KAT | Must | L | KTO-01, KAT-01; KAT-05 (Freigabe durch Admin) | type/story, epic/katalog, prio/must, size/l, needs-clarification |
|
||||||
|
| KAT-05 | Katalogdaten laden und aktuell halten | KAT | Must | XL | – (Fundament); Admin-Rolle | type/story, epic/katalog, prio/must, size/xl, needs-clarification |
|
||||||
|
| SAM-01 | Spiel zur Sammlung hinzufügen | SAM | Must | S | KTO-01, KAT-01, KAT-02 | type/story, epic/sammlung, prio/must, size/s |
|
||||||
|
| SAM-02 | Eigene Angaben pro Spiel | SAM | Must | M | SAM-01 | type/story, epic/sammlung, prio/must, size/m, needs-clarification |
|
||||||
|
| SAM-03 | Sammlung durchsuchen, filtern und sortieren | SAM | Must | L | SAM-01, SAM-02 | type/story, epic/sammlung, prio/must, size/l, needs-clarification |
|
||||||
|
| SAM-04 | Wunschliste mit Priorität | SAM | Must | M | KTO-01, KAT-02 | type/story, epic/sammlung, prio/must, size/m, needs-clarification |
|
||||||
|
| SAM-05 | Einkaufsliste führen | SAM | Must | M | KTO-01, KAT-02, SAM-06 (Kriterium 3) | type/story, epic/sammlung, prio/must, size/m, needs-clarification |
|
||||||
|
| SAM-06 | In die Sammlung übernehmen | SAM | Must | S | SAM-01, SAM-04, SAM-05 | type/story, epic/sammlung, prio/must, size/s, needs-clarification |
|
||||||
|
| SAM-07 | BGG-Konto verknüpfen | SAM | Should | S | KTO-01; BGG-Lizenz (S1) | type/story, epic/sammlung, prio/should, size/s, needs-clarification |
|
||||||
|
| SAM-08 | Sammlung und Wunschliste aus BGG importieren | SAM | Should | XL | SAM-07, SAM-01, SAM-04, KAT-05 (bgg_id), KAT-04; BGG-Lizenz | type/story, epic/sammlung, prio/should, size/xl, needs-clarification |
|
||||||
|
| SAM-09 | BGG-Import wiederholen und abgleichen | SAM | Should | L | SAM-08, SAM-02 | type/story, epic/sammlung, prio/should, size/l, needs-clarification |
|
||||||
|
| PAR-01 | Partie erfassen | PAR | Must | XL | KTO-01, KAT-01, SAM-01 | type/story, epic/partien, prio/must, size/xl, needs-clarification |
|
||||||
|
| PAR-02 | Mitspieler hinzufügen | PAR | Must | M | PAR-01 | type/story, epic/partien, prio/must, size/m, needs-clarification |
|
||||||
|
| PAR-03 | Ergebnis erfassen | PAR | Must | L | PAR-02 | type/story, epic/partien, prio/must, size/l, needs-clarification |
|
||||||
|
| PAR-04 | Wertungsbogen je Spiel | PAR | Must | M | PAR-03 | type/story, epic/partien, prio/must, size/m, needs-clarification |
|
||||||
|
| PAR-05 | Partie bearbeiten und löschen | PAR | Must | M | PAR-01 bis PAR-04 | type/story, epic/partien, prio/must, size/m, needs-clarification |
|
||||||
|
| PAR-06 | Partienverlauf | PAR | Must | M | PAR-01 bis PAR-03 | type/story, epic/partien, prio/must, size/m, needs-clarification |
|
||||||
|
| PAR-07 | Persönliche Statistik | PAR | Must | L | PAR-03, PAR-06 (Kriterium 6) | type/story, epic/partien, prio/must, size/l, needs-clarification |
|
||||||
|
| PAR-08 | Statistik je Spiel | PAR | Must | M | PAR-03, KAT-02 | type/story, epic/partien, prio/must, size/m, needs-clarification |
|
||||||
|
|
||||||
|
**Entscheidung Chris (2026-11-02):** Neues Label `size/xl` wird eingeführt; die fünf XL-Stories bleiben ungeteilt (26 Issues). Schnittvorschläge unten dienen als Orientierung für die Spec.
|
||||||
|
|
||||||
|
**Priorität:** Alle Stories außer dem BGG-Block sind Must, weil R1 sie ausdrücklich umfasst. SAM-07 bis SAM-09 sind Should, weil R1 laut S1 auch ohne Import starten darf, wenn die Lizenz fehlt. Nur SAM-01 hat derzeit keine offene Frage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Stories im Einzelnen
|
||||||
|
|
||||||
|
Format je Story: User-Story-Satz · Akzeptanzkriterien (Referenz) · Nicht im Scope · ggf. Schnittvorschlag. Offene Fragen gesammelt in Abschnitt 5.
|
||||||
|
|
||||||
|
### KTO – Konto & Profil
|
||||||
|
|
||||||
|
**KTO-01 Registrieren, anmelden und Passwort zurücksetzen**
|
||||||
|
Als Brettspieler ohne Konto möchte ich mich mit E-Mail und Passwort registrieren, anmelden und mein Passwort zurücksetzen können, damit meine Sammlung und Partien sicher an mein Konto gebunden sind.
|
||||||
|
- AK: 9 Kriterien (`20-r1-akzeptanzkriterien.md` § KTO-01) + Querschnitt Datenschutz Kriterium 1 (Zustimmung zu Datenschutzerklärung/AGB).
|
||||||
|
- Nicht im Scope: Apple-/Google-Login (O1), Zwei-Faktor, Abmelden aller Geräte außer nach Passwort-Reset.
|
||||||
|
- Schnittvorschlag: KTO-01a Registrierung inkl. Alters- und Einwilligungsbestätigung, E-Mail-Bestätigung (Krit. 1–4, 6) · KTO-01b Anmelden/Abmelden mit Drosselung (Krit. 5, 7) · KTO-01c Passwort zurücksetzen (Krit. 8–9).
|
||||||
|
|
||||||
|
**KTO-02 Profil bearbeiten**
|
||||||
|
Als angemeldete Nutzerin möchte ich Anzeigename, Avatar, Kurzbeschreibung, Lieblingsspiele und Genres pflegen, damit mein Profil meine Spielvorlieben zeigt.
|
||||||
|
- AK: 7 Kriterien (§ KTO-02).
|
||||||
|
- Nicht im Scope: Wohnort/PLZ (KTO-03, R2), externe Konten (KTO-07, R3), Profil für andere sichtbar (KTO-08, R3), eindeutiger Anzeigename (O2).
|
||||||
|
|
||||||
|
**KTO-04 Privatsphäre (in R1 nur der Hinweis)**
|
||||||
|
Als Nutzer möchte ich in den Einstellungen sehen, dass alle meine Daten privat sind, damit ich der App meine Daten anvertraue.
|
||||||
|
- AK: 2 Kriterien (§ KTO-04).
|
||||||
|
- Nicht im Scope: echte Freigabe-Einstellungen privat/Freunde/öffentlich (R2, O3).
|
||||||
|
|
||||||
|
**KTO-05 Konto löschen und Daten exportieren**
|
||||||
|
Als Nutzer möchte ich mein Konto endgültig löschen und vorher meine Daten exportieren können, damit ich meine Rechte nach DSGVO wahrnehmen kann.
|
||||||
|
- AK: 5 Kriterien (§ KTO-05) + Querschnitt Datenschutz Kriterium 3.
|
||||||
|
- Nicht im Scope: Daten-Import aus dem Export, Konto pausieren.
|
||||||
|
- Schnittvorschlag: KTO-05a Konto löschen (Krit. 1–3) · KTO-05b Datenexport (Krit. 4–5).
|
||||||
|
|
||||||
|
### KAT – Spielekatalog
|
||||||
|
|
||||||
|
**KAT-01 Spiele suchen**
|
||||||
|
Als Nutzer (auch ohne Anmeldung, O6) möchte ich Spiele nach Titel und Verlag suchen und nach Spielerzahl, Dauer und Alter filtern, damit ich ein Spiel schnell finde oder neue entdecke.
|
||||||
|
- AK: 8 Kriterien (§ KAT-01); Kriterium 8 ist unvollständig formuliert (siehe Frage 12).
|
||||||
|
- Nicht im Scope: Barcode-Suche, Offline-Katalog (O7), Empfehlungen.
|
||||||
|
|
||||||
|
**KAT-02 Spieldetailseite**
|
||||||
|
Als Nutzer möchte ich alle Eckdaten eines Spiels auf einer Seite sehen und von dort meinen Listenstatus ändern, damit ich entscheiden kann, ob und wo ich es eintrage.
|
||||||
|
- AK: 6 Kriterien (§ KAT-02).
|
||||||
|
- Nicht im Scope: Reviews (COM, R3), Zubehör/Sleeves (ZUB).
|
||||||
|
|
||||||
|
**KAT-03 Erweiterungen und Editionen**
|
||||||
|
Als Sammler möchte ich Erweiterungen dem Basisspiel zugeordnet sehen und die Edition wählen, die ich besitze, damit meine Sammlung genau abbildet, was im Regal steht.
|
||||||
|
- AK: 5 Kriterien (§ KAT-03).
|
||||||
|
- Nicht im Scope: Mehrfachbesitz derselben Edition (O8), mehrsprachige Katalogtexte.
|
||||||
|
|
||||||
|
**KAT-04 Fehlendes Spiel melden**
|
||||||
|
Als Nutzer möchte ich ein fehlendes Spiel melden und sofort als vorläufigen privaten Eintrag nutzen, damit mich ein Katalogloch nicht beim Erfassen blockiert.
|
||||||
|
- AK: 5 Kriterien (§ KAT-04).
|
||||||
|
- Nicht im Scope: öffentliche Anzeige gemeldeter Spiele, Bild-Upload zur Meldung (nicht gefordert).
|
||||||
|
|
||||||
|
**KAT-05 Katalogdaten laden und aktuell halten**
|
||||||
|
Als Admin möchte ich Katalogdaten aus zugelassenen Quellen importieren und manuell pflegen, ausblenden, zusammenführen sowie Meldungen bearbeiten, damit der Katalog vollständig und korrekt bleibt.
|
||||||
|
- AK: 6 Kriterien (§ KAT-05).
|
||||||
|
- Nicht im Scope: Admin-Bereich für News-Quellen und Verifizierung (QUE-08, R4).
|
||||||
|
- Schnittvorschlag: KAT-05a Import aus einer Quelle inkl. Fehlerverhalten und Quellenvermerk (Krit. 1–3, 6) · KAT-05b Admin-Pflege: bearbeiten, ausblenden, zusammenführen (Krit. 4) · KAT-05c Meldungen bearbeiten (Krit. 5).
|
||||||
|
|
||||||
|
### SAM – Sammlung & Listen
|
||||||
|
|
||||||
|
**SAM-01 Spiel zur Sammlung hinzufügen**
|
||||||
|
Als Sammler möchte ich ein Spiel aus Suche oder Detailseite mit einem Schritt in meine Sammlung aufnehmen, damit ich meine Sammlung schnell aufbaue.
|
||||||
|
- AK: 4 Kriterien (§ SAM-01).
|
||||||
|
- Nicht im Scope: Mehrfachbesitz (O8), Offline-Hinzufügen (F3).
|
||||||
|
|
||||||
|
**SAM-02 Eigene Angaben pro Spiel**
|
||||||
|
Als Sammler möchte ich Zustand, Kaufdatum, Kaufpreis, Notiz, Standort und Tags je Spiel erfassen, damit ich meine Sammlung verwalten und wiederfinden kann.
|
||||||
|
- AK: 5 Kriterien (§ SAM-02).
|
||||||
|
- Nicht im Scope: andere Währungen als Euro, Fotos des eigenen Exemplars.
|
||||||
|
|
||||||
|
**SAM-03 Sammlung durchsuchen, filtern und sortieren**
|
||||||
|
Als Sammler möchte ich meine Sammlung durchsuchen, filtern und sortieren, damit ich auch bei vielen Spielen das passende finde.
|
||||||
|
- AK: 5 Kriterien (§ SAM-03).
|
||||||
|
- Nicht im Scope: gespeicherte Filter, Teilen der Sammlung.
|
||||||
|
|
||||||
|
**SAM-04 Wunschliste mit Priorität**
|
||||||
|
Als Spieler möchte ich Spiele mit Priorität und Notiz auf eine Wunschliste setzen, damit ich weiß, was ich gern hätte.
|
||||||
|
- AK: 4 Kriterien (§ SAM-04).
|
||||||
|
- Nicht im Scope: Wunschliste teilen, Preisalarme.
|
||||||
|
|
||||||
|
**SAM-05 Einkaufsliste führen**
|
||||||
|
Als Spieler möchte ich geplante Käufe mit Händler, Preis und Link festhalten und die Summe sehen, damit ich meine Einkäufe plane.
|
||||||
|
- AK: 4 Kriterien (§ SAM-05).
|
||||||
|
- Nicht im Scope: Preisvergleich, Händler-Verknüpfung (R4).
|
||||||
|
|
||||||
|
**SAM-06 In die Sammlung übernehmen**
|
||||||
|
Als Spieler möchte ich ein Spiel von der Wunsch- oder Einkaufsliste mit einer Aktion in die Sammlung übernehmen, damit ich nichts doppelt eintippen muss.
|
||||||
|
- AK: 4 Kriterien (§ SAM-06).
|
||||||
|
- Nicht im Scope: Übernahme aus Crowdfunding (KSG-05).
|
||||||
|
|
||||||
|
**SAM-07 BGG-Konto verknüpfen**
|
||||||
|
Als BGG-Nutzer möchte ich meinen BGG-Namen hinterlegen, damit ich meine Sammlung von dort importieren kann.
|
||||||
|
- AK: 5 Kriterien (§ SAM-07).
|
||||||
|
- Nicht im Scope: BGG-Login/Passwort, Anzeige des BGG-Namens für andere (KTO-07, R3), Zurückschreiben nach BGG (F9).
|
||||||
|
|
||||||
|
**SAM-08 Sammlung und Wunschliste aus BGG importieren**
|
||||||
|
Als BGG-Nutzer möchte ich Sammlung und Wunschliste von BGG übernehmen, damit ich meine bestehende Sammlung nicht abtippen muss.
|
||||||
|
- AK: 7 Kriterien (§ SAM-08).
|
||||||
|
- Nicht im Scope: automatischer Hintergrund-Abgleich (F9), Import von Partien (Plays) aus BGG (nicht gefordert).
|
||||||
|
- Schnittvorschlag: SAM-08a Import Sammlung inkl. Zuordnung und Zusammenfassung (Krit. 1–4, 7) · SAM-08b Import Wunschliste · SAM-08c Abbruch, Fehler, Rate-Limit (Krit. 5–6).
|
||||||
|
|
||||||
|
**SAM-09 BGG-Import wiederholen und abgleichen**
|
||||||
|
Als BGG-Nutzer möchte ich einen erneuten Import als Änderungsliste sehen und bestätigen, damit meine Shuffle-Daten nicht ungefragt überschrieben werden.
|
||||||
|
- AK: 6 Kriterien (§ SAM-09).
|
||||||
|
- Nicht im Scope: automatischer Abgleich, Export nach BGG.
|
||||||
|
|
||||||
|
### PAR – Partien & Statistik
|
||||||
|
|
||||||
|
**PAR-01 Partie erfassen**
|
||||||
|
Als Spieler möchte ich eine Partie mit Spiel, Datum, Dauer, Ort und Notiz erfassen, auch ohne Netz, damit ich direkt am Spieltisch nichts vergesse.
|
||||||
|
- AK: 7 Kriterien (§ PAR-01).
|
||||||
|
- Nicht im Scope: Offline-Katalogsuche (O7), Fotos zur Partie, Timer.
|
||||||
|
- Schnittvorschlag: PAR-01a Partie online erfassen (Krit. 1–3) · PAR-01b Offline-Erfassung und Synchronisation (Krit. 4–7).
|
||||||
|
|
||||||
|
**PAR-02 Mitspieler hinzufügen**
|
||||||
|
Als Spieler möchte ich mich und Gäste mit Namen als Mitspieler eintragen, damit die Partie vollständig ist, auch wenn Mitspieler kein Konto haben.
|
||||||
|
- AK: 6 Kriterien (§ PAR-02).
|
||||||
|
- Nicht im Scope: verknüpfte Nutzer und Bestätigung (F11, R2), Gruppenmitglieder (R2).
|
||||||
|
|
||||||
|
**PAR-03 Ergebnis erfassen**
|
||||||
|
Als Spieler möchte ich Punkte, Platzierungen, Sieger sowie kooperative und Team-Ergebnisse erfassen, damit die Statistik stimmt.
|
||||||
|
- AK: 7 Kriterien (§ PAR-03).
|
||||||
|
- Nicht im Scope: Spielerranking (PAR-10, R3), Elo o. Ä.
|
||||||
|
|
||||||
|
**PAR-04 Wertungsbogen je Spiel**
|
||||||
|
Als Spieler möchte ich eigene Wertungskategorien je Spiel anlegen und wiederverwenden, damit die Endabrechnung schnell und fehlerfrei geht.
|
||||||
|
- AK: 5 Kriterien (§ PAR-04).
|
||||||
|
- Nicht im Scope: geteilte Vorlagen im Katalog (O9).
|
||||||
|
|
||||||
|
**PAR-05 Partie bearbeiten und löschen**
|
||||||
|
Als Spieler möchte ich erfasste Partien korrigieren oder löschen, damit Verlauf und Statistik stimmen.
|
||||||
|
- AK: 4 Kriterien (§ PAR-05).
|
||||||
|
- Nicht im Scope: Papierkorb/Wiederherstellen.
|
||||||
|
|
||||||
|
**PAR-06 Partienverlauf**
|
||||||
|
Als Spieler möchte ich meine Partien als filterbare Liste sehen, damit ich nachschauen kann, was ich wann mit wem gespielt habe.
|
||||||
|
- AK: 5 Kriterien (§ PAR-06).
|
||||||
|
- Nicht im Scope: Export einzelner Partien (Export nur über KTO-05).
|
||||||
|
|
||||||
|
**PAR-07 Persönliche Statistik**
|
||||||
|
Als Spieler möchte ich Kennzahlen, Ranglisten und einen Monatsverlauf meiner Partien für einen Zeitraum sehen, damit ich mein Spielverhalten verstehe.
|
||||||
|
- AK: 7 Kriterien (§ PAR-07).
|
||||||
|
- Nicht im Scope: Gruppenstatistik (PAR-09, R2), Ranking (PAR-10, R3).
|
||||||
|
|
||||||
|
**PAR-08 Statistik je Spiel**
|
||||||
|
Als Spieler möchte ich je Spiel Partien, Dauer, Siegquote, Bestwert und häufigste Mitspieler sehen, damit ich meine Entwicklung in einem Spiel verfolge.
|
||||||
|
- AK: 5 Kriterien (§ PAR-08).
|
||||||
|
- Nicht im Scope: Vergleich mit anderen Nutzern.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Umsetzungsreihenfolge und Milestones (Vorschlag)
|
||||||
|
|
||||||
|
Chris hat noch keine Milestones vorgegeben. Vorschlag: ein Milestone **R1** für alle 26 Stories, intern in vier Etappen gegliedert (alternativ als eigene Milestones R1.1 bis R1.4):
|
||||||
|
|
||||||
|
| Etappe | Stories | Begründung |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| R1.1 Fundament | KTO-01, KAT-05 (a: Import), KAT-01, KAT-02, KTO-04 | Ohne Konto und Katalogdaten ist keine andere Story testbar. Querschnitt (Sprachen, Theme, Zustände) entsteht hier mit. |
|
||||||
|
| R1.2 Sammlung | SAM-01, SAM-02, SAM-04, SAM-05, SAM-06, SAM-03, KAT-03, KAT-04, KAT-05 (b/c: Admin), KTO-02 | Kern des Solo-Nutzens; KAT-04 braucht die Admin-Freigabe aus KAT-05. KTO-02 nach KAT-01 wegen Lieblingsspielen. |
|
||||||
|
| R1.3 Partien | PAR-01, PAR-02, PAR-03, PAR-04, PAR-05, PAR-06, PAR-07, PAR-08 | Strikt in dieser Reihenfolge; PAR-01b (Offline) als eigener Block mit hohem Testaufwand. |
|
||||||
|
| R1.4 Abschluss | KTO-05, SAM-07, SAM-08, SAM-09 | KTO-05 erst, wenn alle Datenarten existieren (Export/Löschung vollständig). BGG zuletzt und nur mit Lizenz (S1). |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Offene fachliche Fragen, Widersprüche und Lücken
|
||||||
|
|
||||||
|
### A. Widersprüche zwischen Akzeptanzkriterien und Datenmodell/Migrationen
|
||||||
|
|
||||||
|
1. **SAM-04 Krit. 2 / SAM-06 Krit. 3 / SAM-08 vs. O8 und Migration:** SAM-04 erlaubt ein Spiel gleichzeitig in Sammlung und auf der Wunschliste („andere Edition“). `collection_items` hat aber `unique (owner_id, game_id)` und genau einen Wert `list`, also ein Spiel nur in einer der drei Listen. Annahme 7 spricht nur von „höchstens einmal in der Sammlung“. Was gilt: Darf ein Spiel gleichzeitig in Sammlung, Wunsch- und Einkaufsliste stehen?
|
||||||
|
2. **SAM-02 / SAM-04 / SAM-05 vs. Datenmodell:** Zustand, Kaufpreis, Standort, Tags (SAM-02), Priorität (SAM-04), Händler, geplanter Preis, Link (SAM-05) fehlen im Modell. Datenmodell-Entscheidung 3 sagt „Preis und Laden können später ergänzt werden“ – gehören sie in R1 (laut Akzeptanzkriterien ja) oder werden die Kriterien gekürzt?
|
||||||
|
3. **KAT-01 Krit. 2 vs. Datenmodell:** Suche nach deutschem und englischem Titel – das Modell hat nur `title` und „eine Sprache je Spiel in R1“. Sind alternative Titel in R1 gefordert?
|
||||||
|
4. **KAT-01 Krit. 3 / KAT-02 Krit. 1:** Verlag ist gefordert, im Modell gibt es kein Verlagsfeld.
|
||||||
|
5. **KAT-03 Krit. 1 und 4:** Erweiterung ↔ Basisspiel ist gefordert, im Modell gibt es keine solche Beziehung (nur Varianten). Ist eine Erweiterung ein eigenes Spiel mit Verweis auf das Basisspiel?
|
||||||
|
6. **KAT-04:** Für Meldungen (Status offen/freigegeben/abgelehnt/zusammengeführt, Link, Verweis auf Zieleintrag) gibt es keine Tabelle. Bitte bestätigen, dass dies in R1 neu dazukommt (Umsetzung: architect).
|
||||||
|
7. **KAT-05 Krit. 4 und 6:** „Ausblenden“, „manuell gepflegte Felder“ und „Erlaubnis je Quelle“ sind im Modell nicht abgebildet.
|
||||||
|
8. **KTO-02 Krit. 6:** Genres im Profil – im Modell nur Lieblingsspiele, keine Profil-Genres. Ist die „feste Liste“ dieselbe Genre-Liste wie im Katalog?
|
||||||
|
9. **KTO-04 Krit. 1 / Annahme 2 vs. Datenmodell:** Akzeptanzkriterien sagen „in R1 ist alles privat“, das Datenmodell sagt „alles privat außer der Stadt im Profil“ und erlaubt Fremden das Lesen von Anzeigename, Avatar und Stadt. Zudem ist KTO-03 (Wohnort) R2. Gehört die Stadt überhaupt in R1, und was zeigt der Hinweis in KTO-04?
|
||||||
|
10. **KTO-05 Krit. 2 vs. Datenmodell-Entscheidung 2:** Akzeptanzkriterium: Partien und Gast-Namen werden gelöscht. Datenmodell: Partien bleiben für andere Mitspieler erhalten („Gelöschter Nutzer“). Für R1 (keine verknüpften Mitspieler) bitte klarstellen: Werden die eigenen Partien des Gelöschten vollständig gelöscht? Ebenso: Was passiert mit seinen privaten Katalogeinträgen und offenen Meldungen (KAT-04)?
|
||||||
|
11. **PAR-01 Krit. 1 / PAR-06 Krit. 2:** Ort einer Partie fehlt im Modell (`plays` hat kein Ort-Feld). **PAR-02 Krit. 3 und 6:** Eine Gästeliste mit Umbenennen über alle Partien setzt eine eigene Gast-Liste voraus, das Modell speichert Gäste nur als Text je Partie. **PAR-03 Krit. 4 und 5:** Kooperativ und Teams fehlen im Modell.
|
||||||
|
12. **SAM-08 Krit. 4 vs. Datenmodell:** Akzeptanzkriterium: fehlende BGG-Spiele landen in „nicht gefunden“ und können gemeldet werden. Datenmodell: Import legt fehlende Spiele automatisch als private Einträge an. Was gilt?
|
||||||
|
|
||||||
|
### B. Unklare oder nicht testbare Kriterien
|
||||||
|
|
||||||
|
13. **KAT-01 Krit. 8** ist unvollständig (kein Wenn/Dann) und nennt Genre als Filter, der in Krit. 4 fehlt. Gewünschte Filter: Spielerzahl, Dauer, Alter, Genre – auch Mechanik/Kategorie? Funktioniert der Filter auch ohne Suchbegriff (Entdecken)?
|
||||||
|
14. **KAT-01 Krit. 7:** Was ist eine „normale Verbindung“ (Messbedingung für 2 s)?
|
||||||
|
15. **KAT-04 Krit. 2:** Ab wann ist ein Eintrag „sehr ähnlich“ (gleicher Titel, Titel + Jahr …)?
|
||||||
|
16. **SAM-03 Krit. 4:** „Flüssig“ ist nicht messbar – Zielwert (z. B. Filterergebnis in x ms)?
|
||||||
|
17. **SAM-04 Krit. 4 / SAM-05 Krit. 4 / SAM-06 Krit. 4:** „Einige Sekunden“ – konkreter Wert?
|
||||||
|
18. **KTO-01 Krit. 7:** Ab wie vielen Fehlversuchen und für wie lange wird gebremst? **Krit. 8:** Gültigkeit des Reset-Links? Gilt auch für den Bestätigungslink aus Krit. 1 eine Frist?
|
||||||
|
19. **KTO-04 Krit. 2** betrifft künftige Releases und ist in R1 nicht testbar. Als Regel ins Anforderungsdokument verschieben?
|
||||||
|
20. **KTO-05:** Konkrete Löschfrist (Krit. 2)? Format JSON oder CSV oder beides (Krit. 4)? Gehören Wertungsbögen, Gästeliste, Avatar und private Katalogeinträge in den Export? Wie erfährt der Nutzer, dass der Export fertig ist (E-Mail, In-App)? Wie lange ist er abrufbar (Krit. 5)? Krit. 3: Ist die Neuregistrierung mit derselben E-Mail sofort möglich oder erst nach Ablauf der Löschfrist?
|
||||||
|
21. **KTO-01 / QUE-04:** Liegen Datenschutzerklärung und Nutzungsbedingungen (inkl. Löschfrist) vor, und gibt es einen Termin für die rechtliche Prüfung des Mindestalters 16 (F8)? Gibt es in R1 überhaupt optionale Dienste wie Nutzungsanalyse (QUE-04 Krit. 2)?
|
||||||
|
|
||||||
|
### C. Fachliche Lücken je Story
|
||||||
|
|
||||||
|
22. **KTO-01:** Gelten für den Anzeigenamen bei der Registrierung dieselben Regeln wie in KTO-02 (1–30 Zeichen)? Gibt es eine eigene Story für Abmelden und E-Mail-Adresse/Passwort ändern (bei angemeldetem Nutzer)? Aktuell nicht gefordert.
|
||||||
|
23. **KTO-02 Krit. 5:** Dürfen vorläufige private Spiele (KAT-04) Lieblingsspiele sein? Wie wird die Reihenfolge geändert?
|
||||||
|
24. **KAT-02 Krit. 5 / KAT-05 Krit. 6:** Welche Datenquelle(n) außer BGG sind für R1 „zugelassen“? Falls die BGG-Lizenz nicht kommt: Woher kommen Katalogdaten, Cover und Beschreibungen zum Start (Handpflege, Seed, andere Quelle)? Das ist für R1 kritisch.
|
||||||
|
25. **KAT-05 Krit. 4–5:** Gibt es in R1 einen Admin-Bereich in der App (QUE-08 ist sonst R4) oder reicht Pflege über ein internes Werkzeug? Wer ist Admin (nur Chris)?
|
||||||
|
26. **KAT-04 Krit. 5:** Wie erfährt der Nutzer von Freigabe/Ablehnung/Zusammenführung? Benachrichtigungen (QUE-01) sind erst R2 – reicht ein Hinweis in der App? Was passiert mit dem vorläufigen Eintrag bei Ablehnung ohne Zieleintrag?
|
||||||
|
27. **KAT-04 / Moderation:** Gemeldete Titel und Links sind Nutzerinhalte. Prüft Chris jede Meldung manuell? Gibt es ein Limit gegen Spam-Meldungen?
|
||||||
|
28. **KAT-03 Krit. 3:** Ist die Wahl der Edition Pflicht oder optional? Gilt die Editionswahl auch für Wunsch-/Einkaufsliste und Partien (Modell hat `variant_id` in `plays`)?
|
||||||
|
29. **SAM-02 Krit. 1:** Welche Werte hat die feste Zustandsliste? Werden Tags/Standorte verwaltet (umbenennen, löschen)?
|
||||||
|
30. **SAM-03:** Sind Wunsch- und Einkaufsliste ebenfalls durchsuchbar/filterbar? Krit. 5 nennt den BGG-Import – welcher Leerzustand gilt ohne Lizenz?
|
||||||
|
31. **SAM-05 Krit. 2:** Summe nur über Einträge mit Preis? Krit. 3: Was passiert, wenn der Nutzer nach „gekauft“ die Übernahme ablehnt – bleibt das Spiel als „gekauft“ markiert auf der Liste oder wird es entfernt?
|
||||||
|
32. **SAM-06 Krit. 2:** Wenn das Spiel in der Sammlung schon eine Notiz hat (Krit. 3), was passiert mit der Listen-Notiz?
|
||||||
|
33. **SAM-07 Krit. 1:** Darf es nur eine BGG-Verknüpfung je Konto geben (Modell: ja)? Darf derselbe BGG-Name von mehreren Shuffle-Konten verknüpft werden?
|
||||||
|
34. **SAM-08 Krit. 2:** Welche BGG-Status zählen (owned, want to buy, want to play, wishlist mit Priorität 1–5, preordered)? Wie wird die BGG-Wunschlistenpriorität auf hoch/mittel/niedrig abgebildet? Was geschieht, wenn ein Spiel bei BGG zugleich besessen und gewünscht ist? Werden Erweiterungen importiert?
|
||||||
|
35. **SAM-09 Krit. 1 und 6:** Was zählt als „in Shuffle selbst hinzugefügt“ – auch Spiele, die importiert und danach manuell geändert wurden? Ist die Hervorhebung (Krit. 6) dauerhaft in der Sammlung oder nur im Abgleichsdialog?
|
||||||
|
36. **PAR-01:** Datum mit oder ohne Uhrzeit (Modell: Zeitstempel)? Sind private Spiele (KAT-04) und Spiele von der Wunschliste wählbar? Was gilt bei widersprüchlichen Änderungen, wenn eine Partie offline auf zwei Geräten bearbeitet wurde (PAR-05 Krit. 4)? Werden nicht synchronisierte Partien schon in Verlauf und Statistik gezählt? Funktionieren Gastvorschläge (PAR-02) und Wertungsbögen (PAR-04) offline? Bei Web: Gilt Offline-Erfassung auch im Browser (F7 vs. F3)?
|
||||||
|
37. **PAR-02 Krit. 1:** Wenn ich mich als Mitspieler entferne – zählt die Partie in meiner Statistik (Anzahl, Spielzeit, Siegquote)? Krit. 4: Ist der Namensvergleich unabhängig von Groß-/Kleinschreibung, und darf ein Gast so heißen wie ich? Kann ich Gäste aus der Gästeliste löschen, und was passiert dann mit bisherigen Partien? Gibt es eine Längenbegrenzung für Gastnamen?
|
||||||
|
38. **PAR-03:** Zählt ein kooperativer Sieg in der Siegquote (PAR-07 Krit. 2 spricht nur von Platz 1)? Bei Teams: Punkte je Team oder je Person mit Summe? Ist bei niedrigster Punktzahl gewinnt (z. B. Golf-artige Spiele) eine Umkehr der Platzierung nötig?
|
||||||
|
39. **PAR-04:** Mehrere Wertungsbögen je Spiel erlaubt? Darf man Kategorien löschen, und wie wird eine Partie mit gelöschter Kategorie angezeigt (Krit. 3)? Gibt es Minus-Kategorien?
|
||||||
|
40. **PAR-07:** Siegquote bei Partien ohne mich als Mitspieler (siehe 37)? Diagramm „Partien pro Monat“ – für welchen Zeitraum bei „gesamt“? Zählt die Spielzeit einer Partie voll, auch wenn ich nicht mitgespielt habe?
|
||||||
|
41. **PAR-08 Krit. 2:** Bestwert = meine höchste Punktzahl oder höchste Punktzahl aller Mitspieler in meinen Partien? Gilt „höchster Wert ist am besten“ immer? Krit. 4: Zählen Gäste zu den häufigsten Mitspielern (in R1 gibt es nur Gäste)?
|
||||||
|
|
||||||
|
### D. Querschnitt und fehlende Stories
|
||||||
|
|
||||||
|
42. **Startseite/Dashboard (F18):** Für R1 ist ein persönliches Dashboard entschieden (zuletzt gespielt, Wunschliste, nächste Termine), aber keine der 26 Stories deckt es ab. Eigene Story in R1 oder später?
|
||||||
|
43. **Einstellungen:** Sprachwechsel (QUE-05 Krit. 1), Abmelden, Privatsphäre-Hinweis (KTO-04), Konto löschen hängen an einem Einstellungsbereich, der keine eigene Story hat. Als Teil von KTO-04 schneiden oder eigene Story?
|
||||||
|
44. **Admin-Rolle:** Rollen und Rechte (QUE-07) und Admin-Bereich (QUE-08) sind nicht als R1-Story geschnitten, werden aber von KAT-04/KAT-05 vorausgesetzt.
|
||||||
|
45. **Benachrichtigungen:** E-Mails in R1 (Bestätigung, Reset, Export fertig, ggf. Meldungsergebnis) – reichen Systemmails, Sprache der Mails nach Profil-`locale`?
|
||||||
|
46. **Barrierefreiheit:** Wie werden Diagramme (PAR-07 Krit. 5) für Screenreader zugänglich gemacht (z. B. Tabelle als Alternative)? Fachlich zu bestätigen.
|
||||||
|
47. **Jugendschutz:** Reicht für R1 die Selbstbestätigung „mindestens 16“ ohne weitere Prüfung (Datenmodell sagt ja, F8 nennt eine rechtliche Prüfung vor dem Start)?
|
||||||
|
48. **Mehrsprachigkeit Katalog:** Katalogtexte haben eine Sprache je Spiel; wie wird z. B. eine englische Beschreibung in der deutschen Oberfläche gekennzeichnet? Genre/Mechanik/Kategorie sind zweisprachig (passt).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Abweichungen
|
||||||
|
|
||||||
|
- Es sind **genau 26 Stories**, wie im Quelldokument angegeben (KTO-01, -02, -04, -05; KAT-01 bis -05; SAM-01 bis -09; PAR-01 bis -08). Keine Abweichung in der Anzahl.
|
||||||
|
- Fünf Stories (KTO-01, KTO-05, KAT-05, SAM-08, PAR-01) sind XL und überschreiten die INVEST-Größe von 1–3 Tagen. Für alle fünf liegt ein Schnittvorschlag vor. Werden alle Schnitte übernommen, entstehen 34 statt 26 Issues (21 ungeteilte + 13 Teil-Stories); die Story-IDs bleiben mit Suffix a/b/c erhalten.
|
||||||
|
- 25 von 26 Stories hätten wegen offener Fragen das Label `needs-clarification`.
|
||||||
Loading…
Reference in a new issue