Developer
Code-Spezialist • PRs & Tests
- Stark: Code (PRs, Tests, Release-Notes)
- Schwach: Support-Tasks
- Coffee: normaler Decay
- Fähigkeit: —
// docs / spielprinzip
Eine vollständige Tour: Rollen mit echten Stärken, persönliche Aufgaben pro Spieler, Coffee als Team-Ressource, Sabotagen die wie normale Arbeit aussehen, und ein Meeting-Screen, der euch Diskussionsstoff liefert — aber niemals Beweise.
Wir wollten ein Spiel haben, das man in der Mittagspause mit dem ganzen Team starten kann — ohne Download, ohne Account, ohne 20 Minuten Tutorial. Among Us hat das Format perfektioniert; uns hat aber gefehlt, dass die Tasks und Sabotagen sich nach unserem Alltag anfühlen.
> Stell dir Among Us vor — aber statt Raumstation ein Software-Büro mitten im Release. Statt „Schalter umlegen“ reviewst du Pull Requests, fixst CI/CD und holst Kaffee. Statt „Lichter aus“ setzt jemand heimlich die Pipeline rot.
Die Spannungsquelle ist dieselbe: du weißt nicht, wer auf deiner Seite ist. Aber die Witze sind unsere — PRs, Standups, Slack-Outages, Hotfixes auf main. Und weil wir eine KI-Firma sind, zieht sich AI-Theming durch das ganze Spiel: der prominenteste Chaos-Agent heißt Vibe Coder, der Eventfeed klingt wie ein müder Senior-Engineer im Incident-Channel, und der Endscreen- Postmortem ist LLM-styled.
Jede Rolle hat Stärken (× 1.35 Task-Speed in passenden Kategorien), Schwächen (× 0.75), ein Coffee-Profil (Decay-Rate + Max-Energy) und meist eine aktive Fähigkeit (1× pro Runde).
Code-Spezialist • PRs & Tests
Infra-Spezialist • Pipeline & Deploys
Test-Spezialistin • Logs & Repro
Process-Lead • Scope & Standup
Support • Coffee Run
Alle drei Chaos-Varianten sehen für Außenstehende identisch aus — "Chaos-Agent" steht nur im eigenen Role-Intro. Sie unterscheiden sich nur in den verfügbaren Sabotagen.
AI-Chaos • Code, CI, Vibe
Committet direkt auf main, schmückt Tests mit Hallucinations, lässt die Pipeline "atmen" — auf seine Art.
Process-Chaos • Meetings, Scope
Erfindet Customer Requests, zieht Leute in unnötige Meetings, wird dafür bezahlt, alles zu blockieren.
Infra-Chaos • Outages
Hat root, kappt Slack, killt die Beleuchtung, lässt das Pager-System brennen.
Nicht jeder Spieler kann alle Tasks gleich gut. Beim Rundenstart bekommt jeder 3 persönliche Aufgaben:
> Das ist der eigentliche Trick: Persönliche Tasks erzeugen Alibis ("Ich war im Server Room, weil ich Deployment fixen musste") und Verdacht ("Warum war der Scrum Master beim CI-Terminal?") — ohne dass das Spiel jemandem sagt, wer wirklich Chaos ist.
Jeder Spieler hat eigene Coffee-Energy (0..max). Decay 1.4/s × Rolle-Modifier. Effekt:
| Coffee-Level | Effekt |
|---|---|
| ≥ 80 | Task-Bonus (schneller arbeiten) |
| 15..79 | normal |
| < 15 | Speed-Penalty + Movement-Slowdown (Pille pulsiert rot) |
Refill-Optionen:
Alle 8 Tasks haben Mini-Games. Server-authoritative Plugin- Architektur: der Server kennt den Wahrheitszustand jeder Mini-Game-Session, Browser- und Godot-Client mirror'n die View. Acht verschiedene Mechanik-Patterns, damit kein Task sich anfühlt wie der andere.
fix_unit_tests — Test-Suite-Repair (Sequencing)
analyze_logs — Log-Filter (Filter-by-Criterion)
repair_deployment — Cable-Pairing (Pairing)refill_coffee — Coffee-Pour (Timing)reduce_scope — Sprint-Trim (Subset-by-Constraint)
review_pr — Diff-Review (Multi-Select-by-
Criterion / Spot-the-Bug)
calm_legacy_service — Stability-Balance (alle drei
Metriken im grünen Band halten)
write_release_notes — Release-Notes (Click-to-
Cycle-Sort)
Acht Sabotagen, jede mit eigenem Cooldown. Aber wichtig: Chaos kann sie nicht von überall triggern. Jede Sabotage hat einen Object-Type-Anchor — und der ist derselbe Anchor, den auch das Release-Team für die zugehörige Task nutzt.
> Wäre der Trigger-Spot ein eigenes "Sabotage-Terminal", wäre jeder, der dort steht, sofort verdächtig. Same Anchor → Beobachter sehen "X arbeitet am CI-Terminal" und müssen raten, ob das eine Repair, eine echte Task oder eine Sabotage ist. Genau diese Ambiguität trägt die Diskussion.
| Sabotage | Effekt | Object-Type | Trigger-Ort (Default-Map) |
|---|---|---|---|
| CI/CD Rot | Pipeline -20 | ci_console |
Server Room (an repair_deployment) |
| Flaky Tests | Incidents +30 | qa_terminal |
Open Space (an fix_unit_tests) |
| Merge Conflict Storm | Pipeline -10, Incidents +25 | git_terminal |
Open Space (an review_pr) |
| Coffee Outage | Team-Coffee = 0; alle auf 40 % Max-Energy | coffee_machine |
Kitchen (an refill_coffee) |
| Mandatory Meeting | 5 s alle langsam | meeting_screen |
Meeting Room (an reduce_scope) |
| Fake Customer Request | Release -15 | release_console / meeting_screen |
Meeting Room |
| PagerDuty-Storm | Sicht reduziert auf 150 px Radius | monitoring_panel |
Server Room (an analyze_logs) |
| Slack-Down | Tasks + andere Sabotagen blockiert | monitoring_panel / ci_console |
Server Room |
PagerDuty-Storm und Slack-Down haben zusätzlich Repair-Panels mit 50 px Reichweite, an denen jeder Lebende sie reparieren kann.
Vents (chaos-only) bieten Tunnel zwischen Open Space, Server Room und Legacy Basement. Force-Reboot ist der Take-Down, mit 25 s Cooldown und im War-Room gesperrt.
Wenn ein Body reportet wird oder jemand ein Emergency ausruft, friert die Runde ein und der Meeting-Screen kommt hoch. Er zeigt Kontext, aber keine Beweise:
Jeder Lebende hat eine Stimme (Re-Vote überschreibt). Nach 60 s oder wenn alle voted haben → höchste Anzahl wird eliminiert (Skip oder Tie → niemand). Geister dürfen nicht voten oder reporten — sie können aber weiter Tasks erledigen und damit dem Release-Team auch nach dem Tod helfen.
Wenn weniger als sechs Menschen da sind, kann der Host KI-Bots in die
Lobby einladen. „+ Bot hinzufügen“ in der Lobby — ein neuer Spieler
mit Namen wie Bot-Promptly, Bot-Cursor-Sr.,
Bot-StackOverflow oder Bot-Junior taucht auf. Im Spiel mit einem
[BOT]-Tag über dem Sprite, in der Lobby mit Kick-Button.
Die Bots laufen LLM-getrieben durch die Map: alle 5 s pro Bot fragt der Server das LLM nach dem nächsten Intent („welche Task soll der Bot als Nächstes machen?“). Pathfinding, Movement, Voting und Body-Report sind deterministisch im Server — das LLM darf nur das „Was“, nicht das „Wie“ entscheiden. Reactive Overrides reagieren sofort wenn ein Bot einen Body in Sichtweite hat.
Nach Spielende werden Rollen aufgedeckt und der Server liefert ein
final_summary:
Das ist der Moment, in dem Leute lachen und "noch eine Runde" sagen.
Wir sind eine KI-Firma — entsprechend zieht sich AI-Theming durch das ganze Spiel:
Aktuell vier Maps, in der Lobby per Dropdown wählbar. Pydantic-validiert beim
Server-Start, an den Client per room_joined mitgegeben.
maps/kinds.json ist die Single Source of Truth für
MapObject-Kinds (25 Möbel-Typen wie desk, server_rack,
coffee_machine). Server validiert Maps gegen die Registry. Browser-
Frontend, Editor-3D-Vorschau und Godot-Client lesen alle dynamisch via
GET /api/kinds — ein neues Möbelstück wird einmal in
kinds.json ergänzt und ist überall verfügbar.
Der Map-Editor unter /editor hat 2D-Canvas plus Three.js-3D-Vorschau Side-by-Side, Save direkt zum Server, Undo/Redo, Validation-Strip. Designer können ohne Code-Touch Maps komponieren und sofort live testen.
Seit Tier 4 läuft Godot 4.6 als paralleler Client neben dem Browser-Frontend. Echte 3D-Assets aus dem KayKit-Bundle (Möbel, Charaktere, Server-Racks), Mobile-Renderer, MSAA 4×. Gleiches WebSocket-Protokoll, gleicher Server — ein Server bedient beide.
Der Godot-Client zieht Map und Kinds-Registry zur Laufzeit per HTTP vom Backend
(/api/maps/<id>, /api/kinds). Keine Drift zwischen den
Welten, keine manuellen Sync-Hooks. Wenn das Backend kurz offline ist, fällt der Client
auf lokale Demo-Kopien zurück.
Status: Lobby, World, Mini-Games (5/5 portiert), Take-Down, Body-Report, Vents, Endscreen mit Awards, Personal-Tasks, Coffee-Pulse, Ability-Btn, Sabotage-Strip, Eventfeed, Role-Intro-Modal — alles drin. Restliche Feature-Parität in Arbeit (Tier 4.x).
> Architektur-Nordstern: Python entscheidet, der Client zeigt nur an. Nichts an Spiellogik im Frontend.
/ws. Authoritativ für
allen State.
<canvas>. Keine Build-Pipeline. Nächste Stufe: Godot 4 als polished
Primary-Client (Tier 4) — Browser-Client bleibt als Web-Fallback.
main-Push.
objectType) und Vents als JSON. Map-Editor unter
/editor.
/editor — reines Client-Tool, exportiert JSON
nach docs/maps.md-Schema.
$ ./join_prod_is_lava_round
→ Sweet-Spot 6–10 Spieler, mindestens 4.
→ ~10 min pro Runde.
→ _