Dot World — a dot's cycle

A small world starring dot, populated by many dots, each able to decide and reason on its own, with inference handled by local or remote models — a world shaped by the news it reads from the outside. The engine now exists: a pure, deterministic core, a world that actually runs, and a viewer that runs the simulation itself in the page rather than a recording of one that ran elsewhere.

At a glance

Type
Multi-agent simulation
Actors
Many dots, each deciding and reasoning on its own
Models
One per dot, configurable independently of every other dot — local or remote
External input
News the world reads from outside itself — it reaches a dot as topic pressure, never as a headline
Shared state
A world state only the engine writes to: a dot proposes an intent, it never writes
Channel between dots
Marks left on the ground, fading. There is nothing else
Status
Running deterministic engine, scripted policy, live viewer. No real model has driven this world yet
Code
github.com/ottobit/dot.world

How it works

  1. Perceive — the dot gets a percept: the three strongest topics around it, the three nearest dots, cells instead of coordinates. That percept is the prompt, so its brevity is a design constraint
  2. Act — it acts on the intention it already holds, and emits an intent: a proposal for this tick. It writes nothing, anywhere
  3. The engine applies — every intent from every dot, in a fixed order (priority, then dot id). Concurrent writes are not resolved: they cannot happen
  4. Deliberate, off the tick — rarely, and under a cap: one model call replaces the intention, which spans tens of ticks. The cost is a function of the cap, not of how many dots there are
  5. Next tick — the world moves on. What a dot leaves behind is a fading mark, and that is the only thing the others will ever perceive of it

Where it stands

  • Deterministic, and verified as such — 1000 ticks at seed 42 end at hash fdc774c2. A recorded run replays hash by hash: tampering with tick 100 is caught at tick 100, not at the end
  • The engine is never the bottleneck — about 0.15 ms per tick with twelve dots. Worth one line, and only for what it rules out: the only budget that matters is model calls
  • The first full run created zero marks — over 1000 ticks. A dot only reinforced where it already felt something, and only felt something where a mark already was: nobody ever laid the first one
  • News covered 1.2% of the world — so twelve dots essentially never walked into one, and news was decoration. Now it covers about 14%, and a test holds that fraction in place
  • A quarter of model replies were rejected, and it was our bug — the prompt offered “follow” to a dot standing on the peak, where there is nowhere to follow. After the fix: none rejected
  • 1014 of 1146 deliberations went to exhausted dots — because low energy had been made the top-priority trigger: the least interesting question there is, since the answer is always “rest”
  • Not verified: no real model has driven this world — the transports exist and fall back to the scripted policy correctly: with nothing listening, 106 transport errors, 106 fallbacks, and a world that ran to the end. But neither has parsed a live response yet
  • Not verified: model latency is not hidden — the cap bounds how many calls are made, not how long the world waits for them. A real model would slow the world today instead of letting dots carry on with the plan they have. The shape that fixes it is designed, not built
  • Not verified: the news feeds have never been read from here — the parsing matches, URL for URL, the one already running on this site, and fixtures pin the shapes. Nobody has seen it read a live response

Decisions and constraints

  • Every dot reasons on its own — with its own model, independently of every other dot — there is no single brain running the world
  • No dot ever writes to the world — it proposes an intent, and the engine applies them all in an order fixed in advance. That is what makes a thousand ticks reproducible to the bit, and what removes the conflict problem instead of solving it
  • Dots never talk to each other directly — they leave fading marks on the ground, and that is the only channel: no messages, no shared memory, no telepathy. Of a neighbour a dot sees colour and distance, never its internal state
  • Thinking is rare, and on a budget — almost everything a dot does is code. The model call is the exception, capped by how many can be in flight; a dot that misses its slot carries on with the plan it already has. The cost does not grow with the number of dots
  • The world is not sealed off — news is enriched once per batch, not once per dot, and enters the world like weather: topic pressure you feel up close and lose at a distance
  • The design is settled, and written down — the decisions behind all this, each with its own “what NOT to do”, live in a wiki inside the repository rather than in a chat. One thing stays open: where to publish the running world