[KAT-05] Katalogdaten laden und aktuell halten #2

Open
opened 2026-11-02 13:39:10 +00:00 by cschlaefke · 8 comments
Owner

Story

Als Admin
möchte ich den Katalog manuell pflegen, Einträge ausblenden und zusammenführen sowie Meldungen bearbeiten – und später Daten aus zugelassenen Quellen importieren,
damit der Katalog vollständig und korrekt bleibt.

Akzeptanzkriterien

Quelle: requirements/20-r1-akzeptanzkriterien.md § KAT-05 (Referenz in Tests/PR: „KAT-05 Kriterium n“), Stand 2026-11-02 inkl. Klärungen und N11

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

  • 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.
  • 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).
  • 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.
  • 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. (neu) 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).

Querschnitt

Es gelten alle Querschnittskriterien aus 20-r1-akzeptanzkriterien.md § „Querschnitt für R1“ (Datenschutz QUE-04, Sicherheit der Daten, Sprachen QUE-05, Barrierefreiheit QUE-06, Zustände/Fehler/Netz, Plattformen).
Besonders relevant: Sicherheit der Daten Kriterium 2 (Katalog ohne Anmeldung lesbar, nie durch Nutzer veränderbar; Entscheidung O6), Sicherheit der Daten Kriterium 3.

Nicht im Scope

  • Admin-Oberfläche in der App (QUE-08, R4; Klärung 44)
  • Admin-Bereich für News-Quellen und Verifizierung (QUE-08, R4)
  • Import-Job aus BGG oder einer anderen Quelle in R1 (Klärung 24) – Kriterien 1, 2 (Quellenteil), 3, 6 erst mit Lizenz
  • Fremde Cover und Beschreibungstexte im Startbestand (N11)

Klärungen

Verbindlich laut requirements/r1-klaerungen.md (2026-11-02):

  • 6: Neue Tabelle für Meldungen (Status offen/freigegeben/abgelehnt/zusammengeführt, Link, Verweis auf Zieleintrag) → Kriterium 5.
  • 7: Flag „ausgeblendet“, Kennzeichnung manuell gepflegter Felder und Erlaubnis je Quelle schon in R1 modellieren → Kriterien 2, 4, 6.
  • 24: Katalog zum Start nur manuell gepflegt, kein Import-Job bis BGG-Lizenz; R1.1 braucht manuelle Pflege und Startbestand → Kriterien 1–3, 6 zurückgestellt, Kriterium 7 neu.
  • 25/44: Keine Admin-Story; Pflege über Supabase Studio/SQL, Admin-Rolle nur als DB-Rolle (RLS); Ablauf im Repo dokumentieren → Kriterien 4, 5, 8, 9.
  • N11: 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 → Kriterien 7, 10.

Offene Fragen

Keine.

Planung

  • Epic: KAT Spielekatalog
  • Priorität: Must
  • Größe: XL (durch Zurückstellung des Imports in R1 voraussichtlich kleiner; Neubewertung in der Spec)
  • Etappe: R1.1 Fundament (Datenmodell, Startbestand, Kriterien 2, 7, 9, 10); Admin-Pflege und Meldungen (Kriterien 4, 5, 8) in R1.2 Sammlung; Import erst mit Lizenz
  • Abhängigkeiten: keine (Fundament)

Mögliche Schnitte für die Spec

  • KAT-05a Datenmodell inkl. Import-Vorbereitung, Rechte/Admin-Rolle und Startbestand (Kriterien 2, 7, 9, 10)
  • KAT-05b Admin-Pflege per Studio: bearbeiten, ausblenden, zusammenführen, Dokumentation (Kriterien 4, 8)
  • KAT-05c Meldungen bearbeiten (Kriterium 5)
  • später: KAT-05d Import aus einer Quelle (Kriterien 1, 3, 6), sobald Lizenz vorliegt

