docs: define phase 0 anti-cheat baseline rules

This commit is contained in:
2026-02-27 13:11:08 +01:00
parent eed43ac9ca
commit 6f0e59f08a
2 changed files with 58 additions and 1 deletions

View File

@@ -29,7 +29,7 @@ Byg **Weirsøe Party Protocol**: en dansk party-webapp platform ala Jackbox, hvo
### Fase 0 — Scope + regler ### Fase 0 — Scope + regler
- [x] Fastlæg MVP for Spil 1 (`Fup og Fakta`) — se `docs/F0_MVP_FUP_OG_FAKTA.md` - [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) - [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 ### Fase 1 — Monorepo + Django skelet
- [x] Opret Django-projekt (`partyhub`) - [x] Opret Django-projekt (`partyhub`)

View File

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