The world remembers — and every character remembers differently.

Six scenes from a runtime that decides what a character knows, believes, conceals and may say. The language model only words it.

Scene 1

Ask the same man four times

Does repetition become corroboration?

He tells you the same thing four times. You are not four times as sure, because it is still one thing he knows.
AskConfidenceEvidence recordedDistinct origins
10.5041incident:store_seal_night
20.5052incident:store_seal_night
30.5053incident:store_seal_night
40.5055incident:store_seal_night

Four answers, 5 recorded pieces of evidence, and 1 origin. Confidence moved from 0.504 to 0.505.

What it is set against: a structural absence, not a product

A store that keeps one number per fact has nothing to discount by: it cannot tell a second witness from the same witness twice, because it never recorded which witness the first one was.

Reproduce: unscripted play --world-pack worldpacks/relay-station --debug

Scene 2

A lie, and who it is traceable to

Can a character lie without the system losing track of the truth?

He knows where Milan is. He tells you something else. The runtime records both, and the people who overheard him now hold his version -- with his name on it.
He believeswhereabouts(who=agent:npc_red_jacket,place=place:bar_back) at 0.868
He says“Milan left the city months ago. I have no further information.”
He assertedwhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) (lie)
Who heard itRecorded origin
Honcesaidagent:corpo_okadawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)[None,None,None]
Dimasaidagent:corpo_okadawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)[None,None,None]
Veesaidagent:corpo_okadawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)[None,None,None]
yousaidagent:corpo_okadawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)[None,None,None]

He holds the truth at 0.868, asserted the opposite to 4 listener(s), and each of them recorded him as the source.

What it is set against: a structural absence, not a product

Belief, utterance and intent are three states here. A system that stores the dialogue line stores one, and cannot answer afterwards whether the speaker meant it.

Reproduce: python3 tests/test_scenarios.py (deception)

Scene 3

A secret, under pressure, with a real model

Can a language model be stopped from saying the thing it was told not to say?

Every line here was written by a language model. These are the ones it tried to say -- and what the player got instead.
Modelqwen3-vl:4b-instruct
the model tried to sayRed jacket’s in bar back.
the player gotI've got nothing for you.
day 3 00:14 · threaten Mr. Okada
the model tried to sayYou better watch your step.
the player got(nothing)
day 3 00:14 · promise Mr. Okada 500
the model tried to sayRed jacket’s in bar back.
the player got(nothing)
day 3 00:44 · threaten Mr. Okada
the model tried to sayHead north past the old mill.
the player gotI've got nothing for you.
day 3 01:14 · threaten Mr. Okada
the model tried to sayRed-jacket’s in bar back.
the player gotI've got nothing for you.
day 3 01:44 · promise Mr. Okada 500
the model tried to sayRed jacket’s in bar back.
the player gotI've got nothing for you.
day 3 02:44 · promise Mr. Okada 500

96 questions under pressure, threat and bribery — 0 leaks. Across the whole recorded run, 69 lines were stopped before the player saw them.

What it is set against: the model's own recorded output

The left column is not a reconstruction. It is the model's raw output, recorded at the time, in the run this page quotes.

Reproduce: unscripted evidence --llm-endpoint ... --case secret_under_pressure

Scene 4

A day passes and nobody is watching

Does anything happen off-screen, and is it accountable?

You leave the room. The station keeps talking. When you come back, more people know -- and every one of them can tell you who they heard it from.
FromToWhereHopsChanged on the way
FerroRaskDock1
RaskFerroDock1
MbekiCommander VossLab1
Commander VossHollisLab1
Dr OkonkwoAdeyemiMedbay1
AdeyemiTanMess2
LindqvistTanMess1
AdeyemiCommander VossMess2
Who knowsConfidenceTraces back to
Adeyemi0.615incident:store_seal_night
Ferro0.627incident:store_seal_night
Hollis0.611incident:store_seal_night
Lindqvist0.686incident:store_seal_night
Mbeki0.723incident:store_seal_night
Nakamura0.57incident:store_seal_night
Dr Okonkwo0.699incident:store_seal_night
Rask0.59incident:store_seal_night
Tan0.563incident:store_seal_night
Commander Voss0.849incident:store_seal_night

10 characters hold it, 1 origin(s) between them.

What it is set against: a structural absence, not a product

Spreading a fact is easy. Spreading it so that six hops later it is still worth one witness is the part that needs the provenance to have been kept.

Reproduce: unscripted play --world-pack worldpacks/relay-station (then: wait 180)

Scene 5

You prove he lied

What happens to what a liar already convinced people of?

You expose him. Everything that rested on his word is recomputed. Everything that did not is left alone -- because the runtime knows which is which.

Standing on his word before you exposed him — and how much of it he was carrying alone:

WhoBelievesConfidenceFrom himFrom anyone else
Honcewhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.52910
Dimawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.49610
Veewhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.49210
youwhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.51810

Recomputed the moment he was exposed:

WhoBelievedWasNowIndependent support
Honcewhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.5290.510
Dimawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.4960.4980
Veewhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.4920.4970
youwhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)0.5180.5060

4 belief(s) stood on his word alone. Exposing him moved every one of them back toward not knowing -- from whichever side of it they were on.

Every belief in this scene rested on him alone, so it does not show the other half: that a belief with a second, independent source is left standing. That one is asserted by the test suite (`revision leaves independently supported beliefs standing`), not by this table.

What it is set against: a structural absence, not a product

Lowering trust in a character changes what they will be believed about next. It does nothing about what they have already been believed about -- unless every one of those beliefs remembers that it came from him.

Reproduce: POST /v2/resting_on, then POST /v2/discredit

Scene 6

Find the shortest way to break this world

Is there ANY way the player can bring this about?

State a rule about your story. The runtime searches for the shortest sequence of player actions that breaks it -- and tells you how far it looked when it finds none.
Ruleonly_the_crew_knows_the_breach: nobody but the crew may believe seal_breached
  1. ask Commander Voss about breach

agent:player_1 believes seal_breached(section=place:store, when=night_cycle) at p=0.50 (rule allows < 0.40)

1 sequences explored up to 2 actions. The space was exhausted.

Broken in 1 action(s), found after 1 sequences

What it is set against: a structural absence, not a product

This needs determinism and an inspectable state. A system whose NPC behaviour is a model's response to a prompt cannot search its own state space, because it does not have one.

Reproduce: unscripted qa qa/relay-station.json