diff --git a/TODO.md b/TODO.md index 01a2c7e..831bbe5 100644 --- a/TODO.md +++ b/TODO.md @@ -29,7 +29,7 @@ Byg **Weirsøe Party Protocol**: en dansk party-webapp platform ala Jackbox, hvo ### Fase 0 — Scope + regler - [x] Fastlæg MVP for Spil 1 (`Fup og Fakta`) — se `docs/F0_MVP_FUP_OG_FAKTA.md` - [x] Midlertidige defaults sat (X/Z, spillerantal) -- [ ] Fastlæg anti-cheat regler (fx ingen identiske løgne) +- [x] Fastlæg anti-cheat regler (fx ingen identiske løgne) — se docs/F0_ANTI_CHEAT_RULES.md ### Fase 1 — Monorepo + Django skelet - [x] Opret Django-projekt (`partyhub`) diff --git a/docs/F0_ANTI_CHEAT_RULES.md b/docs/F0_ANTI_CHEAT_RULES.md new file mode 100644 index 0000000..acd58af --- /dev/null +++ b/docs/F0_ANTI_CHEAT_RULES.md @@ -0,0 +1,53 @@ +# F0 anti-cheat regler — Fup og Fakta + +## Formål +Fastlæg simple, håndhævelige anti-cheat regler for F0, så runderne opleves fair uden tung NLP/moderation. + +## Scope (F0) +Gælder for inputfasen hvor spillere indsender løgne til et spørgsmål. + +## Regelsæt (F0) + +### 1) Ingen identiske løgne i samme runde +- To spillere må ikke have samme løgntekst efter normalisering. +- Hvis en indsendt løgn matcher en eksisterende løgn i runden, afvises den med fejlbesked og spilleren skal indsende ny tekst. + +### 2) Ingen løgn må være identisk med korrekt svar +- En løgn, der matcher det korrekte svar efter normalisering, afvises. + +### 3) Ingen tomme eller trivielt ugyldige svar +- Tom tekst, kun whitespace eller kun tegnsætning afvises. +- Minimumslængde: 2 tegn efter trim. + +### 4) Én aktiv løgn pr. spiller pr. spørgsmål +- Spilleren må gerne overskrive sin egen løgn inden deadline. +- Ved deadline er kun seneste gyldige version gældende. + +### 5) Ingen afslørende metatekst +- Svar som eksplicit afslører bluff-mekanikken (fx “det rigtige svar er …”, “jeg lyver”) afvises i F0 via enkel nøgleordsblokliste. + +## Normalisering (bruges i regel 1 + 2) +Følgende normalisering anvendes før sammenligning: +1. Unicode NFKC +2. Trim + collapse af flere mellemrum til ét +3. Lowercase +4. Fjern afsluttende tegnsætning (`.`, `,`, `!`, `?`, `:` `;`) + +Bemærk: F0 bruger **ikke** semantisk duplikatdetektion (synonymer/stavevarianter kan passere). + +## Håndhævelse i UX/API +- Validering sker server-side ved submit. +- Klienten får konkret fejlårsag og kan indsende igen inden tidsfrist. +- Samme valideringsregler gælder for alle klienter (web/mobil). + +## Acceptance criteria (F0) +- Identiske løgne (efter normalisering) kan ikke gemmes i samme runde. +- Løgn == korrekt svar (efter normalisering) kan ikke gemmes. +- Tom/ugyldig input afvises. +- Overskrivning af egen løgn inden deadline virker. +- Ved deadline bruges kun seneste gyldige løgn. + +## Out-of-scope (bevidst udskudt) +- Semantisk duplikatdetektion (embeddings/fuzzy matching) +- Avanceret toxicitet/moderation +- Sprogdetektion og translitterering