Six scenes from a runtime that decides what a character knows, believes, conceals and may say. The language model only words it.
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.
| Ask | Confidence | Evidence recorded | Distinct origins |
|---|---|---|---|
| 1 | 0.504 | 1 | incident:store_seal_night |
| 2 | 0.505 | 2 | incident:store_seal_night |
| 3 | 0.505 | 3 | incident:store_seal_night |
| 4 | 0.505 | 5 | incident:store_seal_night |
Four answers, 5 recorded pieces of evidence, and 1 origin. Confidence moved from 0.504 to 0.505.
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
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.
| Who heard it | Recorded origin |
|---|---|
| Honce | saidagent:corpo_okadawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)[None,None,None] |
| Dima | saidagent:corpo_okadawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)[None,None,None] |
| Vee | saidagent:corpo_okadawhereabouts(who=agent:npc_red_jacket,place=place:outside_the_city)[None,None,None] |
| you | saidagent: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.
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)
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.
96 questions under pressure, threat and bribery — 0 leaks. Across the whole recorded run, 69 lines were stopped before the player saw them.
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
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.
| From | To | Where | Hops | Changed on the way |
|---|---|---|---|---|
| Ferro | Rask | Dock | 1 | |
| Rask | Ferro | Dock | 1 | |
| Mbeki | Commander Voss | Lab | 1 | |
| Commander Voss | Hollis | Lab | 1 | |
| Dr Okonkwo | Adeyemi | Medbay | 1 | |
| Adeyemi | Tan | Mess | 2 | |
| Lindqvist | Tan | Mess | 1 | |
| Adeyemi | Commander Voss | Mess | 2 |
| Who knows | Confidence | Traces back to |
|---|---|---|
| Adeyemi | 0.615 | incident:store_seal_night |
| Ferro | 0.627 | incident:store_seal_night |
| Hollis | 0.611 | incident:store_seal_night |
| Lindqvist | 0.686 | incident:store_seal_night |
| Mbeki | 0.723 | incident:store_seal_night |
| Nakamura | 0.57 | incident:store_seal_night |
| Dr Okonkwo | 0.699 | incident:store_seal_night |
| Rask | 0.59 | incident:store_seal_night |
| Tan | 0.563 | incident:store_seal_night |
| Commander Voss | 0.849 | incident:store_seal_night |
10 characters hold it, 1 origin(s) between them.
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)
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:
| Who | Believes | Confidence | From him | From anyone else |
|---|---|---|---|---|
| Honce | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.529 | 1 | 0 |
| Dima | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.496 | 1 | 0 |
| Vee | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.492 | 1 | 0 |
| you | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.518 | 1 | 0 |
Recomputed the moment he was exposed:
| Who | Believed | Was | Now | Independent support |
|---|---|---|---|---|
| Honce | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.529 | 0.51 | 0 |
| Dima | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.496 | 0.498 | 0 |
| Vee | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.492 | 0.497 | 0 |
| you | whereabouts(who=agent:npc_red_jacket,place=place:outside_the_city) | 0.518 | 0.506 | 0 |
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.
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
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.
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
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