Commit Graph
513 Commits
Author SHA1 Message Date
agw 16007fc493 Historie: Danmarks historie, Politisk historie og flere nichede historiespørgsmål
CI / test (push) Successful in 1m24s
63 nye, webverificerede spørgsmål med vægt på det, de færreste kender:
"Danmarks historie" (22, bronzealder til 1928), "Politisk historie"
(21, dansk politik fra 1849) og 20 nye i "Historie" (verdenshistorie
uden for de vante fortællinger). Begge nye kategorier har deres egen
intro-lyd, normaliseret til -20 LUFS som de andre.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-19 17:05:00 +02:00
agw c3f9a5c8b4 Fest-Z: eget emoji-sæt og nyt navn
CI / test (push) Successful in 1m32s
Fest-spillet hedder nu Fest-Z (kategorierne "Fest-Z: …"), og telefonerne
får zoomer-emojis (💀 😭 🧢 🗿 💅 🍻) i stedet for familie-sættet. Serveren
sender sættet i tilstanden, så klienten altid viser det, spillet tager imod.
Reglerne og speakeren taler om slang og memes frem for pop-sladder.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-18 13:17:26 +02:00
agw 87ef9a6ba0 Fest: spørgsmål til unge, zoomer-hjerne og zoomer-drillerier
CI / test (push) Successful in 57s
Fest-pakken handler nu om ungdomskultur: "Fest: slang" (årets ord, slangens
oprindelse, dansk ungdomssprog) og "Fest: internettet" (memes, creators, spil),
ved siden af "Fest: nu". "Fest: retro" er taget ud.

Hjernen får sin egen fest-instruks (zoomer-speaker, tår må nævnes), så
afsløringens replikker og kommentarer også taler zoomer. Telefonens
drillerier har en fest-pulje, og de sidste faste replikker har fået
fest-udgaver.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-18 12:59:29 +02:00
agw a40243ed23 Fest: 18+-pakke med pop-sladder, tår og egen speaker
CI / test (push) Successful in 39s
Ny spørgsmålspakke "fest" (aldrig med i "Alle"): 43 faktatjekkede
spørgsmål om dansk pop i to kategorier, Fest: retro og Fest: nu.

Et fest-spil tæller tår ved siden af point: narret giver en tår,
ingen fandt sandheden giver alle en tår, gange rundens faktor
(finalen er en shot). Afsløringen, opsummeringen, stillingen og
telefonen viser tårene, og der er en pris til aftenens tørstigste.
Speakeren bruger zoomer-replikker (<begivenhed>_fest), egne regler
og FEST_VOICE_ID til alt.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-18 10:20:40 +02:00
agw 9f6d134288 Kategorier kan have deres egen oplæserstemme
CI / test (push) Successful in 58s
Spørgsmål og forklaring i en kategori med voice_id læses af den stemme; resten af spillet bruger speakeren. Forvarmningen og cachen følger stemmen.

Claude-Session: https://claude.ai/code/session_01T4tydM7urcwizGC8jeJU1K
2026-10-18 09:37:08 +02:00
agw 347ef68038 Kategorilyd og tænkemusik til Slægtens Stemmer
CI / test (push) Successful in 59s
Claude-Session: https://claude.ai/code/session_01T4tydM7urcwizGC8jeJU1K
2026-10-18 09:28:07 +02:00
agw ba1fa259d9 Forudskrevne kommentarer til oplæsningen og flere faste replikker
CI / test (push) Successful in 53s
- Alle 232 spørgsmål har en kort, overbevisende kommentar til sandheden og
  hver af husets løgne (1.015 i alt, ens tone og lige mange lyd-tags), så
  lyden kan ligge i cachen; hjernen spørges kun om spillernes egne løgne.
  Mangler blot én kommentar, bruges skabelonerne til alle svar, så stilen
  aldrig røber, hvem der har skrevet hvad
- Bemærkninger, når en løgn afleveres, er nu faste replikker med navnet
  (også uden hjerne); hjernens udgave er et tilvalg (BRAIN_PROGRESS)
