diff --git a/evals/games/webchat-werewolf.ts b/evals/games/webchat-werewolf.ts index 50fce362c..bb789489f 100644 --- a/evals/games/webchat-werewolf.ts +++ b/evals/games/webchat-werewolf.ts @@ -195,10 +195,23 @@ export class WebchatWerewolfReferee implements ScriptedBrain { if (this.day.order.every((alias) => this.day!.spoke.includes(alias))) { this.day.spoke = [...this.day.spoke] this.phase = 'day-vote' + // Firmer, individually binding wording (measured motivation: real + // players completed a perfect 6-speaker discussion and then mostly + // never cast a vote — the polite invitation read as optional). The + // machine-parsed prefix `VOTE . Discussion is closed.` and the + // `Living players:` list are load-bearing for the scripted players + // and must not change. + // The example names LIVING players only (review): a literal-minded + // player copies the example's target, and a hardcoded alias can be + // dead in a later round. + const living = this.aliveAliases() replies.push( - `VOTE ${this.round}. Discussion is closed. Living players: ${this.aliveAliases().join(', ')}. ` + - `Every living player now says their vote out loud in this conversation, exactly once — for example ` + - `"${this.aliveAliases()[0]}: I vote for player-2". Name exactly one living player.` + `VOTE ${this.round}. Discussion is closed. Living players: ${living.join(', ')}. ` + + `Every living player MUST now cast exactly one vote by posting a message in this conversation in ` + + `the form "${living[0]}: I vote for ${living[1] ?? living[0]}" — your own name, then ONE living ` + + `player from the list above. This applies to YOU personally, whatever you said during the ` + + `discussion — having no strong read does not excuse you: pick the most suspicious living player ` + + `and vote now, in your next message. Not voting forfeits your voice in the lynch.` ) } continue