Referenzen

  • Akzeptanzkriterien: requirements/20-r1-akzeptanzkriterien.md § KAT-05
  • Klärungen: requirements/r1-klaerungen.md (inkl. N11)
  • Story-Entwurf: requirements/r1-story-entwurf.md (freigegeben 2026-11-02)
  • Backlog: requirements/backlog.md
## Story **Als** Admin **möchte ich** den Katalog manuell pflegen, Einträge ausblenden und zusammenführen sowie Meldungen bearbeiten – und später Daten aus zugelassenen Quellen importieren, **damit** der Katalog vollständig und korrekt bleibt. ## Akzeptanzkriterien Quelle: `requirements/20-r1-akzeptanzkriterien.md` § KAT-05 (Referenz in Tests/PR: „KAT-05 Kriterium n“), Stand 2026-11-02 inkl. Klärungen und N11 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). - **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. - [ ] **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). - **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. - [ ] **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.** *(neu)* 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). ## Querschnitt Es gelten alle Querschnittskriterien aus `20-r1-akzeptanzkriterien.md` § „Querschnitt für R1“ (Datenschutz QUE-04, Sicherheit der Daten, Sprachen QUE-05, Barrierefreiheit QUE-06, Zustände/Fehler/Netz, Plattformen). Besonders relevant: **Sicherheit der Daten Kriterium 2** (Katalog ohne Anmeldung lesbar, nie durch Nutzer veränderbar; Entscheidung O6), Sicherheit der Daten Kriterium 3. ## Nicht im Scope - Admin-Oberfläche in der App (QUE-08, R4; Klärung 44) - Admin-Bereich für News-Quellen und Verifizierung (QUE-08, R4) - Import-Job aus BGG oder einer anderen Quelle in R1 (Klärung 24) – Kriterien 1, 2 (Quellenteil), 3, 6 erst mit Lizenz - Fremde Cover und Beschreibungstexte im Startbestand (N11) ## Klärungen Verbindlich laut `requirements/r1-klaerungen.md` (2026-11-02): - **6:** Neue Tabelle für Meldungen (Status offen/freigegeben/abgelehnt/zusammengeführt, Link, Verweis auf Zieleintrag) → Kriterium 5. - **7:** Flag „ausgeblendet“, Kennzeichnung manuell gepflegter Felder und Erlaubnis je Quelle schon in R1 modellieren → Kriterien 2, 4, 6. - **24:** Katalog zum Start nur manuell gepflegt, kein Import-Job bis BGG-Lizenz; R1.1 braucht manuelle Pflege und Startbestand → Kriterien 1–3, 6 zurückgestellt, Kriterium 7 neu. - **25/44:** Keine Admin-Story; Pflege über Supabase Studio/SQL, Admin-Rolle nur als DB-Rolle (RLS); Ablauf im Repo dokumentieren → Kriterien 4, 5, 8, 9. - **N11:** 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 → Kriterien 7, 10. ## Offene Fragen Keine. ## Planung - Epic: KAT Spielekatalog - Priorität: Must - Größe: XL (durch Zurückstellung des Imports in R1 voraussichtlich kleiner; Neubewertung in der Spec) - Etappe: R1.1 Fundament (Datenmodell, Startbestand, Kriterien 2, 7, 9, 10); Admin-Pflege und Meldungen (Kriterien 4, 5, 8) in R1.2 Sammlung; Import erst mit Lizenz - Abhängigkeiten: keine (Fundament) ## Mögliche Schnitte für die Spec - KAT-05a Datenmodell inkl. Import-Vorbereitung, Rechte/Admin-Rolle und Startbestand (Kriterien 2, 7, 9, 10) - KAT-05b Admin-Pflege per Studio: bearbeiten, ausblenden, zusammenführen, Dokumentation (Kriterien 4, 8) - KAT-05c Meldungen bearbeiten (Kriterium 5) - später: KAT-05d Import aus einer Quelle (Kriterien 1, 3, 6), sobald Lizenz vorliegt ## Referenzen - Akzeptanzkriterien: `requirements/20-r1-akzeptanzkriterien.md` § KAT-05 - Klärungen: `requirements/r1-klaerungen.md` (inkl. N11) - Story-Entwurf: `requirements/r1-story-entwurf.md` (freigegeben 2026-11-02) - Backlog: `requirements/backlog.md`
cschlaefke added the
type/story
prio/must
needs-clarification
epic/katalog
size/xl
labels 2026-11-02 13:39:10 +00:00
cschlaefke added a new dependency 2026-11-02 13:43:02 +00:00
cschlaefke added a new dependency 2026-11-02 13:43:22 +00:00
cschlaefke added a new dependency 2026-11-02 13:43:45 +00:00
Author
Owner

