↑2 two altitudes up — the idea, inside out
Now the cities are the characters.
One page ago, a city was a slow persona. Go one altitude higher and turn it inside out: a kingdom is a roster of those personas, each carrying trust, respect, resentment toward every other city — wired by the same router that already carries one character's order to another. Change the payload from an order to a grain shipment, a border raid, a whispered rumour — and the cast becomes a living map. An alliance is two cities cooperating. A war is a city's outburst. An embargo is its cold shoulder. Same physics — the nodes got bigger and slower, and the edges became the story.
Per-counterparty relation states, the cross-agent router (one-tick delay, deterministic), displaced aggression, relational valence, full traces — all running code at character scale.
vision · the frontierThe inter-city network is where this is heading. Every claim below grounds on a real mechanism, but the map you can poke here is an illustrative model — not a shipped grand-strategy sim.
map the map as a circuit
Five realms, breathing. Perturb one and trace the war back.
Below: two decades of a five-city map, computed live. Edges are bilateral relations — cool blue for trust, hot orange for resentment — the literal accumulation of grain sent, raids suffered, treaties kept. Nothing here is scripted: war is a threshold crossing on an edge; an embargo is a cold shoulder; a famine three hops away can be the upstream cause. Select a city, pull a lever, then read its mind.
the selected city
A war you can cause is a war you can debug — the why is a number crossing a threshold, traceable through the raid, the famine, the broken treaty. And the proof it's one machinery: read the Rosetta stone ↓
⇄ one machinery, two altitudes
The Rosetta stone.
This is not a new engine wearing a map. The left column is running code; the right column is the same mechanism re-labelled. Flip the figure between altitudes — the waveform doesn't change, only the names do.
anger, frustrationeffective_self_control — the brakeresentment[source] — per partycommand + command_pressurecooperate / refuse — by standing relationoutburst — anger × (1−self_control) clears θcold_responsenight/sleep — fast resets, slow persists⟳ the first cross-agent loop
The escalation spiral — with the safety dial visible.
Today the router is pure feed-forward — the back-edge is OFF, on purpose. Switch it on between two cities and you get the classic arms race: a demand, a refusal, the refusal feeding back as resentment, a harder demand. The engine's discipline is control theory, not scripted de-escalation: keep the loop poles inside the unit circle and the spiral stays bounded — decay and cooldowns are the damping.
… the rest of the frontier
Named, deferred, and grounded.
Chains of suzerainty
Empire → client → vassal: orders and grain quotas ripple down the chain, resentment ripples back up — each hop a router delivery, each city resolving through its own relation to its own liege. Hierarchy as wiring between identical engines.
Wounds that scar, grudges that cool
A season of peace relaxes border friction; a sacked city carries the wound for generations. The gravity of the cause sets the decay rate — a massacre scars deeper than a hungry year's displaced raid.
Rumour as contagion
Panic hops the trade graph on trust-weighted edges, fading and distorting per hop; a high-legitimacy city absorbs it and breaks the chain. Contagion fans out and dies — it doesn't blow up.
Observer-gated realms
Distant realms rest as a tiny vector of slow truths; a caravan, rumour, or army opens a causal channel and the realm is deterministically projected forward. Cost tracks attention, not population — thousands of coherent realms, no history to lose.

