Login and game are two ports of one process on day one. Everything below exists in the repository with tests over it; everything not below does not exist, and the roadmap says so plainly.
✔
Login conversation
The inherited handshake in full: RSA credential block, Blowfish stream, scrambled modulus. Argon2id passwords, rate limiting per address and per account, backoff on failure.
✔
World handoff
Server list, single-use session token, and a game port that expires the token the first time it accepts it. Accounts are created by command, never by the port.
✔
Generated codec
Every packet, enum and buffer primitive is emitted from schema files. schema.lock fails the build on a removed, reordered or retyped field, or a renumbered opcode.
✔
Entering and leaving
Character creation, selection and entry against Postgres, with templates and starting items from the datapack — and a way back out, to the character list or to the login screen.
✔
Tick and zones
One platform thread per zone, one writer, two rendezvous per tick. A message posted in tick N is applied in tick N+1, always.
✔
Movement on real ground
Movement resolved cell by cell against a converted collision grid, memory mapped off heap. A* over the same grid for routes.
✔
Interest management
Appear, move and disappear go out as CharInfo, MoveToLocation and DeleteObject, decided by a cell grid and never by a sweep over the zone.
✔
Chat and equipment
A line of chat and a change of gear both go out through the same three by three of cells. The audience is answered on the thread that owns it, not gathered at the edge.
✔
Pickup and drop
The client names what it reaches for and where it believes it stands; the second is dropped. The zone measures the distance and decides which of two players got there first.
✔
Inventory that survives a restart
What a character carries is written to Postgres and read back on entry. The counter that gives each item its identity survives a restart too, so the numbering continues instead of starting again.
✔
Money as a balance
Currency is a balance rather than a row in a bag, so money on the ground no longer reads as money destroyed. Two packets can no longer change the same bag at the same moment either.
✔
Ledger and transactions
Nothing can be added, removed or moved without saying where the record goes and why. Transactions apply together or undo backwards inside one tick.
✔
Datapack catalogues
The skill catalogue and the class stat tables are converted from the client content and loaded at boot into immutable structures. Combat needs both before any of it can be written.
✔
Targeting
A player can aim at something, and the server is what decides what was aimed at. Everything a target is for, damage and skills and death, is still ahead.
✔
Determinism and replay
Five hundred ticks over sixty four entities, seeded, produce the same state hash every run; two zones trading traffic over four hundred ticks do too.
✔
The probe
Instrumentation over every seam the simulation already exposes, so a silence stops looking like an answer. It decides nothing and is wired only at debug level.