Offene fachliche Fragen aus requirements/r1-story-entwurf.md, Abschnitt 5 (Nummerierung wie im Entwurf). Bitte hier beantworten; nach Klärung wird needs-clarification entfernt.

Frage 7: KAT-05 Krit. 4 und 6: „Ausblenden“, „manuell gepflegte Felder“ und „Erlaubnis je Quelle“ sind im Modell nicht abgebildet.

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

Frage 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)?

**Offene fachliche Fragen** aus `requirements/r1-story-entwurf.md`, Abschnitt 5 (Nummerierung wie im Entwurf). Bitte hier beantworten; nach Klärung wird `needs-clarification` entfernt. **Frage 7:** KAT-05 Krit. 4 und 6: „Ausblenden“, „manuell gepflegte Felder“ und „Erlaubnis je Quelle“ sind im Modell nicht abgebildet. **Frage 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. **Frage 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)?
cschlaefke added this to the R1 milestone 2026-11-02 13:53:35 +00:00
Author
Owner

Klärungen eingearbeitet (2026-11-02): Fragen 6, 7, 24, 25/44 laut requirements/r1-klaerungen.md. Kriterien 1, 3, 6 und der Quellenteil von 2 sind bis zur Lizenz zurückgestellt (Datenmodell aber schon in R1). Kriterien 4 und 5 laufen über Supabase Studio/SQL. Neu sind Kriterium 7 (Startbestand), 8 (Ablauf im Repo dokumentiert) und 9 (nur die DB-Rolle Admin darf ändern).

Neue offene Frage (Label needs-clarification bleibt):

  • N11 – Startbestand des Katalogs: Klärung 24 verlangt für R1.1 einen manuell gepflegten Startbestand. Wie viele und welche Spiele soll er umfassen? Wer pflegt ihn ein? Und woher kommen Cover, Beschreibungen und Genres/Mechaniken ohne BGG-Lizenz, also mit welchen Bild- und Textrechten (eigene Texte, Verlagsmaterial mit Erlaubnis, nur ohne Cover)?
Klärungen eingearbeitet (2026-11-02): Fragen 6, 7, 24, 25/44 laut `requirements/r1-klaerungen.md`. Kriterien 1, 3, 6 und der Quellenteil von 2 sind bis zur Lizenz zurückgestellt (Datenmodell aber schon in R1). Kriterien 4 und 5 laufen über Supabase Studio/SQL. Neu sind Kriterium 7 (Startbestand), 8 (Ablauf im Repo dokumentiert) und 9 (nur die DB-Rolle Admin darf ändern). **Neue offene Frage (Label `needs-clarification` bleibt):** - **N11 – Startbestand des Katalogs:** Klärung 24 verlangt für R1.1 einen manuell gepflegten Startbestand. Wie viele und welche Spiele soll er umfassen? Wer pflegt ihn ein? Und woher kommen Cover, Beschreibungen und Genres/Mechaniken ohne BGG-Lizenz, also mit welchen Bild- und Textrechten (eigene Texte, Verlagsmaterial mit Erlaubnis, nur ohne Cover)?
cschlaefke removed the
needs-clarification
label 2026-11-02 15:09:27 +00:00
Author
Owner

