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

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

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

82 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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

# 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. |