- Telefonens drillerier bruger en fast pulje på 28 (BRAIN_TEASES slår
  hjernens til)
- Flere varianter til opsummering, oplæsning, velkomst og spil igen
- Én fælles liste over tilladte lyd-tags
- Lukkede forbindelser logges ikke længere som fejl

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 20:12:07 +02:00
agw a611215e3c Lyd-tags fra hjernen, skjult på skærmen
CI / test (push) Successful in 59s
- Hjernen må bruge en fast liste af lyd-tags ([laughs], [whispers] …); andre
  [ord] fjernes, så de ikke læses op
- Tags vises aldrig på skærme og telefoner
- Oplæsningen siger ikke længere svaret to gange, når hjernen gentager det

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 19:58:43 +02:00
agw 51931f3c64 Tænkemusik til hver kategori og kvote-vagt på forvarmningen
CI / test (push) Successful in 56s
- Eget tænkenummer til de ti oprindelige kategorier
- tts_warm --reserve: forvarmningen rører aldrig de sidste credits i perioden

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 19:19:07 +02:00
agw 554c924097 Nørdespørgsmål, spørgsmålspakker, flere lydvarianter og natlig forvarmning
CI / test (push) Successful in 53s
- 87 nye spørgsmål med kilder: Star Wars (inkl. Legends), Harry Potter,
  Ringenes Herre, Lægevidenskab, E-faktura, IT-sikkerhed, Computerhistorie
- Spørgsmålspakker pr. kategori (familie, nørd, arbejde); værten vælger
  Alle/Familie/Nørd, og arbejdspakken kun under "Flere valg"
- Lydeffekter i flere udgaver, der vælges tilfældigt (aldrig samme to gange
  i træk); jingles og tænkemusik til de nye kategorier; ekstra tænke- og
  afsløringsmusik
- Musik hentes og afkodes først, når den skal spilles, og slippes igen
- tts_warm --budget: forvarmer spørgsmål, forklaringer og kategori-replikker
  (de næste spørgsmål først) inden for et tegnbudget

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 18:58:31 +02:00
agw 319834cb38 Hjernen kalder spillerne ved navn og gætter ikke køn
CI / test (push) Successful in 35s
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 18:32:47 +02:00
agw acafcd1291 Ret: reglernes slå-fra-knap sad på den forkerte klasse
CI / test (push) Successful in 33s
Testene satte selv attributten og skjulte fejlen; nu tjekker de standarden.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 18:26:26 +02:00
agw fc76356f56 Oplæsningsrunde, emoji-reaktioner, regler og renere løgne
CI / test (push) Successful in 1m4s
- Runde 2 og finalen: speakeren læser svarene op ét ad gangen (med hjernen
  en overbevisende kommentar pr. svar), i samme takt på storskærm og telefoner
- Emoji-reaktioner fra telefonerne, der må spammes; de flyver op på storskærmen
  og tælles på svaret i fokus
- Opsummeringen følger speakeren: "lad os rydde op", eksplosioner, så pointene
- Speakeren kommenterer, hvordan løgnene skrider frem, uden at røbe indhold,
  og driller dem, der falder for svage løgne
- Reglerne forklares med kort og stemme før rummets første spil
- "Lyv for mig" låser forslaget i feltet (halve point), og feltet bliver ikke
  længere kæmpestort
- Svar vises med versaler, og spillernes løgne gemmes med små bogstaver, så
  store forbogstaver ikke afslører dem
- Løgne og navne renses: kun bogstaver, tal og lidt tegnsætning
- Valgfrit workspace-id til Anthropic-brugernøgler

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 18:18:38 +02:00
agw 69012bd051 Speakeren hænger ikke længere fast, mere liv i stemmen, flere replikker
CI / test (push) Successful in 34s
Fejl fra første rigtige spil: alle kendte svaret og sendte det igen og
igen. Hver gang kom en ny replik i kø, og da skærmen venter på speakeren,
kom spillet aldrig videre. Nu kommenteres det højst én gang pr. spørgsmål
som en sidebemærkning, der ikke holder skærmen tilbage, og når tiden er
gået, venter skærmen højst tolv sekunder på speakeren.

