docs: define phase 0 anti-cheat baseline rules
This commit is contained in:
2
TODO.md
2
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`)
|
||||
|
||||
57
docs/F0_ANTI_CHEAT_RULES.md
Normal file
57
docs/F0_ANTI_CHEAT_RULES.md
Normal 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.
|
||||
Reference in New Issue
Block a user