Cromblog
Simulating Civilizations IV
September 2, 2026 · 4 min read
For the first in what I hope will be a series of about half a dozen project-update posts this month, I am revisiting the Clashvergence project.
In my last related post, I ran a couple of different Clashvergence scenarios on the same map. I got more than a little distracted by my fondness for the custom Azhora map, which caused me to overlook some problems. First, the map was very large and therefore slow. Second, I was trying to encourage a specific narrative pattern rather than simply allowing one to emerge from the simulation.
For the live demo, I left Azhora on the bench and used smaller, automatically generated maps. The factions receive no scripted agendas, advantages, or favored outcomes, although geography still gives them different circumstances. This makes the simulation faster and its results easier to inspect.
The goals for this version were:
- Build and publish a live demo.
- Improve narrative generation.
- Evaluate the simulation’s objective behavior.
Live Demo
Previously, there was no browser-based way to try Clashvergence outside my development environment. I have now added a live demo.
The demo begins in World Builder, where the user can generate a map with one click or modify the settings first. The defaults produce a relatively small town-sized map with four factions and a 25-year stopping point, allowing the user to experience the complete process reasonably quickly. The interface warns users when their choices are likely to produce a slow simulation and prevents maps beyond the demo’s hard limits.
Once the map has been generated, the simulation begins automatically and advances one year at a time. The user can pause it, advance a single turn manually, or request a history after at least one turn has been completed. If the simulation is still running when a history is requested, it finishes the current turn before stopping. When it reaches the selected target year, it pauses and generates the first history automatically. The simulation can then be resumed for another block of turns.
The demo is observational, not playable like a game. The user does not control a faction. Instead, they watch the factions develop and select one as the focal culture for the generated history.
Narrative Generation
Each completed turn records annual facts for every faction, including important metrics and events. When the user requests a history, Clashvergence selects a bounded set of those annual records, adds the faction’s final condition and a limited amount of world context, and sends that material to the OpenAI API.
The prompt asks the model to write as a learned historian belonging to the selected culture—or to its surviving historical tradition—at the date when the simulation stopped. It is instructed to remain grounded in the supplied records rather than inventing wars, rulers, or other events that did not occur.
The user can choose the desired length. The default abridged history is approximately 500 to 750 words, keeping the demo reasonably fast and inexpensive. Each generated history requires one API request; the simulation itself does not call the language model every turn.
The intended experience is straightforward: generate a custom world, watch its geopolitics unfold in real time, and then receive an AI-written history interpreting what happened.
Evaluation
After setting up the live version, I decided to evaluate Clashvergence as I had previously evaluated Archivist. However, it could not be the same kind of evaluation. Archivist works from an existing historical manuscript that provides a reference source. Clashvergence generates its history through simulation, so there is no externally correct sequence of events against which a run can be scored for accuracy.
I limited the evaluation to objectively checkable properties rather than judging whether a simulated history was “good.” Determinism passed: across five seeds, 40 executions, and 180 artifact comparisons, identical seeds and configurations produced byte-identical output. Conservation was promising but incomplete. The 7,000 fully audited turns contained no population, territory, resource, trade, or treasury accounting violations, but the planned denominator was 10,000 turns, so the result is officially invalid rather than a pass. The performance and narrative-cost measurements were never reached and therefore produced no results.
The evaluation took so long largely because I made the mistake of retaining Azhora as a stress test. Some 1,000-turn runs took between four and seven hours and generated more than eight gigabytes of audit data apiece. Interrupted runs could not resume from internal checkpoints, and the evidence eventually consumed well over 100 GB before compression!
Whoops.
That is way too much for the relatively simple evaluation I had envisioned. It seems I am still paying for my fascination with my own custom map.
In a future evaluation, I would like to start with representative pilot runs, separate the normal test suite from large-world endurance testing, compress evidence as it is produced, and allow long runs to resume from exact checkpoints.
The conclusion, at least, shows a way forward: Clashvergence was deterministic under the tested conditions, showed no conservation defects in the completed evidence, and still needs a smaller, better-designed evaluation of performance and narrative-generation costs.