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
|
### 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`)
|
||||||
|
|||||||
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