Stemmen er mere levende (lavere stability, mere style), de hyppigste
begivenheder har fået flere replikker, og spørgsmål som alle finder to
gange, tages ud. Spillet vælger nu de mindst brugte spørgsmål først.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 17:45:35 +02:00
agw 305a59640e Speakeren går klart igennem: normaliseret lyd og ny mixer
CI / test (push) Failing after 31s
Lydfilerne var op til 17 dB højere end speakeren (kategori-lyden -4 LUFS
mod speakerens -21). Alle effekter er nu normaliseret til -20 LUFS og
musikken til -23 LUFS. Speakeren går gennem sin egen kompressor med et
løft, og mens den taler, dykker effekterne og musikken, og musikken får
skåret taleområdet ned. En limiter til sidst forhindrer klipning.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-03 17:25:59 +02:00
agw d149aa323e Udbyder-agnostisk spilhjerne, rummets mikrofon og rigtig musik
CI / test (push) Failing after 39s
Hjernen (party/brain) skriver kommentarer til løgnene, dømmer løgne
(sandheden eller upassende), personlige drillerier og en slut-anmeldelse,
alt i baggrunden med faste replikker som fallback. Udbyderen vælges med
BRAIN_PROVIDER: anthropic (Claude), openai (OpenAI-kompatibel, fx Codex)
eller ollama (fx Gemma). Rummets mikrofon er eksperimentel: storskærmen
sender korte lydstumper til talegenkendelse (STT_PROVIDER), og kun et kort
resumé af latter og udsagn huskes til hjernen. Musikken er nu lavet med
en musikmodel.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 21:59:50 +02:00
agw 16054a9b67 Skærmen følger speakeren, opsummering, musik, lydeffekter og drillerier
CI / test (push) Successful in 28s
Faseskift venter, til speakeren er færdig med den aktuelle skærm, og
replikker til en skærm, der er væk, afspilles ikke. Ny kategori-intro med
en lyd pr. kategori, musik pr. fase med bløde overgange og lydeffekter til
alt, der flyver over skærmen. Efter afsløringen eksploderer løgne, ingen
valgte, og pointene tæller op. Hjerter gives kun under afsløringen og ses
live på storskærmen. Lyv for mig giver halve point. Narrede spilleres
telefon kan blive drillet med et fjollet billede og et buh. Alle lyd- og
billedfiler serveres med versionerede navne og caches af browseren.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 21:59:40 +02:00
agw 2da781e361 Speaker: stort begyndelsesbogstav, også når replikken starter med et svar
CI / test (push) Successful in 16s
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 21:59:10 +02:00
agw 6f8370fb96 Speaker: højst tre samtidige kald til ElevenLabs og nyt forsøg ved 429
CI / test (push) Successful in 24s
Afsløringen bestilte alle trin på én gang og ramte abonnementets loft for
samtidige kald. Forklaringen genereres nu allerede, mens der løjes.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 21:58:30 +02:00
agw d2dfeafea0 Speaker med stemme: replikker læses op med ElevenLabs
CI / test (push) Successful in 23s
Spilmotoren udsender begivenheder, rummet vælger en replik, indsætter navne
og talord og genererer lyden (cachet på disk ud fra tekst, stemme og
model). Storskærmen afspiller replikkerne i rækkefølge. Afsløringen venter
på lyden og får en længde pr. trin, så stemplet lander, mens speakeren
taler. Uden nøgle eller ved fejl kører spillet som før, bare uden stemme.

