The siege council (flagship)
Four officers convene to decide the response to a frontier siege. Aleric, the commander, wants to fortify. Maren, in charge of supply, says the keep cannot survive a siege and the garrison must abandon the position. Drust, head of intelligence, has scouted the enemy and believes a sortie attack will succeed. Liss, the civilian liaison, demands evacuation of non-combatants before any military commitment. Each presses their case; the framework decides which proposals stand at the end of the council.
The flagship engine-driven demo. Two independent dials shape the outcome — β (scene intensity) and the relationship climate between the officers. The attack graph between proposals is fixed across both climates; only the strength of the attacks shifts. This is faithful to how SocietasRelationshipSource modulates attack weights from live relationship state in a real societas-wired scene.
The proposals and how they attack each other
Drag β to see the council shift
The two playgrounds run the same argumentation Rust crate compiled to WebAssembly, on the exact same attack topology. Only the weights differ — and the credulous-acceptance pattern shifts. Watch how, as β rises, the cold framework concentrates acceptance onto a clear pair of winners (sortie + fortify), while the warm framework keeps all four arguments credulously accepted because none of the attacks bind hard enough to defeat their target.
A pre-recorded multi-beat trace at four discrete β
The snapshots below come from running the full encounter bridge with MultiBeat resolution. Each beat shows which officer spoke, which proposal they put forward, and whether the responder accepted it.
Cold climate
Warm climate
What's actually happening — two regimes, not two climates
The engine produces two qualitatively different acceptance patterns from the same attack graph — but the dividing line isn't climate, it's whether enough attacks are still binding to give the framework a unique grounded extension:
Binding regime (cold β=0.0/0.3/0.5; warm β=0.0). When most attacks still have weight > β, the framework resolves to a clear grounded set. Drust's sortie has no attacker, so it sits in grounded. Sortie defeats both abandon (weight 0.6 attack) and evacuate (weight 0.5 attack). With those out, fortify has no live attacker either (its only attackers were abandon and evacuate) and joins the grounded extension. The StateActionScorer boosts the two grounded arguments (fortify and sortie). When Maren is asked to score her affordances, her own argue_abandon does not receive the boost; argue_evacuate_first does, so Maren ends up arguing for evacuation rather than her own retreat plan. Every beat passes acceptance because no responder has a credulously-accepted counter to what's being proposed. The council performs a consensus around the grounded winners, with officers letting their own losing positions go.
All-attacks-drop regime (warm β=0.3/0.5/0.8; cold β=0.8). Once β exceeds the heaviest remaining attack weight, every attack drops and all four arguments are credulously accepted — the framework can't pick a winner. The scorer treats them all as boosted, so each officer argues their own claim. But responders now have credulously-accepted counters on hand: when Aleric proposes fortify, the responder finds abandon and evacuate both credulously accepted and rejects. When Maren proposes abandon, the responder finds fortify and sortie credulously accepted and rejects. The contested pair (fortify ↔ abandon) collapses. Sortie and evacuate survive because their attackers in this attenuated graph have also dropped. The council splits along the lines of the contested pair, with Drust and Liss winning while Aleric and Maren lose.
The two regimes are real arguments-engine behaviors — scorer-driven claim-rallying in the binding regime, responder-driven rejection of the contested pair in the all-drop regime. Climate doesn't change which regime exists; it changes the β at which the transition happens. The warm climate crosses into the all-drop regime at β=0.3 (heaviest weight 0.3); the cold climate doesn't cross until β=0.6 (heaviest weight 0.6, so cold β=0.8 is the first sample past it).
Reading the outcome
Two parameters interact along a single axis — how many attacks are binding — and both move you along that axis:
- β is the storyteller's dial — turn it down for sharp scenes where every objection lands, up for cordial scenes where everyone tolerates dissent.
- Relationship weights are the world's state — set by societas-relations modifiers, simulation history, or hand-authored by the storyteller per scene. They shift how high β has to climb before the transition happens.
In this scene, the warm climate transitions out of the binding regime at β=0.3; the cold climate holds the binding regime all the way to β=0.5 and only crosses by β=0.8. So a storyteller can hit the same dramatic outcome (the contested pair openly failing) either by raising β in a cold scene or by leaving β low in a warm one — same regime, different paths in.
How this scene is wired
The pre-recorded traces come from tools/scene-tracer/src/scenes/siege_council.rs. It instantiates the four officers as argument_from_expert_opinion scheme instances (commander/military, logistics/supply, intelligence/scouting, civilian-liaison/duty), wires them into an EncounterArgumentationState, sets β with set_intensity, and resolves via encounter::resolution::MultiBeat with StateActionScorer and StateAcceptanceEval.
The cold and warm modes share an identical attack topology — the cold-mode weights are listed at the top of the siege_council.rs file, and warm mode multiplies all weights by 0.5. In a societas-wired production scene you would replace this static multiplier with SocietasRelationshipSource, which derives the per-edge weight from the live trust/fear/respect/etc. dimensions between the asserting actors.
Further reading
- The encounter integration concept — how the bridge composes with your scene engine.
- β as scene intensity — the mechanics of the dial.
- Modulate attack weights with societas — wire the relationship-climate variation to live state.
- The first-scene guide — build your own version, two-actor edition.
- The east wall — the simpler two-actor sibling of this scene.