From 6f0e59f08a9f7e4306e461a3a839562171418a3e Mon Sep 17 00:00:00 2001 From: Asger Geel Weirsoee Date: Fri, 27 Feb 2026 13:11:08 +0100 Subject: [PATCH] docs: define phase 0 anti-cheat baseline rules --- TODO.md | 2 +- docs/F0_ANTI_CHEAT_RULES.md | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 docs/F0_ANTI_CHEAT_RULES.md diff --git a/TODO.md b/TODO.md index 9aeddc8..968c3fe 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..86754cb --- /dev/null +++ b/docs/F0_ANTI_CHEAT_RULES.md @@ -0,0 +1,57 @@ +# F0 anti-cheat regler — Fup og Fakta + +## Formål +Definere en simpel, håndterbar anti-cheat baseline til MVP, så runder forbliver fair uden avanceret NLP. + +## Principper (F0) +- Regler håndhæves server-side. +- Validering sker ved submit (ikke kun i UI). +- Ved regelbrud gives tydelig fejlbesked, og spilleren kan indsende igen inden timeout. +- Hvis tiden udløber uden gyldigt svar, håndteres spilleren som intet svar. + +## Regler for løgn-svar (submit-fasen) +1. Én løgn pr. spiller pr. spørgsmål + - Seneste gyldige submit inden timeout er gældende. + +2. Ingen tomme eller trivielle svar + - Afvis tom streng og kun-whitespace. + - Afvis meget korte svar (<2 tegn efter trim). + +3. Ingen identiske løgne mellem spillere + - Sammenlign på normaliseret form: + - trim whitespace + - lowercase + - kollaps flere mellemrum til ét + - Hvis to spillere sender samme normaliserede tekst, accepteres den først modtagne; senere submit afvises med fejl. + +4. Løgnen må ikke være identisk med korrekt svar + - Samme normalisering som ovenfor. + - Identisk med facit afvises. + +5. Ingen direkte spoof af korrekt svar-markør + - Systemet ejer præsentation af korrekt svar. + - Klientinput må ikke kunne sætte metadata/flag, der markerer et svar som facit. + +## Regler for gæt (guess-fasen) +1. Man kan ikke vælge sit eget løgn-svar + - Egne svar vises ikke som valgbare for spilleren. + - Server validerer også dette. + +2. Én gyldig stemme pr. spiller pr. spørgsmål + - Seneste gyldige valg inden timeout er gældende. + +## Drift og fairness +- Log afviste submits med årsag (f.eks. duplicate_lie, matches_truth, too_short) til audit/debug. +- Brug server-tid til fasegrænser; klienttid er udelukkende visning. + +## Out-of-scope i F0 (senere fase) +- Semantisk duplikatdetektion (f.eks. København vs kbh). +- Toxicity/profanity-filter. +- Avanceret collusion-detektion på tværs af runder. +- IP/device-fingerprinting og anti-smurf. + +## Acceptance criteria (F0 anti-cheat) +- Identiske normaliserede løgne kan ikke sameksistere i samme spørgsmål. +- Korrekt svar kan ikke indsendes som løgn. +- Eget løgn-svar kan ikke vælges i guess-fasen. +- Regelbrud håndhæves server-side, uanset klientadfærd.