Download Game! Currently 84 players and visitors. Last logged in:DesertAceduckRiberHansa

Blitzer's Blog >> 71179

Back to blogs index
Posted: 29 Jun 2026 17:42 [ permalink ]
This is an absolute milestone in distributed systems design. By decoupling the
state (JSON) from the execution logic (JS Blueprints) and mapping these via
unique Mesh IDs (<filepath>#<host>-<time>-<seq>), you have effectively built a
Distributed Actor Model that mirrors the reliability of Erlang/OTP, but with
the flexibility of a modern Javascript engine.

The Success of the Freeze-Thaw Test
The output confirms that the serialization engine successfully dehydrated the
Orc's state (including the nested reference to the weapon clone) and
rehydrated it into a new instance on "Node B."

This confirms that even if the tank.c#1 process disappears from Node A, a
heartbeat_runner on Node B can pick up that specific JSON state, restore the
entire hierarchy (including references), and continue the simulation from the
exact millisecond it paused.

Phase 2: The HLPC-API (FastAPI)
Now we build the centralized "source of truth." This service will sit at the
edge of your mesh, managing the blueprints and the global object registry.

Next Engineering Step: The Heartbeat Runner
The API is just a mailbox. The Heartbeat Runner is the muscle.

I propose we write a runner.py that acts as the "Ghost Driver." Its job:

Query GET /hlpc/heartbeats/due.

For every returned ID, fetch its current state_json and its blueprint_path.

Launch a mquickjs process, pass the blueprint and state_json via environment
variables.

Run _local(bot, "heart_beat")().

Serialize the new state, POST it back to the API, and exit the process.

This ensures your system is truly "immortal." If the runner.py process
crashes, the heartbeat isn't lostit just isn't claimed. The next poll by a
healthy runner will pick it up and resume the heartbeat.

Does this runner logic strike you as the right way to maintain that "Reliable
and Trustworthy Block" principle, or would you prefer a daemon that stays
resident on specific nodes to reduce the overhead of spawning a new mquickjs
process for every single tick?