Spørgsmålene er gjort familievenlige, og de otte mest kluntede replikker er
skrevet om.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 21:57:00 +02:00
agw 0573f867c9 Generisk driftsbeskrivelse i stedet for konkret opsætning
CI / test (push) Successful in 33s
Deploy-script og systemd-unit beskrev én bestemt installation og hører ikke
hjemme i et offentligt repo. README beskriver nu kravene til proxy og
headere generelt, og eksempelmiljøet bruger neutrale værdier.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 21:56:00 +02:00
agw 2d75c4ce5a Speakerens manuskript: 170 replikker til 28 begivenheder
CI / test (push) Successful in 16s
Klar til oplæsning med ElevenLabs. En test håndhæver reglerne fra
manuskript-prompten: tilladte pladsholdere og lyd-tags pr. begivenhed,
højst 20 ord, ingen tankestreger og tal skrevet med bogstaver.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 21:54:37 +02:00
agw ec9758ada0 Bots kan fylde et eksisterende spil op (--code)
CI / test (push) Successful in 19s
Så kan et spil testes alene: vær vært og VIP selv, og lad bots være de
andre spillere.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 20:53:55 +02:00
agw 09d56eb8db Bot-test virker mod drift, CI kører testene, protokol opdateret
CI / test (push) Successful in 20s
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 20:37:34 +02:00
agw 10652ee219 Storskærm og telefon-UI, 147 danske spørgsmål og drift
Vanilla JS uden build-trin: én WebSocket pr. skærm med automatisk
genforbindelse, tegner altid fra seneste snapshot. Storskærmen viser kode,
QR, nedtælling og en animeret afsløring; telefonen er bygget til store
knapper og genoptager sin plads efter genindlæsning. dev.html viser alle
faser uden server. deploy/ har systemd-unit, deploy-script og en bot-test,
der spiller et helt spil mod en kørende server.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 20:25:49 +02:00
agw 9a53d8fe04 Start forfra: server-autoritativ spilmotor over WebSocket
Den tidligere version (Angular-SPA, REST og polling) er gemt på branchen
legacy. Denne version samler alle regler i en ren Python-spilmotor
(fupogfakta/engine.py), holder rummene i hukommelsen i én proces og sender
hele spiltilstanden pr. rolle over én WebSocket. Vært-login sker via
Authentik forward-auth i NPMplus.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-01 20:40:00 +02:00
agw d86941fef8 Merge pull request '[READY][Gameplay] #310 Host transition idempotency and error catalog for scoreboard -> next round / finish' (#320) from dev/issue-310-host-transition-idempotency-v2 into main
CI / test-and-quality (push) Successful in 3m30s
Reviewed-on: #320
Reviewed-by: reviewer-bot <review-no-reply@weircon.dk>
2026-03-18 06:52:03 +01:00
dev-bot 21e390d200 test: tighten pr320 lobby ownership guard
CI / test-and-quality (push) Successful in 4m6s
CI / test-and-quality (pull_request) Successful in 4m8s
2026-03-18 06:44:54 +01:00
dev-bot df9b6d192c chore: refresh i18n parity artifact
CI / test-and-quality (push) Successful in 4m6s
CI / test-and-quality (pull_request) Successful in 4m6s
2026-03-18 05:19:53 +00:00
dev-bot 702f130de2 test(lobby): lock issue-310 transition ownership boundary
CI / test-and-quality (push) Successful in 4m14s
CI / test-and-quality (pull_request) Successful in 4m15s
2026-03-18 05:00:48 +00:00
dev-bot 92f2cda83a test(lobby): lock scoreboard next-round bootstrap target
CI / test-and-quality (push) Successful in 4m3s
CI / test-and-quality (pull_request) Successful in 4m5s
2026-03-18 04:36:20 +00:00
dev-bot d080f05661 fix(ci): retain lobby payload ownership export
CI / test-and-quality (push) Successful in 4m0s
CI / test-and-quality (pull_request) Successful in 4m2s
2026-03-18 04:17:17 +00:00
dev-bot e246bd648f fix(gameplay): scope next-round selection to target round
CI / test-and-quality (push) Failing after 11s
CI / test-and-quality (pull_request) Failing after 11s
2026-03-18 03:54:25 +00:00
dev-bot 06e4ccac61 fix(lobby): restore scoreboard payload import
CI / test-and-quality (push) Failing after 13s
CI / test-and-quality (pull_request) Failing after 14s
2026-03-18 02:55:30 +00:00
dev-bot 3c9214178e fix(ci): remove stale scoreboard payload import
CI / test-and-quality (pull_request) Failing after 3m34s
CI / test-and-quality (push) Failing after 3m35s
2026-03-18 02:33:36 +00:00
dev-bot feddd910eb fix: restore reveal payload import in submit_guess
CI / test-and-quality (push) Failing after 12s
CI / test-and-quality (pull_request) Failing after 12s
2026-03-18 02:12:11 +00:00
dev-bot dd615796f4 refactor(payloads): delegate session detail gameplay payload
CI / test-and-quality (push) Failing after 11s
CI / test-and-quality (pull_request) Failing after 12s
2026-03-18 01:33:47 +00:00
dev-bot d2cdf16322 test(lobby): lock repaired stale next-round replay
CI / test-and-quality (push) Successful in 4m0s
CI / test-and-quality (pull_request) Successful in 4m1s
2026-03-18 00:46:51 +00:00
dev-bot 101c3f9c26 fix(gameplay): repair stale next-round question drift
CI / test-and-quality (pull_request) Successful in 3m55s
CI / test-and-quality (push) Successful in 3m56s
2026-03-17 23:25:02 +00:00
dev-bot 65eb5685f7 test(lobby): lock scoreboard ownership boundary
CI / test-and-quality (push) Successful in 3m57s
CI / test-and-quality (pull_request) Successful in 3m58s
2026-03-17 23:07:22 +00:00
dev-bot 8a70645fda test(lobby): lock session detail payload delegation
CI / test-and-quality (push) Successful in 3m53s
CI / test-and-quality (pull_request) Successful in 3m54s
2026-03-17 22:25:03 +00:00
dev-bot 2cd8d940f9 test(lobby): lock session detail ownership boundary
CI / test-and-quality (pull_request) Successful in 3m55s
CI / test-and-quality (push) Successful in 3m57s
2026-03-17 21:22:39 +00:00
dev-bot 72bc5997ff test(gameplay): keep lobby delegation checks in lobby suite
CI / test-and-quality (push) Successful in 4m3s
CI / test-and-quality (pull_request) Successful in 4m5s
2026-03-17 21:03:50 +00:00
dev-bot c9e64bc8a8 test(gameplay): lock lobby delegation for host transitions (#310)
CI / test-and-quality (push) Successful in 4m4s
CI / test-and-quality (pull_request) Successful in 4m4s
2026-03-17 20:48:39 +00:00
dev-bot 1c7f1e7c53 fix(ci): satisfy PR #320 lobby lint contract
CI / test-and-quality (pull_request) Successful in 3m56s
CI / test-and-quality (push) Successful in 3m56s
2026-03-17 20:06:12 +00:00
dev-bot 03850b5ed5 refactor(gameplay): extract start/show transitions from lobby views
CI / test-and-quality (push) Failing after 11s
CI / test-and-quality (pull_request) Failing after 12s
2026-03-17 19:44:13 +00:00
dev-bot 16c9cf6b57 refactor(gameplay): extract round start payload builders
CI / test-and-quality (push) Successful in 3m51s
CI / test-and-quality (pull_request) Successful in 3m53s
2026-03-17 19:15:44 +00:00
dev-bot c45f04f9f1 refactor(gameplay): extract round question payload builder
CI / test-and-quality (push) Successful in 3m41s
CI / test-and-quality (pull_request) Successful in 3m42s
2026-03-17 18:55:28 +00:00
dev-bot 319038555a refactor(gameplay): move phase view model into cartridge
CI / test-and-quality (pull_request) Successful in 3m42s
CI / test-and-quality (push) Successful in 3m44s
2026-03-17 18:29:11 +00:00
dev-bot e318711148 test(gameplay): lock refreshed next-round deadline contract
CI / test-and-quality (push) Successful in 3m47s
CI / test-and-quality (pull_request) Successful in 3m48s
2026-03-17 17:44:34 +00:00