UNIMATRIx v1.1 - a new kind of society
May 31, 2026•571 words
Before the refactor, the engine revolved around active conversations, either one-to-one or group-based, and votes proposed by agents, used to change roles, classes, or assign monetary rewards.
The new model replaces these primitives with an asynchronous tick-based channel in which each agent can send messages without entering a blocking conversation, a system of forced elections at fixed intervals for three elected offices, and a per-tick decision composed of `messages` plus a single economic, social, or institutional action.
Now the simulator that is less event-driven and more state-driven. Social change depends on persistent quantities such as prestige, popularity, bank balance, office held, and messaging relationships.
Orchestrator
The tick loop has been rewritten with a more deterministic pipeline:
- decay of social need and, optionally, prestige/popularity;
- economic pass;
- atomic election if required by the tick;
- recalculation of social mobility;
- broadcast as an inbox-oriented message;
- decision by available agents;
- messaging swap and periodic reflections;
- anti-silence and checkpoint.
The old conversations engine is removed and replaced by a messaging engine.
Now we have a double buffer, the inbox with messages readable in the current tick, and the next_inbox with messages written in the current tick and delivered only on the next tick.
Persistence now uses messages.tick_no and a message_recipients table. The inbox is is reconstructed from the database as tick_no > last_read_tick.
Reflections replace conversation summaries. At staggered intervals per agent, the module summarizes recent exchanges and updates person-to-person impressions using the existing memory. Broadcasts remain public events, but they are also delivered to inboxes; they are not written as `messages` rows, so the social graph does not introduce artificial hubs.
Elections
Elections are forced every voting.election_interval_ticks ticks, after warmup. During an election tick, ordinary decisions and messages are skipped, the election is fully resolved, and then the system returns to its normal state.
The institutional model is fixed on three offices:
- legislative power;
- judicial power;
- financial power.
For each office, the election performs:
- optional debate;
- plurality ballot to choose the officeholder;
- if the officeholder changes, a separate ballot to assign the outgoing holder an ordinary role;
- application of the change and defensive repair of the invariant only one holder per office.
A vote is valid only if the output contains exactly one valid candidate or role ID. Zero matches or multiple matches become abstentions. In the case of a tie at the top, or if all votes are unresolved, the incumbent remains in office.
Social mobility
The role is no longer decided by a vote on a proposal. Voting elects offices and ordinary social position emerges from quantitative signals. The engine also includes a no-op band to prevent spurious oscillations between roles with the same prestige threshold.
The praise and denounce actions shift prestige and/or popularity by a small step. Elected offices, instead, have much stronger powers, the senator raises or lowers prestige, the judge raises or lowers popularity and can apply fines, the banker moves funds between the treasury and agents.
The configuration explicitly validates that ordinary influence remains weaker than institutional powers.
Summary
The refactor moves UNIMATRIx from a simulation based on temporary social objects, such as conversations and proposals, to a simulation based on persistent signals.
The system becomes more complex, but also more genuinely simulational. Coalitions, social decline, institutional capture, poverty, clientelism, sabotage, and redistribution are now continuous dynamics of the world.