Klärungen N11 eingearbeitet (2026-11-02)

  • N11: Startbestand ca. 200 Spiele, von Chris per Supabase Studio/Seed gepflegt; nur Fakten, keine fremden Cover oder Beschreibungstexte (Platzhalter-Cover, eigene Kurztexte).
    • Kriterium 7 konkretisiert (Umfang und wer pflegt).
    • Kriterium 10 neu (nur Fakten, Platzhalter-Cover, eigener Kurztext).
  • Abschnitt „Offene Fragen“: keine mehr. Label needs-clarification entfernt.

Quelle: requirements/r1-klaerungen.md, Abschnitt „Neue Fragen aus dem Einarbeiten (N1–N14)“.

Klärungen N11 eingearbeitet (2026-11-02) - **N11:** Startbestand ca. 200 Spiele, von Chris per Supabase Studio/Seed gepflegt; nur Fakten, keine fremden Cover oder Beschreibungstexte (Platzhalter-Cover, eigene Kurztexte). - Kriterium 7 konkretisiert (Umfang und wer pflegt). - Kriterium 10 neu (nur Fakten, Platzhalter-Cover, eigener Kurztext). - Abschnitt „Offene Fragen“: keine mehr. Label `needs-clarification` entfernt. Quelle: `requirements/r1-klaerungen.md`, Abschnitt „Neue Fragen aus dem Einarbeiten (N1–N14)“.
Author
Owner

Spec-Entwurf liegt vor: docs/specs/2-katalog-daten.md (Branch docs/2-kat05-spec, Commit 34eaab1, noch kein PR).

Kurzfassung:

  • Drei PRs: 2a (R1.1) Datenmodell, Rechte, Startbestand-Werkzeug, Platzhalter-Cover; 2b (R1.2) Zusammenführen und Runbook; 2c (R1.2) Meldungstabelle game_reports und Bearbeiten von Meldungen. 2c muss vor der Umsetzung von #13 gemergt sein.
  • Die Größe ist neu bewertet: L statt XL. Das Label ändert nur Chris.
  • Ausblenden (hidden_at) und Zusammenführen (merged_into_id) ändern RLS nicht. „Nicht auffindbar“ läuft über die neue View catalog_games.
  • Manuell gepflegte Felder markiert ein Trigger automatisch in games.manual_fields. Für Quellen gibt es die Tabelle catalog_sources mit Anzeige-Erlaubnis je Quelle.
  • Verlage kommen schon in diese Spec, weil der Startbestand sie braucht.
  • Der Startbestand wird keine Migration, sondern eine versionierte, idempotente SQL-Datei. Sie wird lokal per db.seed, auf Staging und Produktion per Studio/psql eingespielt.
  • In R1 hat kein App-Konto die Admin-Rolle. Pflege läuft nur über Studio als postgres. Studio ist nur per Tunnel/VPN erreichbar.

Offene Fragen an Chris: F1–F9 in § 9.2 der Spec, jeweils mit Optionen und Empfehlung. Es geht um Kollisionen beim Zusammenführen, die Sichtbarkeit ausgeblendeter Einträge, das Umhängen bei Meldungen, die Kennzeichnung des Startbestands, Kurztexte, das Pflegeformat, die Herkunft der Fakten (Datenbankrecht), Umfang und Vokabular sowie das Platzhalter-Cover.

Implementiert wird erst nach Freigabe.

**Spec-Entwurf liegt vor:** [`docs/specs/2-katalog-daten.md`](https://git.cshomelabs.work/cschlaefke/Shuffle/src/branch/docs/2-kat05-spec/docs/specs/2-katalog-daten.md) (Branch `docs/2-kat05-spec`, Commit 34eaab1, noch kein PR). Kurzfassung: - Drei PRs: **2a (R1.1)** Datenmodell, Rechte, Startbestand-Werkzeug, Platzhalter-Cover; **2b (R1.2)** Zusammenführen und Runbook; **2c (R1.2)** Meldungstabelle `game_reports` und Bearbeiten von Meldungen. 2c muss vor der Umsetzung von #13 gemergt sein. - Die Größe ist neu bewertet: **L statt XL**. Das Label ändert nur Chris. - Ausblenden (`hidden_at`) und Zusammenführen (`merged_into_id`) ändern RLS nicht. „Nicht auffindbar“ läuft über die neue View `catalog_games`. - Manuell gepflegte Felder markiert ein Trigger automatisch in `games.manual_fields`. Für Quellen gibt es die Tabelle `catalog_sources` mit Anzeige-Erlaubnis je Quelle. - Verlage kommen schon in diese Spec, weil der Startbestand sie braucht. - Der Startbestand wird keine Migration, sondern eine versionierte, idempotente SQL-Datei. Sie wird lokal per `db.seed`, auf Staging und Produktion per Studio/psql eingespielt. - In R1 hat kein App-Konto die Admin-Rolle. Pflege läuft nur über Studio als `postgres`. Studio ist nur per Tunnel/VPN erreichbar. **Offene Fragen an Chris: F1–F9** in § 9.2 der Spec, jeweils mit Optionen und Empfehlung. Es geht um Kollisionen beim Zusammenführen, die Sichtbarkeit ausgeblendeter Einträge, das Umhängen bei Meldungen, die Kennzeichnung des Startbestands, Kurztexte, das Pflegeformat, die Herkunft der Fakten (Datenbankrecht), Umfang und Vokabular sowie das Platzhalter-Cover. Implementiert wird erst nach Freigabe.
cschlaefke added the
status/spec-review
label 2026-11-03 13:02:41 +00:00
Author
Owner

Stand 2026-11-03: Chris hat die Spec (PR #51) freigegeben und F1–F9 wie empfohlen entschieden. Der Review von PR #51 hat einen Blocker ergeben (Varianten privater Spiele würden beim Freigeben einer Meldung öffentlich). Entscheidung von Chris: Varianten werden nicht in den Katalog kopiert, Verweise werden auf die gleichnamige Zielvariante abgebildet, sonst auf null. Außerdem: Alle PRs zu #2 verweisen nur mit Refs #2; Chris schließt #2 nach der Go-live-Prüfung (C1) und KAT-02 (#4). Die Spec wird entsprechend überarbeitet.

Stand 2026-11-03: Chris hat die Spec (PR #51) freigegeben und F1–F9 wie empfohlen entschieden. Der Review von PR #51 hat einen Blocker ergeben (Varianten privater Spiele würden beim Freigeben einer Meldung öffentlich). Entscheidung von Chris: Varianten werden nicht in den Katalog kopiert, Verweise werden auf die gleichnamige Zielvariante abgebildet, sonst auf null. Außerdem: Alle PRs zu #2 verweisen nur mit `Refs #2`; Chris schließt #2 nach der Go-live-Prüfung (C1) und KAT-02 (#4). Die Spec wird entsprechend überarbeitet.
Author
Owner

Bestätigungen von Chris (2026-11-03) zur Spec in PR #51 (Spec § 9.3), nach dem Re-Review (APPROVE mit Textauflagen):

  • W1 Anzeige-Erlaubnis: Daten ohne Erlaubnis einer Quelle werden gar nicht gespeichert (Pflicht für die Import-Spec); die View catalog_games ist nur die zweite Sicherung. Bestätigt.
  • W6 admin_merge_games überträgt bgg_id/source_* aufs Ziel, wenn es keine hat; bei Konflikt bgg_id_conflict mit den alten Werten. Bestätigt.
  • W7 Import-Ausnahme nur für Rolle catalog_importer und nur mit set local. Bestätigt.
  • W4/H1/H2/H7 Startbestand-Schlüssel unveränderlich, Entfernen nur über hidden; Admin-Funktionen nur postgres/supabase_admin (auch service_role ohne execute); on delete restrict für merged_into_id, target_game_id, catalog_source_id. Bestätigt.
  • Trigger: Änderung von visibility an bestehenden games-Zeilen wird per Trigger abgelehnt, zusätzlich Runbook-Regel.
  • KAT-04 Krit. 4: Die Einschränkung (Edition kann beim Umhängen verloren gehen) wird als neue Klärung in requirements/r1-klaerungen.md festgehalten.
Bestätigungen von Chris (2026-11-03) zur Spec in PR #51 (Spec § 9.3), nach dem Re-Review (APPROVE mit Textauflagen): - **W1** Anzeige-Erlaubnis: Daten ohne Erlaubnis einer Quelle werden gar nicht gespeichert (Pflicht für die Import-Spec); die View `catalog_games` ist nur die zweite Sicherung. Bestätigt. - **W6** `admin_merge_games` überträgt `bgg_id`/`source_*` aufs Ziel, wenn es keine hat; bei Konflikt `bgg_id_conflict` mit den alten Werten. Bestätigt. - **W7** Import-Ausnahme nur für Rolle `catalog_importer` und nur mit `set local`. Bestätigt. - **W4/H1/H2/H7** Startbestand-Schlüssel unveränderlich, Entfernen nur über `hidden`; Admin-Funktionen nur `postgres`/`supabase_admin` (auch `service_role` ohne `execute`); `on delete restrict` für `merged_into_id`, `target_game_id`, `catalog_source_id`. Bestätigt. - **Trigger:** Änderung von `visibility` an bestehenden `games`-Zeilen wird per Trigger abgelehnt, zusätzlich Runbook-Regel. - **KAT-04 Krit. 4:** Die Einschränkung (Edition kann beim Umhängen verloren gehen) wird als neue Klärung in `requirements/r1-klaerungen.md` festgehalten.
Author
Owner

Entschieden (2026-11-04): siehe Kommentar #894. Kein neuer Code; Runbook-Satz und Test in PR #56. Der folgende Text bleibt unverändert als Begründung stehen.

Frage zu PR 2b (Zusammenführen), aus dem Review — bitte entscheiden (Label needs-clarification):

Zusammengeführte (und ausgeblendete) Spiele bleiben per ID lesbar (Spec-F2), und die Insert-Policies für Sammlung/Partien prüfen nur, ob das Spiel existiert. Ein veralteter Client oder eine offline erfasste Partie (plays.client_id) kann sich deshalb nach dem Zusammenführen noch an die Quelle hängen; ein Nutzer kann dann Einträge an Quelle und Ziel haben. Ein zweiter Aufruf von admin_merge_games scheitert mit merge_source_already_merged, ein Nachziehen ist so nicht möglich.

Optionen:

  1. Nachziehen erlauben (Empfehlung): Ein erneuter Aufruf ist erlaubt, wenn merged_into_id = p_target; er hängt dann nur die neuen Verweise um. Minimal, kein Eingriff in Nutzer-Schreibwege, Runbook-Schritt „Nachprüfen“ ergänzen.
  2. Trigger: Ein Insert auf Sammlung/Partien/Favoriten mit zusammengeführtem Spiel wird automatisch auf das Ziel umgeleitet. Robuster für Clients, aber ein weiterer Trigger in Nutzer-Schreibwegen.
  3. Insert ablehnen: Policies verbieten Verweise auf zusammengeführte Spiele (Client bekommt Fehler und muss neu laden). Offline erfasste Partien würden damit scheitern.

Bis zur Entscheidung bleibt 2b wie spezifiziert (ohne Nachziehen); die Lücke wird im Runbook als bekannte Einschränkung benannt.

> **Entschieden (2026-11-04):** siehe [Kommentar #894](https://git.cshomelabs.work/cschlaefke/Shuffle/issues/2#issuecomment-894). Kein neuer Code; Runbook-Satz und Test in PR #56. Der folgende Text bleibt unverändert als Begründung stehen. **Frage zu PR 2b (Zusammenführen), aus dem Review — bitte entscheiden (Label `needs-clarification`):** Zusammengeführte (und ausgeblendete) Spiele bleiben per ID lesbar (Spec-F2), und die Insert-Policies für Sammlung/Partien prüfen nur, ob das Spiel existiert. Ein veralteter Client oder eine offline erfasste Partie (`plays.client_id`) kann sich deshalb **nach** dem Zusammenführen noch an die Quelle hängen; ein Nutzer kann dann Einträge an Quelle und Ziel haben. Ein zweiter Aufruf von `admin_merge_games` scheitert mit `merge_source_already_merged`, ein Nachziehen ist so nicht möglich. Optionen: 1. **Nachziehen erlauben (Empfehlung):** Ein erneuter Aufruf ist erlaubt, wenn `merged_into_id = p_target`; er hängt dann nur die neuen Verweise um. Minimal, kein Eingriff in Nutzer-Schreibwege, Runbook-Schritt „Nachprüfen“ ergänzen. 2. **Trigger:** Ein Insert auf Sammlung/Partien/Favoriten mit zusammengeführtem Spiel wird automatisch auf das Ziel umgeleitet. Robuster für Clients, aber ein weiterer Trigger in Nutzer-Schreibwegen. 3. **Insert ablehnen:** Policies verbieten Verweise auf zusammengeführte Spiele (Client bekommt Fehler und muss neu laden). Offline erfasste Partien würden damit scheitern. Bis zur Entscheidung bleibt 2b wie spezifiziert (ohne Nachziehen); die Lücke wird im Runbook als bekannte Einschränkung benannt.
cschlaefke added the
needs-clarification
label 2026-11-03 19:58:58 +00:00
Author
Owner

Entscheidung zu W3 (Verweise nach dem Zusammenführen), Chris, 2026-11-04:

Kein neuer Code und keine Änderung an den Schreibwegen der Nutzer. Das Risiko ist in R1 gering: Es braucht ein Zusammenführen und danach einen veralteten Client oder eine Offline-Partie, die noch auf die ausgeblendete Quelle zeigt, und betrifft höchstens einzelne Einträge ohne Datenverlust.

Wenn es vorkommt, ruft der Admin als postgres die interne Funktion repoint_game_references(<quelle>, <ziel>) erneut auf (admin_merge_games scheitert dann mit merge_source_already_merged). Umsetzung in PR #56 (2b): ein Runbook-Satz in docs/katalog-pflege.md § 5 und ein pgTAP-Test, dass repoint_game_references auch bei einer schon zusammengeführten Quelle korrekt umhängt. Die Optionen „Trigger“ und „Insert ablehnen“ werden in R1 nicht gebaut.

Der ursprüngliche Beitrag (Kommentar #834) bleibt als Begründung stehen.

**Entscheidung zu W3 (Verweise nach dem Zusammenführen), Chris, 2026-11-04:** Kein neuer Code und keine Änderung an den Schreibwegen der Nutzer. Das Risiko ist in R1 gering: Es braucht ein Zusammenführen und danach einen veralteten Client oder eine Offline-Partie, die noch auf die ausgeblendete Quelle zeigt, und betrifft höchstens einzelne Einträge ohne Datenverlust. Wenn es vorkommt, ruft der Admin als `postgres` die interne Funktion `repoint_game_references(<quelle>, <ziel>)` erneut auf (`admin_merge_games` scheitert dann mit `merge_source_already_merged`). Umsetzung in PR #56 (2b): ein Runbook-Satz in `docs/katalog-pflege.md` § 5 und ein pgTAP-Test, dass `repoint_game_references` auch bei einer schon zusammengeführten Quelle korrekt umhängt. Die Optionen „Trigger“ und „Insert ablehnen“ werden in R1 nicht gebaut. Der ursprüngliche Beitrag (Kommentar #834) bleibt als Begründung stehen.
cschlaefke removed the
needs-clarification
label 2026-11-03 23:22:34 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference: cschlaefke/Shuffle#2
No description provided.